84849cbd |
1 | /* |
2 | * fgetline.c: implementation of fgetline.h. |
3 | */ |
4 | |
5 | #include <stdio.h> |
6 | #include <string.h> |
7 | |
8 | #include "malloc.h" |
9 | #include "fgetline.h" |
10 | |
11 | char *fgetline(FILE *fp) |
12 | { |
13 | char *ret = snewn(512, char); |
14 | int size = 512, len = 0; |
15 | while (fgets(ret + len, size - len, fp)) { |
16 | len += strlen(ret + len); |
17 | if (ret[len-1] == '\n') |
18 | break; /* got a newline, we're done */ |
19 | size = len + 512; |
20 | ret = sresize(ret, size, char); |
21 | } |
22 | if (len == 0) { /* first fgets returned NULL */ |
23 | sfree(ret); |
24 | return NULL; |
25 | } |
26 | ret[len] = '\0'; |
27 | return ret; |
28 | } |