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 int
8 46f79934 2005-01-04 devnull fsopenfd(CFsys *fs, char *name, int mode)
9 46f79934 2005-01-04 devnull {
10 46f79934 2005-01-04 devnull CFid *fid;
11 46f79934 2005-01-04 devnull Fcall tx, rx;
12 46f79934 2005-01-04 devnull
13 73a5509a 2006-07-23 devnull if((fid = fswalk(fs->root, name)) == nil)
14 46f79934 2005-01-04 devnull return -1;
15 46f79934 2005-01-04 devnull tx.type = Topenfd;
16 46f79934 2005-01-04 devnull tx.fid = fid->fid;
17 46f79934 2005-01-04 devnull tx.mode = mode&~OCEXEC;
18 46f79934 2005-01-04 devnull if(_fsrpc(fs, &tx, &rx, 0) < 0){
19 46f79934 2005-01-04 devnull fsclose(fid);
20 46f79934 2005-01-04 devnull return -1;
21 46f79934 2005-01-04 devnull }
22 46f79934 2005-01-04 devnull _fsputfid(fid);
23 46f79934 2005-01-04 devnull if(mode&OCEXEC && rx.unixfd>=0)
24 46f79934 2005-01-04 devnull fcntl(rx.unixfd, F_SETFL, FD_CLOEXEC);
25 46f79934 2005-01-04 devnull return rx.unixfd;
26 46f79934 2005-01-04 devnull }