diff options
author | Russ Cox <rsc@swtch.com> | 2008-07-04 02:46:05 -0400 |
---|---|---|
committer | Russ Cox <rsc@swtch.com> | 2008-07-04 02:46:05 -0400 |
commit | 382ae73f24c4566b2948d72f65ff68dc35857556 (patch) | |
tree | 749b031ddc640bd624e78884abf946a3acf8005c /src/lib9pclient/dirread.c | |
parent | ac5a97e6b3b136c1ab669ae19a813a81cce673eb (diff) | |
download | plan9port-382ae73f24c4566b2948d72f65ff68dc35857556.tar.gz plan9port-382ae73f24c4566b2948d72f65ff68dc35857556.tar.bz2 plan9port-382ae73f24c4566b2948d72f65ff68dc35857556.zip |
lib9pclient: add support for 9P2000.u
Diffstat (limited to 'src/lib9pclient/dirread.c')
-rw-r--r-- | src/lib9pclient/dirread.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/lib9pclient/dirread.c b/src/lib9pclient/dirread.c index 2d111917..c2b13882 100644 --- a/src/lib9pclient/dirread.c +++ b/src/lib9pclient/dirread.c @@ -4,9 +4,10 @@ #include <libc.h> #include <fcall.h> #include <9pclient.h> +#include "fsimpl.h" static long -dirpackage(uchar *buf, long ts, Dir **d) +dirpackage(uchar *buf, long ts, Dir **d, int dotu) { char *s; long ss, i, n, nn, m; @@ -22,7 +23,7 @@ dirpackage(uchar *buf, long ts, Dir **d) n = 0; for(i = 0; i < ts; i += m){ m = BIT16SZ + GBIT16(&buf[i]); - if(statcheck(&buf[i], m) < 0) + if(statchecku(&buf[i], m, dotu) < 0) break; ss += m; n++; @@ -42,7 +43,7 @@ dirpackage(uchar *buf, long ts, Dir **d) nn = 0; for(i = 0; i < ts; i += m){ m = BIT16SZ + GBIT16((uchar*)&buf[i]); - if(nn >= n || convM2D(&buf[i], m, *d + nn, s) != m){ + if(nn >= n || convM2Du(&buf[i], m, *d + nn, s, dotu) != m){ free(*d); *d = nil; return -1; @@ -65,7 +66,7 @@ fsdirread(CFid *fid, Dir **d) return -1; ts = fsread(fid, buf, DIRMAX); if(ts >= 0) - ts = dirpackage(buf, ts, d); + ts = dirpackage(buf, ts, d, fid->fs->dotu); free(buf); return ts; } @@ -91,9 +92,9 @@ fsdirreadall(CFid *fid, Dir **d) ts += n; } if(ts >= 0){ - ts = dirpackage(buf, ts, d); + ts = dirpackage(buf, ts, d, fid->fs->dotu); if(ts < 0) - werrstr("malformed directory contents"); + werrstr("malformed directory contents [dotu=%d]", fid->fs->dotu); } free(buf); if(ts == 0 && n < 0) |