mirror of https://github.com/trapexit/mergerfs.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
805 B
35 lines
805 B
#include <unistd.h>
|
|
#include <string.h>
|
|
#include <fcntl.h>
|
|
#include <err.h>
|
|
#include <sys/errno.h>
|
|
#include <sys/time.h>
|
|
#include <sys/param.h> /* MAXPATHLEN */
|
|
|
|
|
|
int
|
|
_futimesat(int fd, const char* path, struct timeval *tvp) {
|
|
char fullpath[MAXPATHLEN];
|
|
|
|
// Handle absolute paths
|
|
if(path[0] == '/') {
|
|
return ::utimes(path,tvp);
|
|
}
|
|
|
|
// OS X 10.12 (at least) has an issue with using AT_FDCWD in this specific call.
|
|
if (fd == AT_FDCWD) {
|
|
if (getcwd((char*)fullpath, MAXPATHLEN) == NULL) {
|
|
return -1;
|
|
}
|
|
} else {
|
|
if (fcntl(fd,F_GETPATH,fullpath) < 0) {
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
if (strlcat(fullpath, "/", MAXPATHLEN) > MAXPATHLEN || strlcat(fullpath, path, MAXPATHLEN) > MAXPATHLEN) {
|
|
return (errno=ENAMETOOLONG,-1);
|
|
}
|
|
|
|
return ::utimes(fullpath,tvp);;
|
|
}
|