diff options
Diffstat (limited to 'src/lib9pclient/create.c')
-rw-r--r-- | src/lib9pclient/create.c | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/src/lib9pclient/create.c b/src/lib9pclient/create.c index 350dee62..9e1d5c25 100644 --- a/src/lib9pclient/create.c +++ b/src/lib9pclient/create.c @@ -4,11 +4,26 @@ #include <9pclient.h> #include "fsimpl.h" +int +fsfcreate(CFid *fid, char *name, int mode, ulong perm) +{ + Fcall tx, rx; + + tx.type = Tcreate; + tx.name = name; + tx.fid = fid->fid; + tx.mode = mode; + tx.perm = perm; + if(_fsrpc(fid->fs, &tx, &rx, 0) < 0) + return -1; + fid->mode = mode; + return 0; +} + CFid* fscreate(CFsys *fs, char *name, int mode, ulong perm) { CFid *fid; - Fcall tx, rx; char *p, *dir, *elem; p = strrchr(name, '/'); @@ -21,24 +36,16 @@ fscreate(CFsys *fs, char *name, int mode, ulong perm) elem = p+1; } - if((fid = _fswalk(fs->root, dir)) == nil){ + 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 = '/'; + if(p) + *p = '/'; + if(fsfcreate(fid, elem, mode, perm) < 0){ fsclose(fid); return nil; } - if(p) - *p = '/'; - fid->mode = mode; return fid; } |