Blob
1 #include <u.h>2 #include <libc.h>3 #include <bio.h>4 #include "libString.h"6 enum7 {8 Minread= 2569 };11 /* Append up to 'len' input bytes to the string 'to'.12 *13 * Returns the number of characters read.14 */15 extern int16 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 }