Blob


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