Blob
1 #include <u.h>2 #include <libc.h>3 #include <fcall.h>5 int6 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 }