1 46f79934 2005-01-04 devnull /* Copyright (C) 2003 Russ Cox, Massachusetts Institute of Technology */
2 46f79934 2005-01-04 devnull /* See COPYRIGHT */
4 46f79934 2005-01-04 devnull #include <u.h>
5 46f79934 2005-01-04 devnull #include <libc.h>
6 46f79934 2005-01-04 devnull #include <fcall.h>
7 46f79934 2005-01-04 devnull #include <9pclient.h>
8 46f79934 2005-01-04 devnull #include "fsimpl.h"
11 46f79934 2005-01-04 devnull fsdirstat(CFsys *fs, char *name)
14 46f79934 2005-01-04 devnull CFid *fid;
16 46f79934 2005-01-04 devnull if((fid = _fswalk(fs->root, name)) == nil)
17 46f79934 2005-01-04 devnull return nil;
19 46f79934 2005-01-04 devnull d = fsdirfstat(fid);
20 46f79934 2005-01-04 devnull fsclose(fid);
21 46f79934 2005-01-04 devnull return d;
25 46f79934 2005-01-04 devnull fsdirfstat(CFid *fid)
28 46f79934 2005-01-04 devnull CFsys *fs;
29 46f79934 2005-01-04 devnull Fcall tx, rx;
30 46f79934 2005-01-04 devnull void *freep;
33 46f79934 2005-01-04 devnull fs = fid->fs;
34 46f79934 2005-01-04 devnull tx.type = Tstat;
35 46f79934 2005-01-04 devnull tx.fid = fid->fid;
37 46f79934 2005-01-04 devnull if(_fsrpc(fs, &tx, &rx, &freep) < 0)
38 46f79934 2005-01-04 devnull return nil;
40 46f79934 2005-01-04 devnull d = malloc(sizeof(Dir)+rx.nstat);
41 46f79934 2005-01-04 devnull if(d == nil){
42 46f79934 2005-01-04 devnull free(freep);
43 46f79934 2005-01-04 devnull return nil;
45 46f79934 2005-01-04 devnull n = convM2D(rx.stat, rx.nstat, d, (char*)&d[1]);
46 46f79934 2005-01-04 devnull free(freep);
47 46f79934 2005-01-04 devnull if(n != rx.nstat){
49 46f79934 2005-01-04 devnull werrstr("rx.nstat and convM2D disagree about dir length");
50 46f79934 2005-01-04 devnull return nil;
52 46f79934 2005-01-04 devnull return d;