40 lines
838 B
C
40 lines
838 B
C
#include "../git-compat-util.h"
|
|
|
|
int git_utimensat(int fd, const char *path, const struct timespec times[2], int flag)
|
|
{
|
|
struct timeval tv[2];
|
|
struct timeval *tvp = NULL;
|
|
|
|
if (fd != AT_FDCWD) {
|
|
errno = ENOSYS;
|
|
return -1;
|
|
}
|
|
|
|
if (flag) {
|
|
errno = ENOSYS;
|
|
return -1;
|
|
}
|
|
|
|
if (times) {
|
|
for (int i = 0; i < 2; i++) {
|
|
if (times[i].tv_nsec == UTIME_NOW) {
|
|
struct timeval now;
|
|
gettimeofday(&now, NULL);
|
|
tv[i] = now;
|
|
} else if (times[i].tv_nsec == UTIME_OMIT) {
|
|
struct stat st;
|
|
if (stat(path, &st) < 0)
|
|
return -1;
|
|
tv[i].tv_sec = (i == 0) ? st.st_atime : st.st_mtime;
|
|
tv[i].tv_usec = (i == 0) ? ST_ATIME_NSEC(st) / 1000 : ST_MTIME_NSEC(st) / 1000;
|
|
} else {
|
|
tv[i].tv_sec = times[i].tv_sec;
|
|
tv[i].tv_usec = times[i].tv_nsec / 1000;
|
|
}
|
|
}
|
|
tvp = tv;
|
|
}
|
|
|
|
return utimes(path, tvp);
|
|
}
|