xref: /plan9/sys/src/cmd/aquarela/smbdircache.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1*8ccd4a63SDavid du Colombier #include "headers.h"
2*8ccd4a63SDavid du Colombier 
3*8ccd4a63SDavid du Colombier SmbDirCache *
smbmkdircache(SmbTree * t,char * path)4*8ccd4a63SDavid du Colombier smbmkdircache(SmbTree *t, char *path)
5*8ccd4a63SDavid du Colombier {
6*8ccd4a63SDavid du Colombier 	long n;
7*8ccd4a63SDavid du Colombier 	SmbDirCache *c;
8*8ccd4a63SDavid du Colombier 	Dir *buf;
9*8ccd4a63SDavid du Colombier 	int fd;
10*8ccd4a63SDavid du Colombier 	char *fullpath = nil;
11*8ccd4a63SDavid du Colombier 
12*8ccd4a63SDavid du Colombier 	smbstringprint(&fullpath, "%s%s", t->serv->path, path);
13*8ccd4a63SDavid du Colombier //smblogprintif(1, "smbmkdircache: path %s\n", fullpath);
14*8ccd4a63SDavid du Colombier 	fd = open(fullpath, OREAD);
15*8ccd4a63SDavid du Colombier 	free(fullpath);
16*8ccd4a63SDavid du Colombier 
17*8ccd4a63SDavid du Colombier 	if (fd < 0)
18*8ccd4a63SDavid du Colombier 		return nil;
19*8ccd4a63SDavid du Colombier 	n = dirreadall(fd, &buf);
20*8ccd4a63SDavid du Colombier 	close(fd);
21*8ccd4a63SDavid du Colombier 	if (n < 0) {
22*8ccd4a63SDavid du Colombier 		free(buf);
23*8ccd4a63SDavid du Colombier 		return nil;
24*8ccd4a63SDavid du Colombier 	}
25*8ccd4a63SDavid du Colombier 	c = smbemalloc(sizeof(SmbDirCache));
26*8ccd4a63SDavid du Colombier 	c->buf = buf;
27*8ccd4a63SDavid du Colombier 	c->n = n;
28*8ccd4a63SDavid du Colombier 	c->i = 0;
29*8ccd4a63SDavid du Colombier 	return c;
30*8ccd4a63SDavid du Colombier }
31*8ccd4a63SDavid du Colombier 
32*8ccd4a63SDavid du Colombier void
smbdircachefree(SmbDirCache ** cp)33*8ccd4a63SDavid du Colombier smbdircachefree(SmbDirCache **cp)
34*8ccd4a63SDavid du Colombier {
35*8ccd4a63SDavid du Colombier 	SmbDirCache *c;
36*8ccd4a63SDavid du Colombier 	c = *cp;
37*8ccd4a63SDavid du Colombier 	if (c) {
38*8ccd4a63SDavid du Colombier 		free(c->buf);
39*8ccd4a63SDavid du Colombier 		free(c);
40*8ccd4a63SDavid du Colombier 		*cp = nil;
41*8ccd4a63SDavid du Colombier 	}
42*8ccd4a63SDavid du Colombier }
43*8ccd4a63SDavid du Colombier 
44