tThreaded read9pmsg. - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit b4705757e57c6f5e21715e8a1e9513af09c37775
 (DIR) parent 2517c38a8c265bf80a3befbb9bb18863ba453504
 (HTM) Author: rsc <devnull@localhost>
       Date:   Sun, 29 Feb 2004 22:54:49 +0000
       
       Threaded read9pmsg.
       
       Diffstat:
         A src/libthread/read9pmsg.c           |      32 +++++++++++++++++++++++++++++++
       
       1 file changed, 32 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/src/libthread/read9pmsg.c b/src/libthread/read9pmsg.c
       t@@ -0,0 +1,32 @@
       +#include <u.h>
       +#include <libc.h>
       +#include <fcall.h>
       +#include <thread.h>
       +
       +int
       +threadread9pmsg(int fd, void *abuf, uint n)
       +{
       +        int m, len;
       +        uchar *buf;
       +
       +        buf = abuf;
       +
       +        /* read count */
       +        m = threadreadn(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 = threadreadn(fd, buf+BIT32SZ, len);
       +        if(m < len)
       +                return 0;
       +        return BIT32SZ+m;
       +}