Blame


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