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 46f79934 2005-01-04 devnull CFid*
8 46f79934 2005-01-04 devnull fscreate(CFsys *fs, char *name, int mode, ulong perm)
9 46f79934 2005-01-04 devnull {
10 46f79934 2005-01-04 devnull CFid *fid;
11 46f79934 2005-01-04 devnull Fcall tx, rx;
12 86122474 2006-01-27 devnull char *p, *dir, *elem;
13 86122474 2006-01-27 devnull
14 86122474 2006-01-27 devnull p = strrchr(name, '/');
15 86122474 2006-01-27 devnull if(p == nil){
16 86122474 2006-01-27 devnull dir = "";
17 86122474 2006-01-27 devnull elem = name;
18 86122474 2006-01-27 devnull }else{
19 86122474 2006-01-27 devnull dir = name;
20 86122474 2006-01-27 devnull *p = 0;
21 86122474 2006-01-27 devnull elem = p+1;
22 86122474 2006-01-27 devnull }
23 46f79934 2005-01-04 devnull
24 86122474 2006-01-27 devnull fprint(2, "create %s %s\n", dir, elem);
25 86122474 2006-01-27 devnull if((fid = _fswalk(fs->root, dir)) == nil){
26 86122474 2006-01-27 devnull if(p)
27 86122474 2006-01-27 devnull *p = '/';
28 46f79934 2005-01-04 devnull return nil;
29 86122474 2006-01-27 devnull }
30 46f79934 2005-01-04 devnull tx.type = Tcreate;
31 86122474 2006-01-27 devnull tx.name = elem;
32 46f79934 2005-01-04 devnull tx.fid = fid->fid;
33 46f79934 2005-01-04 devnull tx.mode = mode;
34 46f79934 2005-01-04 devnull tx.perm = perm;
35 46f79934 2005-01-04 devnull if(_fsrpc(fs, &tx, &rx, 0) < 0){
36 86122474 2006-01-27 devnull if(p)
37 86122474 2006-01-27 devnull *p = '/';
38 46f79934 2005-01-04 devnull fsclose(fid);
39 46f79934 2005-01-04 devnull return nil;
40 46f79934 2005-01-04 devnull }
41 86122474 2006-01-27 devnull if(p)
42 86122474 2006-01-27 devnull *p = '/';
43 46f79934 2005-01-04 devnull fid->mode = mode;
44 46f79934 2005-01-04 devnull return fid;
45 46f79934 2005-01-04 devnull }