lib9: add write function that withstands interrupts
This commit is contained in:
parent
fc9fc9c831
commit
cab935a0ba
3 changed files with 26 additions and 0 deletions
|
|
@ -793,6 +793,7 @@ extern int p9waitpid(void);
|
||||||
extern long write(int, void*, long);
|
extern long write(int, void*, long);
|
||||||
extern long writev(int, IOchunk*, int);
|
extern long writev(int, IOchunk*, int);
|
||||||
*/
|
*/
|
||||||
|
extern long p9write(int, void*, long);
|
||||||
/* extern int wstat(char*, uchar*, int); give up */
|
/* extern int wstat(char*, uchar*, int); give up */
|
||||||
extern ulong rendezvous(ulong, ulong);
|
extern ulong rendezvous(ulong, ulong);
|
||||||
|
|
||||||
|
|
@ -813,6 +814,7 @@ extern ulong rendezvous(ulong, ulong);
|
||||||
#define open p9open
|
#define open p9open
|
||||||
#define pipe p9pipe
|
#define pipe p9pipe
|
||||||
#define waitfor p9waitfor
|
#define waitfor p9waitfor
|
||||||
|
#define write p9write
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern Dir* dirstat(char*);
|
extern Dir* dirstat(char*);
|
||||||
|
|
|
||||||
|
|
@ -157,6 +157,7 @@ LIB9OFILES=\
|
||||||
unsharp.$O\
|
unsharp.$O\
|
||||||
wait.$O\
|
wait.$O\
|
||||||
waitpid.$O\
|
waitpid.$O\
|
||||||
|
write.$O\
|
||||||
|
|
||||||
OFILES=\
|
OFILES=\
|
||||||
$LIB9OFILES\
|
$LIB9OFILES\
|
||||||
|
|
|
||||||
23
src/lib9/write.c
Normal file
23
src/lib9/write.c
Normal file
|
|
@ -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;
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue