aboutsummaryrefslogtreecommitdiff
path: root/src/lib9/dirfwstat.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib9/dirfwstat.c')
-rw-r--r--src/lib9/dirfwstat.c23
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;
}