Blob


1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include "libString.h"
6 enum
7 {
8 Minread= 256
9 };
11 /* Append up to 'len' input bytes to the string 'to'.
12 *
13 * Returns the number of characters read.
14 */
15 extern int
16 s_read(Biobuf *fp, String *to, int len)
17 {
18 int rv;
19 int n;
21 if(to->ref > 1)
22 sysfatal("can't s_read a shared string");
23 for(rv = 0; rv < len; rv += n){
24 n = to->end - to->ptr;
25 if(n < Minread){
26 s_grow(to, Minread);
27 n = to->end - to->ptr;
28 }
29 if(n > len - rv)
30 n = len - rv;
31 n = Bread(fp, to->ptr, n);
32 if(n <= 0)
33 break;
34 to->ptr += n;
35 }
36 s_terminate(to);
37 return rv;
38 }