xref: /plan9-contrib/sys/src/libc/9sys/dirread.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1 #include <u.h>
2 #include <libc.h>
3 #include <auth.h>
4 #include <fcall.h>
5 
6 long
7 dirread(int f, Dir *dbuf, long count)
8 {
9 	char buf[DIRLEN*50];
10 	int c, n, i, r;
11 
12 	n = 0;
13 	count = (count/sizeof(Dir)) * DIRLEN;
14 	while(n < count) {
15 		c = count - n;
16 		if(c > sizeof(buf))
17 			c = sizeof(buf);
18 		r = read(f, buf, c);
19 		if(r == 0)
20 			break;
21 		if(r < 0 || r % DIRLEN)
22 			return -1;
23 		for(i=0; i<r; i+=DIRLEN) {
24 			convM2D(buf+i, dbuf);
25 			dbuf++;
26 		}
27 		n += r;
28 		if(r != c)
29 			break;
30 	}
31 	return (n/DIRLEN) * sizeof(Dir);
32 }
33