/* 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; | |
} |