From b450cb7e32ac9233d6d9225600feaf8b4a84301d Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Mon, 15 Feb 2016 01:03:44 +0100 Subject: devmnt: deal with partial response for Tversion request in mntversion() --- sys/src/9/port/devmnt.c | 16 ++++++++-------- 1 file 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) -- cgit v1.2.3