Blame


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