dirfwstat.c - 9base - revived minimalist port of Plan 9 userland to Unix | |
git clone git://git.suckless.org/9base | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
dirfwstat.c (1154B) | |
--- | |
1 #define NOPLAN9DEFINES | |
2 #include <u.h> | |
3 #include <libc.h> | |
4 #include <sys/time.h> | |
5 #include <sys/stat.h> | |
6 | |
7 #if defined(__FreeBSD__) || defined(__APPLE__) || defined(__OpenBSD__) |… | |
8 /* do nothing -- futimes exists and is fine */ | |
9 | |
10 # if defined(__UCLIBC__) | |
11 /* use futimesat */ | |
12 static int | |
13 futimes(int fd, struct timeval *tv) | |
14 { | |
15 return futimesat(fd, 0, tv); | |
16 } | |
17 | |
18 # endif | |
19 #elif defined(__SunOS5_9__) | |
20 /* use futimesat */ | |
21 static int | |
22 futimes(int fd, struct timeval *tv) | |
23 { | |
24 return futimesat(fd, 0, tv); | |
25 } | |
26 | |
27 #else | |
28 /* provide dummy */ | |
29 /* rename just in case -- linux provides an unusable one */ | |
30 #undef futimes | |
31 #define futimes myfutimes | |
32 static int | |
33 futimes(int fd, struct timeval *tv) | |
34 { | |
35 werrstr("futimes not available"); | |
36 return -1; | |
37 } | |
38 | |
39 #endif | |
40 | |
41 int | |
42 dirfwstat(int fd, Dir *dir) | |
43 { | |
44 int ret; | |
45 struct timeval tv[2]; | |
46 | |
47 ret = 0; | |
48 if(~dir->mode != 0){ | |
49 if(fchmod(fd, dir->mode) < 0) | |
50 ret = -1; | |
51 } | |
52 if(~dir->mtime != 0){ | |
53 tv[0].tv_sec = dir->mtime; | |
54 tv[0].tv_usec = 0; | |
55 tv[1].tv_sec = dir->mtime; | |
56 tv[1].tv_usec = 0; | |
57 if(futimes(fd, tv) < 0) | |
58 ret = -1; | |
59 } | |
60 if(~dir->length != 0){ | |
61 if(ftruncate(fd, dir->length) < 0) | |
62 ret = -1; | |
63 } | |
64 return ret; | |
65 } | |
66 |