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