tlib9: add write function that withstands interrupts - plan9port - [fork] Plan … | |
git clone git://src.adamsgaard.dk/plan9port | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit cab935a0ba34797d8b75fe1cfb7624a33d25e671 | |
parent fc9fc9c83154ff0fa5a56854ee1f023c78f66fd8 | |
Author: Russ Cox <[email protected]> | |
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(-) | |
--- | |
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*); | |
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\ | |
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; | |
+} |