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