diff options
Diffstat (limited to 'src/lib9/dirfwstat.c')
-rw-r--r-- | src/lib9/dirfwstat.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/lib9/dirfwstat.c b/src/lib9/dirfwstat.c index 9f0d485c..c7cf64d6 100644 --- a/src/lib9/dirfwstat.c +++ b/src/lib9/dirfwstat.c @@ -22,16 +22,21 @@ futimes(int fd, struct timeval *tv) int dirfwstat(int fd, Dir *dir) { + int ret; struct timeval tv[2]; - /* BUG handle more */ - if(dir->mtime == ~0ULL) - return 0; - - tv[0].tv_sec = dir->mtime; - tv[0].tv_usec = 0; - tv[1].tv_sec = dir->mtime; - tv[1].tv_usec = 0; - return futimes(fd, tv); + 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; } |