diff options
Diffstat (limited to 'lib/tests/t_api.c')
| -rw-r--r-- | lib/tests/t_api.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/tests/t_api.c b/lib/tests/t_api.c index 40113751..26406315 100644 --- a/lib/tests/t_api.c +++ b/lib/tests/t_api.c @@ -514,12 +514,12 @@ t_fgetbs(FILE *fp) { int c; size_t n; size_t size; - char *buf; + char *buf, *old; char *p; - n = 0; - size = T_BUFSIZ; - buf = (char *) malloc(T_BUFSIZ * sizeof(char)); + n = 0; + size = T_BUFSIZ; + old = buf = (char *) malloc(T_BUFSIZ * sizeof(char)); if (buf != NULL) { p = buf; @@ -535,7 +535,8 @@ t_fgetbs(FILE *fp) { buf = (char *)realloc(buf, size * sizeof(char)); if (buf == NULL) - break; + goto err; + old = buf; p = buf + n; } } @@ -546,7 +547,10 @@ t_fgetbs(FILE *fp) { } return (buf); } else { - fprintf(stderr, "malloc failed %d", errno); + err: + if (old != NULL) + free(old); + fprintf(stderr, "malloc/realloc failed %d", errno); return(NULL); } } |
