|  | #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; | 
|  | } |