read9pmsg.c (462B)
1 #include <u.h> 2 #include <libc.h> 3 #include <fcall.h> 4 5 int 6 read9pmsg(int fd, void *abuf, uint n) 7 { 8 int m, len; 9 uchar *buf; 10 11 buf = abuf; 12 13 /* read count */ 14 m = readn(fd, buf, BIT32SZ); 15 if(m != BIT32SZ){ 16 if(m < 0) 17 return -1; 18 return 0; 19 } 20 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 }