Blob


1 #include <u.h>
2 #include <libc.h>
3 #include <fcall.h>
4 #include <9pclient.h>
5 #include "fsimpl.h"
7 int
8 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 }