Blame


1 6bb54fab 2003-11-25 devnull #define NOPLAN9DEFINES
2 fd04aace 2003-11-23 devnull #include <u.h>
3 fd04aace 2003-11-23 devnull #include <libc.h>
4 fd04aace 2003-11-23 devnull #include <sys/time.h>
5 6bb54fab 2003-11-25 devnull #include <sys/stat.h>
6 fd04aace 2003-11-23 devnull
7 4276f847 2007-05-20 devnull #if defined(__FreeBSD__) || defined(__APPLE__) || defined(__OpenBSD__) || defined(__linux__)
8 64bcfff3 2003-11-25 devnull /* do nothing -- futimes exists and is fine */
9 64bcfff3 2003-11-25 devnull
10 3df902ec 2004-03-26 devnull #elif defined(__SunOS5_9__)
11 64bcfff3 2003-11-25 devnull /* use futimesat */
12 1c253ceb 2003-11-23 devnull static int
13 1c253ceb 2003-11-23 devnull futimes(int fd, struct timeval *tv)
14 1c253ceb 2003-11-23 devnull {
15 1c253ceb 2003-11-23 devnull return futimesat(fd, 0, tv);
16 1c253ceb 2003-11-23 devnull }
17 64bcfff3 2003-11-25 devnull
18 64bcfff3 2003-11-25 devnull #else
19 64bcfff3 2003-11-25 devnull /* provide dummy */
20 64bcfff3 2003-11-25 devnull /* rename just in case -- linux provides an unusable one */
21 64bcfff3 2003-11-25 devnull #undef futimes
22 64bcfff3 2003-11-25 devnull #define futimes myfutimes
23 d2c4ee9e 2003-11-24 devnull static int
24 d2c4ee9e 2003-11-24 devnull futimes(int fd, struct timeval *tv)
25 d2c4ee9e 2003-11-24 devnull {
26 d2c4ee9e 2003-11-24 devnull werrstr("futimes not available");
27 d2c4ee9e 2003-11-24 devnull return -1;
28 d2c4ee9e 2003-11-24 devnull }
29 64bcfff3 2003-11-25 devnull
30 1c253ceb 2003-11-23 devnull #endif
31 1c253ceb 2003-11-23 devnull
32 fd04aace 2003-11-23 devnull int
33 fd04aace 2003-11-23 devnull dirfwstat(int fd, Dir *dir)
34 fd04aace 2003-11-23 devnull {
35 f7012583 2003-11-25 devnull int ret;
36 fd04aace 2003-11-23 devnull struct timeval tv[2];
37 fd04aace 2003-11-23 devnull
38 64bcfff3 2003-11-25 devnull ret = 0;
39 f7012583 2003-11-25 devnull if(~dir->mode != 0){
40 f7012583 2003-11-25 devnull if(fchmod(fd, dir->mode) < 0)
41 f7012583 2003-11-25 devnull ret = -1;
42 f7012583 2003-11-25 devnull }
43 f7012583 2003-11-25 devnull if(~dir->mtime != 0){
44 f7012583 2003-11-25 devnull tv[0].tv_sec = dir->mtime;
45 f7012583 2003-11-25 devnull tv[0].tv_usec = 0;
46 f7012583 2003-11-25 devnull tv[1].tv_sec = dir->mtime;
47 f7012583 2003-11-25 devnull tv[1].tv_usec = 0;
48 f7012583 2003-11-25 devnull if(futimes(fd, tv) < 0)
49 f7012583 2003-11-25 devnull ret = -1;
50 f7012583 2003-11-25 devnull }
51 115dbcec 2008-12-07 rsc if(~dir->length != 0){
52 115dbcec 2008-12-07 rsc if(ftruncate(fd, dir->length) < 0)
53 115dbcec 2008-12-07 rsc ret = -1;
54 115dbcec 2008-12-07 rsc }
55 f7012583 2003-11-25 devnull return ret;
56 fd04aace 2003-11-23 devnull }