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