xref: /plan9/sys/src/cmd/aquarela/smbcomflush.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1*8ccd4a63SDavid du Colombier #include "headers.h"
2*8ccd4a63SDavid du Colombier #include <String.h>
3*8ccd4a63SDavid du Colombier 
4*8ccd4a63SDavid du Colombier SmbProcessResult
smbcomflush(SmbSession * s,SmbHeader * h,uchar * pdata,SmbBuffer *)5*8ccd4a63SDavid du Colombier smbcomflush(SmbSession *s, SmbHeader *h, uchar *pdata, SmbBuffer *)
6*8ccd4a63SDavid du Colombier {
7*8ccd4a63SDavid du Colombier 	SmbTree *t;
8*8ccd4a63SDavid du Colombier 	SmbFile *f;
9*8ccd4a63SDavid du Colombier 	ushort fid;
10*8ccd4a63SDavid du Colombier 	Dir nulldir;
11*8ccd4a63SDavid du Colombier 	if (h->wordcount != 1)
12*8ccd4a63SDavid du Colombier 		return SmbProcessResultFormat;
13*8ccd4a63SDavid du Colombier 	fid = smbnhgets(pdata);
14*8ccd4a63SDavid du Colombier 	t = smbidmapfind(s->tidmap, h->tid);
15*8ccd4a63SDavid du Colombier 	if (t == nil) {
16*8ccd4a63SDavid du Colombier 		smbseterror(s, ERRSRV, ERRinvtid);
17*8ccd4a63SDavid du Colombier 		return SmbProcessResultError;
18*8ccd4a63SDavid du Colombier 	}
19*8ccd4a63SDavid du Colombier 	f = smbidmapfind(s->fidmap, fid);
20*8ccd4a63SDavid du Colombier 	if (f == nil) {
21*8ccd4a63SDavid du Colombier 		smbseterror(s, ERRDOS, ERRbadfid);
22*8ccd4a63SDavid du Colombier 		return SmbProcessResultError;
23*8ccd4a63SDavid du Colombier 	}
24*8ccd4a63SDavid du Colombier 	memset(&nulldir, 0xff, sizeof(nulldir));
25*8ccd4a63SDavid du Colombier 	nulldir.name = nulldir.uid = nulldir.gid = nulldir.muid = nil;
26*8ccd4a63SDavid du Colombier 	dirfwstat(f->fd, &nulldir);
27*8ccd4a63SDavid du Colombier 	return smbbufferputack(s->response, h, &s->peerinfo);
28*8ccd4a63SDavid du Colombier }
29