mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-27 11:52:03 +00:00
53 lines
935 B
C
53 lines
935 B
C
#define NOPLAN9DEFINES
|
|
#include <u.h>
|
|
#include <libc.h>
|
|
#include <sys/time.h>
|
|
#include <sys/stat.h>
|
|
|
|
#if defined(__FreeBSD__) || defined(__APPLE__) || defined(__OpenBSD__) || defined(__linux__)
|
|
/* do nothing -- futimes exists and is fine */
|
|
|
|
#elif defined(__SunOS5_9__)
|
|
/* use futimesat */
|
|
static int
|
|
futimes(int fd, struct timeval *tv)
|
|
{
|
|
return futimesat(fd, 0, tv);
|
|
}
|
|
|
|
#else
|
|
/* provide dummy */
|
|
/* rename just in case -- linux provides an unusable one */
|
|
#undef futimes
|
|
#define futimes myfutimes
|
|
static int
|
|
futimes(int fd, struct timeval *tv)
|
|
{
|
|
werrstr("futimes not available");
|
|
return -1;
|
|
}
|
|
|
|
#endif
|
|
|
|
int
|
|
dirfwstat(int fd, Dir *dir)
|
|
{
|
|
int ret;
|
|
struct timeval tv[2];
|
|
|
|
ret = 0;
|
|
if(~dir->mode != 0){
|
|
if(fchmod(fd, dir->mode) < 0)
|
|
ret = -1;
|
|
}
|
|
if(~dir->mtime != 0){
|
|
tv[0].tv_sec = dir->mtime;
|
|
tv[0].tv_usec = 0;
|
|
tv[1].tv_sec = dir->mtime;
|
|
tv[1].tv_usec = 0;
|
|
if(futimes(fd, tv) < 0)
|
|
ret = -1;
|
|
}
|
|
return ret;
|
|
}
|
|
|