| #include <u.h> | 
 | #include <libc.h> | 
 | #include <bio.h> | 
 | #include "libString.h" | 
 |  | 
 | /* Append an input line to a String. | 
 |  * | 
 |  * Returns a pointer to the character string (or 0). | 
 |  * Trailing newline is left on. | 
 |  */  | 
 | extern char * | 
 | s_read_line(Biobuf *fp, String *to) | 
 | { | 
 | 	char *cp; | 
 | 	int llen; | 
 |  | 
 | 	if(to->ref > 1) | 
 | 		sysfatal("can't s_read_line a shared string"); | 
 | 	s_terminate(to); | 
 | 	cp = Brdline(fp, '\n'); | 
 | 	if(cp == 0) | 
 | 		return 0; | 
 | 	llen = Blinelen(fp); | 
 | 	if(to->end - to->ptr < llen) | 
 | 		s_grow(to, llen); | 
 | 	memmove(to->ptr, cp, llen); | 
 | 	cp = to->ptr; | 
 | 	to->ptr += llen; | 
 | 	s_terminate(to); | 
 | 	return cp; | 
 | } |