blob: 2e8e343cd9192581e44bce22e0abf44490bc9bde [file] [log] [blame]
rsc46f79932005-01-04 21:22:40 +00001#include <u.h>
2#include <libc.h>
3#include <fcall.h>
4#include <9pclient.h>
5#include "fsimpl.h"
6
rsc73a55092006-07-23 02:55:34 +00007int
8fsfopen(CFid *fid, int mode)
9{
10 Fcall tx, rx;
11
12 tx.type = Topen;
13 tx.fid = fid->fid;
14 tx.mode = mode;
15 if(_fsrpc(fid->fs, &tx, &rx, 0) < 0)
16 return -1;
17 fid->mode = mode;
18 return 0;
19}
20
rsc46f79932005-01-04 21:22:40 +000021CFid*
22fsopen(CFsys *fs, char *name, int mode)
23{
rscc31f81a2005-03-01 20:56:27 +000024 char e[ERRMAX];
rsc46f79932005-01-04 21:22:40 +000025 CFid *fid;
rsc46f79932005-01-04 21:22:40 +000026
rsc73a55092006-07-23 02:55:34 +000027 if((fid = fswalk(fs->root, name)) == nil)
rsc46f79932005-01-04 21:22:40 +000028 return nil;
rsc73a55092006-07-23 02:55:34 +000029 if(fsfopen(fid, mode) < 0){
rscc31f81a2005-03-01 20:56:27 +000030 rerrstr(e, sizeof e);
rsc46f79932005-01-04 21:22:40 +000031 fsclose(fid);
rscc31f81a2005-03-01 20:56:27 +000032 errstr(e, sizeof e);
rsc46f79932005-01-04 21:22:40 +000033 return nil;
34 }
35 fid->mode = mode;
36 return fid;
37}