12345678910111213141516171819202122232425262728293031 |
- #include <u.h>
- #include <libc.h>
- #include <fcall.h>
- int
- read9pmsg(int fd, void *abuf, uint n)
- {
- int m, len;
- uchar *buf;
- buf = abuf;
- /* read count */
- m = readn(fd, buf, BIT32SZ);
- if(m != BIT32SZ){
- if(m < 0)
- return -1;
- return 0;
- }
- len = GBIT32(buf);
- if(len <= BIT32SZ || len > n){
- werrstr("bad length in 9P2000 message header");
- return -1;
- }
- len -= BIT32SZ;
- m = readn(fd, buf+BIT32SZ, len);
- if(m < len)
- return 0;
- return BIT32SZ+m;
- }
|