commit 115dbcecc8d35d12b54d17dc1cba39089ad37b5f from: Russ Cox date: Sun Dec 07 00:05:41 2008 UTC lib9: can change length in dirfwstat, dirwstat; mode in dirwstat (David Swasey) commit - 63a686861c04660c55e353e76d7760b1b038d047 commit + 115dbcecc8d35d12b54d17dc1cba39089ad37b5f blob - 01eab59085aaf0ce923717b0fb904e63cafa5e3a blob + 95e184447f56f02f2f7984fefbf792f4aaaf4b9f --- src/lib9/dirfwstat.c +++ src/lib9/dirfwstat.c @@ -48,6 +48,10 @@ dirfwstat(int fd, Dir *dir) if(futimes(fd, tv) < 0) ret = -1; } + if(~dir->length != 0){ + if(ftruncate(fd, dir->length) < 0) + ret = -1; + } return ret; } blob - 396158dc97092896152910a758b343ce2dc515c6 blob + 0b81d90010e2f10fe501769c87727d67f258d607 --- src/lib9/dirwstat.c +++ 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; }