From 535dbc6de645765adea8bd7092daf92a06f6057a Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sat, 12 Jan 2013 12:18:31 +0000 Subject: Preserve errno when returning error Reported-By: Russ Allbery --- lib/dynstr.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/dynstr.c b/lib/dynstr.c index 44c4b56..9c91b90 100644 --- a/lib/dynstr.c +++ b/lib/dynstr.c @@ -384,7 +384,9 @@ static Dynstr *read_helper(size_t (*callback)(FILE *f, int fd, unsigned char *bu n = callback(f, fd, dynstr->mem, size); if (n == DYNSTR_ERROR) { + int saved = errno; dynstr_free(dynstr); + errno = saved; return NULL; } @@ -449,6 +451,7 @@ static Dynstr *readline_helper(int (*callback)(FILE *, int), FILE *f, int fd) int c; unsigned char buf[1024]; size_t buflen; + int saved; line = dynstr_new_empty(); buflen = 0; @@ -496,9 +499,11 @@ static Dynstr *readline_helper(int (*callback)(FILE *, int), FILE *f, int fd) return line; error: + saved = errno; dynstr_free(line); dynstr_free(temp1); dynstr_free(temp2); + errno = saved; return NULL; } -- cgit v1.2.1