summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2008-07-27 23:22:37 +0200
committerLennart Poettering <lennart@poettering.net>2008-07-27 23:22:37 +0200
commit13306880bdb3e8910c2a7b71391eacadc10b0116 (patch)
treef30ea2cd791b21cc920b483393b94da3aa01c328
parent82bc2476ef8bd1f2cbc172729e9704469e27222a (diff)
save and restore errno where applicable
-rw-r--r--libasyncns/asyncns.c27
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);
-}