diff options
author | Lennart Poettering <lennart@poettering.net> | 2008-07-27 23:22:37 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2008-07-27 23:22:37 +0200 |
commit | 13306880bdb3e8910c2a7b71391eacadc10b0116 (patch) | |
tree | f30ea2cd791b21cc920b483393b94da3aa01c328 /libasyncns/asyncns.c | |
parent | 82bc2476ef8bd1f2cbc172729e9704469e27222a (diff) |
save and restore errno where applicable
Diffstat (limited to 'libasyncns/asyncns.c')
-rw-r--r-- | libasyncns/asyncns.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/libasyncns/asyncns.c b/libasyncns/asyncns.c index 458b093..f8c5f46 100644 --- a/libasyncns/asyncns.c +++ b/libasyncns/asyncns.c @@ -1399,6 +1399,8 @@ int asyncns_getnqueries(asyncns_t *asyncns) { void asyncns_cancel(asyncns_t *asyncns, asyncns_query_t* q) { int i; + int saved_errno = errno; + assert(asyncns); assert(q); assert(q->asyncns == asyncns); @@ -1417,7 +1419,6 @@ void asyncns_cancel(asyncns_t *asyncns, asyncns_query_t* q) { asyncns->done_tail = q->done_prev; } - i = q->id % MAX_QUERIES; assert(asyncns->queries[i] == q); asyncns->queries[i] = NULL; @@ -1428,11 +1429,12 @@ void asyncns_cancel(asyncns_t *asyncns, asyncns_query_t* q) { asyncns->n_queries--; free(q); + + errno = saved_errno; } void asyncns_freeaddrinfo(struct addrinfo *ai) { - if (!ai) - return; + int saved_errno = errno; while (ai) { struct addrinfo *next = ai->ai_next; @@ -1443,6 +1445,19 @@ void asyncns_freeaddrinfo(struct addrinfo *ai) { ai = next; } + + errno = saved_errno; +} + +void asyncns_freeanswer(unsigned char *answer) { + int saved_errno = errno; + + if (!answer) + return; + + free(answer); + + errno = saved_errno; } int asyncns_isdone(asyncns_t *asyncns, asyncns_query_t*q) { @@ -1468,9 +1483,3 @@ void* asyncns_getuserdata(asyncns_t *asyncns, asyncns_query_t *q) { return q->userdata; } - -void asyncns_freeanswer(unsigned char *answer) { - assert(answer); - - free(answer); -} |