On 09/16/10 16:28, Eric Blake wrote: > int > -fdutimensat (int dir, char const *file, int fd, struct timespec const ts[2]) > +fdutimensat (int dir, char const *file, int fd, struct timespec const ts[2], > + int atflag) > { > int result = 1; > + if (atflag & ~AT_SYMLINK_NOFOLLOW) > + { > + errno = EINVAL; > + return -1; > + } > if (0 <= fd) > - result = futimens (fd, ts); > + { > + if (atflag) > + { > + errno = EINVAL; > + return -1; > + } > + result = futimens (fd, ts); > + }
Thanks, but unfortunately this doesn't look quite right for GNU tar's purposes. Tar specifies a nonnegative FD along with a flag equal to AT_SYMLINK_NOFOLLOW. The idea is that if the underlying system doesn't support futimens for some reason, tar can still fall back on utimensat, and know that utimensat won't follow the symlink. I don't know whether there is any actual system where utimensat works but futimens doesn't, but I'm pretty sure there is such a problem with chmod/chown/etc. and I wouldn't be surprised if the problem also existed with futimens. If you like, I can install the obvious patch.