Blob


1 #include <u.h>
2 #include <libc.h>
3 #include <fcall.h>
5 int
6 read9pmsg(int fd, void *abuf, uint n)
7 {
8 int m, len;
9 uchar *buf;
11 buf = abuf;
13 /* read count */
14 m = readn(fd, buf, BIT32SZ);
15 if(m != BIT32SZ){
16 if(m < 0)
17 return -1;
18 return 0;
19 }
21 len = GBIT32(buf);
22 if(len <= BIT32SZ || len > n){
23 werrstr("bad length in 9P2000 message header");
24 return -1;
25 }
26 len -= BIT32SZ;
27 m = readn(fd, buf+BIT32SZ, len);
28 if(m < len)
29 return 0;
30 return BIT32SZ+m;
31 }