URI: 
       tlib9: add write function that withstands interrupts - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit cab935a0ba34797d8b75fe1cfb7624a33d25e671
   DIR parent fc9fc9c83154ff0fa5a56854ee1f023c78f66fd8
  HTML Author: Russ Cox <rsc@swtch.com>
       Date:   Fri,  4 Jul 2008 12:38:26 -0400
       
       lib9: add write function that withstands interrupts
       
       Diffstat:
         M include/libc.h                      |       2 ++
         M src/lib9/mkfile                     |       1 +
         A src/lib9/write.c                    |      23 +++++++++++++++++++++++
       
       3 files changed, 26 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/include/libc.h b/include/libc.h
       t@@ -793,6 +793,7 @@ extern        int        p9waitpid(void);
        extern        long        write(int, void*, long);
        extern        long        writev(int, IOchunk*, int);
        */
       +extern        long        p9write(int, void*, long);
        /* extern        int        wstat(char*, uchar*, int); give up */
        extern        ulong        rendezvous(ulong, ulong);
        
       t@@ -813,6 +814,7 @@ extern        ulong        rendezvous(ulong, ulong);
        #define open                p9open
        #define pipe                p9pipe
        #define        waitfor                p9waitfor
       +#define write                p9write
        #endif
        
        extern        Dir*        dirstat(char*);
   DIR diff --git a/src/lib9/mkfile b/src/lib9/mkfile
       t@@ -157,6 +157,7 @@ LIB9OFILES=\
                unsharp.$O\
                wait.$O\
                waitpid.$O\
       +        write.$O\
        
        OFILES=\
                $LIB9OFILES\
   DIR diff --git a/src/lib9/write.c b/src/lib9/write.c
       t@@ -0,0 +1,23 @@
       +#include <u.h>
       +#define NOPLAN9DEFINES
       +#include <libc.h>
       +
       +long
       +p9write(int f, void *av, long n)
       +{
       +        char *a;
       +        long m, t;
       +
       +        a = av;
       +        t = 0;
       +        while(t < n){
       +                m = write(f, a+t, n-t);
       +                if(m <= 0){
       +                        if(t == 0)
       +                                return m;
       +                        break;
       +                }
       +                t += m;
       +        }
       +        return t;
       +}