/* 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"

Dir*
fsdirstat(CFsys *fs, char *name)
{
	Dir *d;
	CFid *fid;

	if((fid = _fswalk(fs->root, name)) == nil)
		return nil;
	
	d = fsdirfstat(fid);
	fsclose(fid);
	return d;
}

Dir*
fsdirfstat(CFid *fid)
{
	Dir *d;
	CFsys *fs;
	Fcall tx, rx;
	void *freep;
	int n;

	fs = fid->fs;
	tx.type = Tstat;
	tx.fid = fid->fid;

	if(_fsrpc(fs, &tx, &rx, &freep) < 0)
		return nil;

	d = malloc(sizeof(Dir)+rx.nstat);
	if(d == nil){
		free(freep);
		return nil;
	}
	n = convM2D(rx.stat, rx.nstat, d, (char*)&d[1]);
	free(freep);
	if(n != rx.nstat){
		free(d);
		werrstr("rx.nstat and convM2D disagree about dir length");
		return nil;
	}
	return d;
}

