diff options
Diffstat (limited to 'src/lib9pclient/wstat.c')
-rw-r--r-- | src/lib9pclient/wstat.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/lib9pclient/wstat.c b/src/lib9pclient/wstat.c new file mode 100644 index 00000000..27a28740 --- /dev/null +++ b/src/lib9pclient/wstat.c @@ -0,0 +1,49 @@ +/* Copyright (C) 2003 Russ Cox, Massachusetts Institute of Technology */ +/* See COPYRIGHT */ + +#include <u.h> +#include <libc.h> +#include <fcall.h> +#include <9pclient.h> +#include "fsimpl.h" + +int +fsdirwstat(CFsys *fs, char *name, Dir *d) +{ + int n; + CFid *fid; + + if((fid = _fswalk(fs->root, name)) == nil) + return -1; + + n = fsdirfwstat(fid, d); + fsclose(fid); + return n; +} + +int +fsdirfwstat(CFid *fid, Dir *d) +{ + uchar *a; + int n, nn; + Fcall tx, rx; + + n = sizeD2M(d); + a = malloc(n); + if(a == nil) + return -1; + nn = convD2M(d, a, n); + if(n != nn){ + werrstr("convD2M and sizeD2M disagree"); + free(a); + return -1; + } + + tx.type = Twstat; + tx.fid = fid->fid; + tx.stat = a; + tx.nstat = n; + n = _fsrpc(fid->fs, &tx, &rx, 0); + free(a); + return n; +} |