Blame


1 46f79934 2005-01-04 devnull #include <u.h>
2 46f79934 2005-01-04 devnull #include <libc.h>
3 46f79934 2005-01-04 devnull #include <fcall.h>
4 46f79934 2005-01-04 devnull #include <9pclient.h>
5 46f79934 2005-01-04 devnull #include "fsimpl.h"
6 46f79934 2005-01-04 devnull
7 73a5509a 2006-07-23 devnull int
8 73a5509a 2006-07-23 devnull fsfcreate(CFid *fid, char *name, int mode, ulong perm)
9 73a5509a 2006-07-23 devnull {
10 73a5509a 2006-07-23 devnull Fcall tx, rx;
11 73a5509a 2006-07-23 devnull
12 73a5509a 2006-07-23 devnull tx.type = Tcreate;
13 73a5509a 2006-07-23 devnull tx.name = name;
14 73a5509a 2006-07-23 devnull tx.fid = fid->fid;
15 73a5509a 2006-07-23 devnull tx.mode = mode;
16 73a5509a 2006-07-23 devnull tx.perm = perm;
17 06421c01 2008-07-04 rsc tx.extension = nil;
18 73a5509a 2006-07-23 devnull if(_fsrpc(fid->fs, &tx, &rx, 0) < 0)
19 73a5509a 2006-07-23 devnull return -1;
20 73a5509a 2006-07-23 devnull fid->mode = mode;
21 73a5509a 2006-07-23 devnull return 0;
22 73a5509a 2006-07-23 devnull }
23 73a5509a 2006-07-23 devnull
24 46f79934 2005-01-04 devnull CFid*
25 46f79934 2005-01-04 devnull fscreate(CFsys *fs, char *name, int mode, ulong perm)
26 46f79934 2005-01-04 devnull {
27 46f79934 2005-01-04 devnull CFid *fid;
28 86122474 2006-01-27 devnull char *p, *dir, *elem;
29 fa325e9b 2020-01-10 cross
30 86122474 2006-01-27 devnull p = strrchr(name, '/');
31 86122474 2006-01-27 devnull if(p == nil){
32 86122474 2006-01-27 devnull dir = "";
33 86122474 2006-01-27 devnull elem = name;
34 86122474 2006-01-27 devnull }else{
35 86122474 2006-01-27 devnull dir = name;
36 86122474 2006-01-27 devnull *p = 0;
37 86122474 2006-01-27 devnull elem = p+1;
38 86122474 2006-01-27 devnull }
39 46f79934 2005-01-04 devnull
40 73a5509a 2006-07-23 devnull if((fid = fswalk(fs->root, dir)) == nil){
41 86122474 2006-01-27 devnull if(p)
42 86122474 2006-01-27 devnull *p = '/';
43 46f79934 2005-01-04 devnull return nil;
44 86122474 2006-01-27 devnull }
45 73a5509a 2006-07-23 devnull if(p)
46 73a5509a 2006-07-23 devnull *p = '/';
47 73a5509a 2006-07-23 devnull if(fsfcreate(fid, elem, mode, perm) < 0){
48 46f79934 2005-01-04 devnull fsclose(fid);
49 46f79934 2005-01-04 devnull return nil;
50 46f79934 2005-01-04 devnull }
51 46f79934 2005-01-04 devnull return fid;
52 46f79934 2005-01-04 devnull }