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