s_read_line.c (578B)
1 #include <u.h> 2 #include <libc.h> 3 #include <bio.h> 4 #include "libString.h" 5 6 /* Append an input line to a String. 7 * 8 * Returns a pointer to the character string (or 0). 9 * Trailing newline is left on. 10 */ 11 extern char * 12 s_read_line(Biobuf *fp, String *to) 13 { 14 char *cp; 15 int llen; 16 17 if(to->ref > 1) 18 sysfatal("can't s_read_line a shared string"); 19 s_terminate(to); 20 cp = Brdline(fp, '\n'); 21 if(cp == 0) 22 return 0; 23 llen = Blinelen(fp); 24 if(to->end - to->ptr < llen) 25 s_grow(to, llen); 26 memmove(to->ptr, cp, llen); 27 cp = to->ptr; 28 to->ptr += llen; 29 s_terminate(to); 30 return cp; 31 }