plan9port

[fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port # fast
git clone https://src.adamsgaard.dk/plan9port.git # slow
Log | Files | Refs | README | LICENSE Back to index

commit 115dbcecc8d35d12b54d17dc1cba39089ad37b5f
parent 63a686861c04660c55e353e76d7760b1b038d047
Author: Russ Cox <rsc@swtch.com>
Date:   Sat,  6 Dec 2008 16:05:41 -0800

lib9: can change length in dirfwstat, dirwstat; mode in dirwstat (David Swasey)

Diffstat:
Msrc/lib9/dirfwstat.c | 4++++
Msrc/lib9/dirwstat.c | 23+++++++++++++++++------
2 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/src/lib9/dirfwstat.c b/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; } diff --git 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; }