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