xref: /inferno-os/lib9/readn.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth #include "lib9.h"
2*37da2899SCharles.Forsyth 
3*37da2899SCharles.Forsyth long
readn(int f,void * av,long n)4*37da2899SCharles.Forsyth readn(int f, void *av, long n)
5*37da2899SCharles.Forsyth {
6*37da2899SCharles.Forsyth 	char *a;
7*37da2899SCharles.Forsyth 	long m, t;
8*37da2899SCharles.Forsyth 
9*37da2899SCharles.Forsyth 	a = av;
10*37da2899SCharles.Forsyth 	t = 0;
11*37da2899SCharles.Forsyth 	while(t < n){
12*37da2899SCharles.Forsyth 		m = read(f, a+t, n-t);
13*37da2899SCharles.Forsyth 		if(m <= 0){
14*37da2899SCharles.Forsyth 			if(t == 0)
15*37da2899SCharles.Forsyth 				return m;
16*37da2899SCharles.Forsyth 			break;
17*37da2899SCharles.Forsyth 		}
18*37da2899SCharles.Forsyth 		t += m;
19*37da2899SCharles.Forsyth 	}
20*37da2899SCharles.Forsyth 	return t;
21*37da2899SCharles.Forsyth }
22