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 fprint(2, "create %s %s\n", dir, elem);
25 if((fid = _fswalk(fs->root, dir)) == nil){
26 if(p)
27 *p = '/';
28 return nil;
29 }
30 tx.type = Tcreate;
31 tx.name = elem;
32 tx.fid = fid->fid;
33 tx.mode = mode;
34 tx.perm = perm;
35 if(_fsrpc(fs, &tx, &rx, 0) < 0){
36 if(p)
37 *p = '/';
38 fsclose(fid);
39 return nil;
40 }
41 if(p)
42 *p = '/';
43 fid->mode = mode;
44 return fid;
45 }