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