Blob
1 #include <u.h>2 #include <libc.h>3 #include <fcall.h>4 #include <9pclient.h>5 #include "fsimpl.h"7 int8 fsfcreate(CFid *fid, char *name, int mode, ulong perm)9 {10 Fcall tx, rx;12 tx.type = Tcreate;13 tx.name = name;14 tx.fid = fid->fid;15 tx.mode = mode;16 tx.perm = perm;17 if(_fsrpc(fid->fs, &tx, &rx, 0) < 0)18 return -1;19 fid->mode = mode;20 return 0;21 }23 CFid*24 fscreate(CFsys *fs, char *name, int mode, ulong perm)25 {26 CFid *fid;27 char *p, *dir, *elem;29 p = strrchr(name, '/');30 if(p == nil){31 dir = "";32 elem = name;33 }else{34 dir = name;35 *p = 0;36 elem = p+1;37 }39 if((fid = fswalk(fs->root, dir)) == nil){40 if(p)41 *p = '/';42 return nil;43 }44 if(p)45 *p = '/';46 if(fsfcreate(fid, elem, mode, perm) < 0){47 fsclose(fid);48 return nil;49 }50 return fid;51 }