Commit Diff


commit - 88a87fadae6629932d9c160f53ad5d79775f8f94
commit + 878b30c0bc1446ba933dc4539438512766183500
blob - ea94e9aa406e1798a7f760edd51b4386e499ca9c
blob + aaf843262640c26208373bcb2b1dffdc421002e4
--- src/lib9pclient/read.c
+++ src/lib9pclient/read.c
@@ -13,6 +13,7 @@ fspread(CFid *fid, void *buf, long n, vlong offset)
 	Fcall tx, rx;
 	void *freep;
 	uint msize;
+	long nr;
 
 	msize = fid->fs->msize - IOHDRSZ;
 	if(n > msize)
@@ -34,17 +35,21 @@ fspread(CFid *fid, void *buf, long n, vlong offset)
 		free(freep);
 		return -1;
 	}
-	if(rx.count){
-		memmove(buf, rx.data, rx.count);
+	nr = rx.count;
+	if(nr > n)
+		nr = n;
+
+	if(nr){
+		memmove(buf, rx.data, nr);
 		if(offset == -1){
 			qlock(&fid->lk);
-			fid->offset += rx.count;
+			fid->offset += nr;
 			qunlock(&fid->lk);
 		}
 	}
 	free(freep);
 
-	return rx.count;
+	return nr;
 }
 
 long