]>
diplodocus.org Git - nmh/blob - sbr/vfgets.c
3 * vfgets.c -- virtual fgets
14 vfgets (FILE *in
, char **bp
)
17 char *cp
, *dp
, *ep
, *fp
;
19 static char *pp
= NULL
;
22 if (!(pp
= malloc ((size_t) (len
= BUFSIZ
))))
23 adios (NULL
, "unable to allocate string storage");
25 for (ep
= (cp
= pp
) + len
- 1;;) {
26 if (fgets (cp
, ep
- cp
+ 1, in
) == NULL
) {
31 return (ferror (in
) && !feof (in
) ? -1 : 1);
34 if ((dp
= cp
+ strlen (cp
) - 2) < cp
|| *dp
!= QUOTE
) {
37 adios (NULL
, "vfgets() botch -- you lose big");
45 for (fp
= dp
- 1, toggle
= 0; fp
>= cp
; fp
--) {
65 if (!(dp
= realloc (pp
, (size_t) (len
+= BUFSIZ
)))) {
66 adios (NULL
, "unable to allocate string storage");
69 ep
= (pp
= dp
) + len
- 1;