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