read9pmsg.c - 9base - revived minimalist port of Plan 9 userland to Unix | |
git clone git://git.suckless.org/9base | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
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 } |