diff options
Diffstat (limited to 'src/lib9')
-rw-r--r-- | src/lib9/dirfwstat.c | 23 | ||||
-rw-r--r-- | src/lib9/dirread.c | 17 |
2 files changed, 18 insertions, 22 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; } diff --git a/src/lib9/dirread.c b/src/lib9/dirread.c index 2e1ce886..ab9ec7f5 100644 --- a/src/lib9/dirread.c +++ b/src/lib9/dirread.c @@ -1,31 +1,22 @@ #include <u.h> +#define NOPLAN9DEFINES #include <libc.h> - -#undef asctime -#undef ctime -#undef gmtime -#undef localtime - #include <sys/stat.h> #include <dirent.h> extern int _p9dir(struct stat*, char*, Dir*, char**, char*); -/* everyone has getdirentries, just use that */ +/* almost everyone has getdirentries, just use that */ static int mygetdents(int fd, char *buf, int n) { ssize_t nn; -#if _GETDIRENTRIES_TAKES_LONG long off; -#else - off_t off; -#endif - off = seek(fd, 0, 1); + off = p9seek(fd, 0, 1); nn = getdirentries(fd, buf, n, &off); if(nn > 0) - seek(fd, off, 0); + p9seek(fd, off, 0); return nn; } |