aboutsummaryrefslogtreecommitdiff
path: root/src/libfs/wstat.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libfs/wstat.c')
-rw-r--r--src/libfs/wstat.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/libfs/wstat.c b/src/libfs/wstat.c
new file mode 100644
index 00000000..90ae0e0f
--- /dev/null
+++ b/src/libfs/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 <fs.h>
+#include "fsimpl.h"
+
+int
+fsdirwstat(Fsys *fs, char *name, Dir *d)
+{
+ int n;
+ Fid *fid;
+
+ if((fid = fswalk(fs->root, name)) == nil)
+ return -1;
+
+ n = fsdirfwstat(fid, d);
+ fsclose(fid);
+ return n;
+}
+
+int
+fsdirfwstat(Fid *fid, Dir *d)
+{
+ char *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;
+}