Blame


1 d3df3087 2003-12-06 devnull /* Copyright (C) 2003 Russ Cox, Massachusetts Institute of Technology */
2 d3df3087 2003-12-06 devnull /* See COPYRIGHT */
3 d3df3087 2003-12-06 devnull
4 d3df3087 2003-12-06 devnull #include <u.h>
5 d3df3087 2003-12-06 devnull #include <libc.h>
6 d3df3087 2003-12-06 devnull #include <fcall.h>
7 d3df3087 2003-12-06 devnull #include <fs.h>
8 d3df3087 2003-12-06 devnull #include "fsimpl.h"
9 d3df3087 2003-12-06 devnull
10 d3df3087 2003-12-06 devnull int
11 d3df3087 2003-12-06 devnull fsdirwstat(Fsys *fs, char *name, Dir *d)
12 d3df3087 2003-12-06 devnull {
13 d3df3087 2003-12-06 devnull int n;
14 d3df3087 2003-12-06 devnull Fid *fid;
15 d3df3087 2003-12-06 devnull
16 d3df3087 2003-12-06 devnull if((fid = fswalk(fs->root, name)) == nil)
17 d3df3087 2003-12-06 devnull return -1;
18 d3df3087 2003-12-06 devnull
19 d3df3087 2003-12-06 devnull n = fsdirfwstat(fid, d);
20 d3df3087 2003-12-06 devnull fsclose(fid);
21 d3df3087 2003-12-06 devnull return n;
22 d3df3087 2003-12-06 devnull }
23 d3df3087 2003-12-06 devnull
24 d3df3087 2003-12-06 devnull int
25 d3df3087 2003-12-06 devnull fsdirfwstat(Fid *fid, Dir *d)
26 d3df3087 2003-12-06 devnull {
27 be22ae2d 2004-03-26 devnull uchar *a;
28 d3df3087 2003-12-06 devnull int n, nn;
29 d3df3087 2003-12-06 devnull Fcall tx, rx;
30 d3df3087 2003-12-06 devnull
31 d3df3087 2003-12-06 devnull n = sizeD2M(d);
32 d3df3087 2003-12-06 devnull a = malloc(n);
33 d3df3087 2003-12-06 devnull if(a == nil)
34 d3df3087 2003-12-06 devnull return -1;
35 d3df3087 2003-12-06 devnull nn = convD2M(d, a, n);
36 d3df3087 2003-12-06 devnull if(n != nn){
37 d3df3087 2003-12-06 devnull werrstr("convD2M and sizeD2M disagree");
38 d3df3087 2003-12-06 devnull free(a);
39 d3df3087 2003-12-06 devnull return -1;
40 d3df3087 2003-12-06 devnull }
41 d3df3087 2003-12-06 devnull
42 d3df3087 2003-12-06 devnull tx.type = Twstat;
43 d3df3087 2003-12-06 devnull tx.fid = fid->fid;
44 d3df3087 2003-12-06 devnull tx.stat = a;
45 d3df3087 2003-12-06 devnull tx.nstat = n;
46 d3df3087 2003-12-06 devnull n = fsrpc(fid->fs, &tx, &rx, 0);
47 d3df3087 2003-12-06 devnull free(a);
48 d3df3087 2003-12-06 devnull return n;
49 d3df3087 2003-12-06 devnull }