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