- struct timespec t[2];
- t[0].tv_sec = 0;
- t[0].tv_nsec = UTIME_NOW;
- t[1].tv_sec = modtime;
- t[1].tv_nsec = mod_nsec;
- if (utimensat(AT_FDCWD, fname, t, AT_SYMLINK_NOFOLLOW) < 0)
- return S_ISLNK(mode) && errno == ENOSYS ? 1 : -1;
- return 0;
-#elif defined HAVE_UTIMES || defined HAVE_LUTIMES
- struct timeval t[2];
- t[0].tv_sec = time(NULL);
- t[0].tv_usec = 0;
- t[1].tv_sec = modtime;
- t[1].tv_usec = mod_nsec / 1000;
-# ifdef HAVE_LUTIMES
- if (lutimes(fname, t) < 0)
- return S_ISLNK(mode) && errno == ENOSYS ? 1 : -1;
- return 0;
-# else
- return utimes(fname, t);
-# endif
-#elif defined HAVE_STRUCT_UTIMBUF
- struct utimbuf tbuf;
- tbuf.actime = time(NULL);
- tbuf.modtime = modtime;
- return utime(fname,&tbuf);
-#elif defined HAVE_UTIME
- time_t t[2];
- t[0] = time(NULL);
- t[1] = modtime;
- return utime(fname,t);
-#else
-#error No file-time-modification routine found!