lib9: can change length in dirfwstat, dirwstat; mode in dirwstat (David Swasey)
diff --git a/src/lib9/dirfwstat.c b/src/lib9/dirfwstat.c index 01eab59..95e1844 100644 --- a/src/lib9/dirfwstat.c +++ b/src/lib9/dirfwstat.c
@@ -48,6 +48,10 @@ if(futimes(fd, tv) < 0) ret = -1; } + if(~dir->length != 0){ + if(ftruncate(fd, dir->length) < 0) + ret = -1; + } return ret; }
diff --git a/src/lib9/dirwstat.c b/src/lib9/dirwstat.c index 396158d..0b81d90 100644 --- a/src/lib9/dirwstat.c +++ b/src/lib9/dirwstat.c
@@ -7,13 +7,24 @@ int dirwstat(char *file, Dir *dir) { + int ret; struct utimbuf ub; /* BUG handle more */ - if(~dir->mtime == 0) - return 0; - - ub.actime = dir->mtime; - ub.modtime = dir->mtime; - return utime(file, &ub); + ret = 0; + if(~dir->mode != 0){ + if(chmod(file, dir->mode) < 0) + ret = -1; + } + if(~dir->mtime != 0){ + ub.actime = dir->mtime; + ub.modtime = dir->mtime; + if(utime(file, &ub) < 0) + ret = -1; + } + if(~dir->length != 0){ + if(truncate(file, dir->length) < 0) + ret = -1; + } + return ret; }