URI: 
       tmore - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 86122474029f9aa85a6d036d23e8a4fa60d5ed4b
   DIR parent 56e3c29015da2147dbb308b4957fffceebcda657
  HTML Author: rsc <devnull@localhost>
       Date:   Fri, 27 Jan 2006 04:08:41 +0000
       
       more
       
       Diffstat:
         M src/lib9pclient/close.c             |      13 +++++++++++++
         M src/lib9pclient/create.c            |      22 +++++++++++++++++++++-
         M src/lib9pclient/mkfile              |       1 +
         A src/lib9pclient/remove.c            |      19 +++++++++++++++++++
       
       4 files changed, 54 insertions(+), 1 deletion(-)
       ---
   DIR diff --git a/src/lib9pclient/close.c b/src/lib9pclient/close.c
       t@@ -27,3 +27,16 @@ fsclose(CFid *fid)
                /* maybe someday there will be a ref count */
                fidclunk(fid);
        }
       +
       +int
       +fsfremove(CFid *fid)
       +{
       +        int n;
       +        Fcall tx, rx;
       +        
       +        tx.type = Tremove;
       +        tx.fid = fid->fid;
       +        n = _fsrpc(fid->fs, &tx, &rx, 0);
       +        _fsputfid(fid);
       +        return n;
       +}
   DIR diff --git a/src/lib9pclient/create.c b/src/lib9pclient/create.c
       t@@ -9,17 +9,37 @@ fscreate(CFsys *fs, char *name, int mode, ulong perm)
        {
                CFid *fid;
                Fcall tx, rx;
       +        char *p, *dir, *elem;
       +        
       +        p = strrchr(name, '/');
       +        if(p == nil){
       +                dir = "";
       +                elem = name;
       +        }else{
       +                dir = name;
       +                *p = 0;
       +                elem = p+1;
       +        }
        
       -        if((fid = _fswalk(fs->root, name)) == nil)
       +fprint(2, "create %s %s\n", dir, elem);
       +        if((fid = _fswalk(fs->root, dir)) == nil){
       +                if(p)
       +                        *p = '/';
                        return nil;
       +        }
                tx.type = Tcreate;
       +        tx.name = elem;
                tx.fid = fid->fid;
                tx.mode = mode;
                tx.perm = perm;
                if(_fsrpc(fs, &tx, &rx, 0) < 0){
       +                if(p)
       +                        *p = '/';
                        fsclose(fid);
                        return nil;
                }
       +        if(p)
       +                *p = '/';
                fid->mode = mode;
                return fid;
        }
   DIR diff --git a/src/lib9pclient/mkfile b/src/lib9pclient/mkfile
       t@@ -12,6 +12,7 @@ OFILES=\
                open.$O\
                openfd.$O\
                read.$O\
       +        remove.$O\
                seek.$O\
                stat.$O\
                walk.$O\
   DIR diff --git a/src/lib9pclient/remove.c b/src/lib9pclient/remove.c
       t@@ -0,0 +1,19 @@
       +/* Copyright (C) 2003 Russ Cox, Massachusetts Institute of Technology */
       +/* See COPYRIGHT */
       +
       +#include <u.h>
       +#include <libc.h>
       +#include <fcall.h>
       +#include <9pclient.h>
       +#include "fsimpl.h"
       +
       +int
       +fsremove(CFsys *fs, char *name)
       +{
       +        CFid *fid;
       +
       +        if((fid = _fswalk(fs->root, name)) == nil)
       +                return -1;
       +        return fsfremove(fid);
       +}
       +