tlib9: can change length in dirfwstat, dirwstat; mode in dirwstat (David Swasey) - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 115dbcecc8d35d12b54d17dc1cba39089ad37b5f
 (DIR) parent 63a686861c04660c55e353e76d7760b1b038d047
 (HTM) 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:
         M src/lib9/dirfwstat.c                |       4 ++++
         M src/lib9/dirwstat.c                 |      23 +++++++++++++++++------
       
       2 files changed, 21 insertions(+), 6 deletions(-)
       ---
 (DIR) diff --git a/src/lib9/dirfwstat.c b/src/lib9/dirfwstat.c
       t@@ -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;
        }
        
 (DIR) diff --git a/src/lib9/dirwstat.c b/src/lib9/dirwstat.c
       t@@ -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;
        }