Commit Diff


commit - fc9fc9c83154ff0fa5a56854ee1f023c78f66fd8
commit + cab935a0ba34797d8b75fe1cfb7624a33d25e671
blob - 7611dde14457bcd9631aea8456d76252e595b85b
blob + aa23d30645619afa3312e1e604b363e88467ec85
--- include/libc.h
+++ include/libc.h
@@ -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);
 
@@ -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*);
blob - ca615435012dae92e388b6597dfa0f7afbdf3385
blob + 782dd274169a6e375b368e9cee31b2c77929cef6
--- src/lib9/mkfile
+++ src/lib9/mkfile
@@ -157,6 +157,7 @@ LIB9OFILES=\
 	unsharp.$O\
 	wait.$O\
 	waitpid.$O\
+	write.$O\
 
 OFILES=\
 	$LIB9OFILES\
blob - /dev/null
blob + aa32db7f14232733d4b893f4ac4489dc7b048721 (mode 644)
--- /dev/null
+++ src/lib9/write.c
@@ -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;
+}