ref: 4a7c44fee45b9ba2e2e9ee09071d5ada7c41176d
dir: /sys/src/libc/9sys/read9pmsg.c/
#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; }