#define _GNU_SOURCE #include #include #include #include #include int lutimes(const char *filename, const struct timeval tv[2]) { struct timespec times[2]; if (tv != NULL) { if (tv[0].tv_sec < 0 || tv[0].tv_usec < 0 || tv[1].tv_sec < 0 || tv[1].tv_usec < 0) { errno = EINVAL; return -1; } times[0].tv_sec = tv[0].tv_sec; times[0].tv_nsec = tv[0].tv_usec * 1000; times[1].tv_sec = tv[1].tv_sec; times[1].tv_nsec = tv[1].tv_usec * 1000; } return utimensat(AT_FDCWD, filename, tv ? times : NULL, AT_SYMLINK_NOFOLLOW); }