diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-02-15 01:03:44 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-02-15 01:03:44 +0100 |
commit | b450cb7e32ac9233d6d9225600feaf8b4a84301d (patch) | |
tree | 6508901bd0df7df1e897b2e7b21899fdfa6f010e | |
parent | 61dea9012e71b53b102e00a520ee0e8163b406d3 (diff) | |
download | plan9front-b450cb7e32ac9233d6d9225600feaf8b4a84301d.tar.xz |
devmnt: deal with partial response for Tversion request in mntversion()
-rw-r--r-- | sys/src/9/port/devmnt.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/sys/src/9/port/devmnt.c b/sys/src/9/port/devmnt.c index ba14771eb..cd363319b 100644 --- a/sys/src/9/port/devmnt.c +++ b/sys/src/9/port/devmnt.c @@ -164,7 +164,6 @@ mntversion(Chan *c, char *version, int msize, int returnlen) unlock(c); l = devtab[c->type]->write(c, msg, k, oo); - if(l < k){ lock(c); c->offset -= k - l; @@ -173,13 +172,14 @@ mntversion(Chan *c, char *version, int msize, int returnlen) } /* message sent; receive and decode reply */ - k = devtab[c->type]->read(c, msg, 8192+IOHDRSZ, c->offset); - if(k <= 0) - error("EOF receiving fversion reply"); - - lock(c); - c->offset += k; - unlock(c); + for(k = 0; k < BIT32SZ || (k < GBIT32(msg) && k < 8192+IOHDRSZ); k += l){ + l = devtab[c->type]->read(c, msg+k, 8192+IOHDRSZ-k, c->offset); + if(l <= 0) + error("EOF receiving fversion reply"); + lock(c); + c->offset += l; + unlock(c); + } l = convM2S(msg, k, &f); if(l != k) |