rsc | 46f7993 | 2005-01-04 21:22:40 +0000 | [diff] [blame] | 1 | #include <u.h> |
| 2 | #include <libc.h> |
| 3 | #include <fcall.h> |
| 4 | #include <9pclient.h> |
| 5 | #include "fsimpl.h" |
| 6 | |
rsc | 73a5509 | 2006-07-23 02:55:34 +0000 | [diff] [blame^] | 7 | int |
| 8 | fsfopen(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 | |
rsc | 46f7993 | 2005-01-04 21:22:40 +0000 | [diff] [blame] | 21 | CFid* |
| 22 | fsopen(CFsys *fs, char *name, int mode) |
| 23 | { |
rsc | c31f81a | 2005-03-01 20:56:27 +0000 | [diff] [blame] | 24 | char e[ERRMAX]; |
rsc | 46f7993 | 2005-01-04 21:22:40 +0000 | [diff] [blame] | 25 | CFid *fid; |
rsc | 46f7993 | 2005-01-04 21:22:40 +0000 | [diff] [blame] | 26 | |
rsc | 73a5509 | 2006-07-23 02:55:34 +0000 | [diff] [blame^] | 27 | if((fid = fswalk(fs->root, name)) == nil) |
rsc | 46f7993 | 2005-01-04 21:22:40 +0000 | [diff] [blame] | 28 | return nil; |
rsc | 73a5509 | 2006-07-23 02:55:34 +0000 | [diff] [blame^] | 29 | if(fsfopen(fid, mode) < 0){ |
rsc | c31f81a | 2005-03-01 20:56:27 +0000 | [diff] [blame] | 30 | rerrstr(e, sizeof e); |
rsc | 46f7993 | 2005-01-04 21:22:40 +0000 | [diff] [blame] | 31 | fsclose(fid); |
rsc | c31f81a | 2005-03-01 20:56:27 +0000 | [diff] [blame] | 32 | errstr(e, sizeof e); |
rsc | 46f7993 | 2005-01-04 21:22:40 +0000 | [diff] [blame] | 33 | return nil; |
| 34 | } |
| 35 | fid->mode = mode; |
| 36 | return fid; |
| 37 | } |