--scan-dump and --load options, for moving dump files around and
[sgt/agedu] / fgetline.c
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 }