xref: /plan9/sys/src/libc/port/readn.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1*219b2ee8SDavid du Colombier #include <u.h>
2*219b2ee8SDavid du Colombier #include <libc.h>
3*219b2ee8SDavid du Colombier 
4*219b2ee8SDavid du Colombier long
readn(int f,void * av,long n)5*219b2ee8SDavid du Colombier readn(int f, void *av, long n)
6*219b2ee8SDavid du Colombier {
7*219b2ee8SDavid du Colombier 	char *a;
8*219b2ee8SDavid du Colombier 	long m, t;
9*219b2ee8SDavid du Colombier 
10*219b2ee8SDavid du Colombier 	a = av;
11*219b2ee8SDavid du Colombier 	t = 0;
12*219b2ee8SDavid du Colombier 	while(t < n){
13*219b2ee8SDavid du Colombier 		m = read(f, a+t, n-t);
14*219b2ee8SDavid du Colombier 		if(m <= 0){
15*219b2ee8SDavid du Colombier 			if(t == 0)
16*219b2ee8SDavid du Colombier 				return m;
17*219b2ee8SDavid du Colombier 			break;
18*219b2ee8SDavid du Colombier 		}
19*219b2ee8SDavid du Colombier 		t += m;
20*219b2ee8SDavid du Colombier 	}
21*219b2ee8SDavid du Colombier 	return t;
22*219b2ee8SDavid du Colombier }
23