#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; | |
} |