tThreadplumbrecv. - 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 c3a72d77dc9e59e2498d68692feb098bf565e119
 (DIR) parent e04d5bee6949d103a588659ee155f13f755cc2e2
 (HTM) Author: rsc <devnull@localhost>
       Date:   Sun, 29 Feb 2004 23:11:52 +0000
       
       Threadplumbrecv.
       
       Diffstat:
         A src/libplumb/thread.c               |      33 +++++++++++++++++++++++++++++++
       
       1 file changed, 33 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/src/libplumb/thread.c b/src/libplumb/thread.c
       t@@ -0,0 +1,33 @@
       +#include <u.h>
       +#include <libc.h>
       +#include <thread.h>
       +#include <fcall.h>
       +#include <fs.h>
       +#include "plumb.h"
       +
       +Plumbmsg*
       +threadplumbrecv(int fd)
       +{
       +        char *buf;
       +        Plumbmsg *m;
       +        int n, more;
       +
       +        buf = malloc(8192);
       +        if(buf == nil)
       +                return nil;
       +        n = threadread(fd, buf, 8192);
       +        m = nil;
       +        if(n > 0){
       +                m = plumbunpackpartial(buf, n, &more);
       +                if(m==nil && more>0){
       +                        /* we now know how many more bytes to read for complete message */
       +                        buf = realloc(buf, n+more);
       +                        if(buf == nil)
       +                                return nil;
       +                        if(threadreadn(fd, buf+n, more) == more)
       +                                m = plumbunpackpartial(buf, n+more, nil);
       +                }
       +        }
       +        free(buf);
       +        return m;
       +}