~mdw
/
adns
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Sensible handling of empty reads.
[adns]
/
src
/
setup.c
diff --git
a/src/setup.c
b/src/setup.c
index
6ef2d12
..
ba80f14
100644
(file)
--- a/
src/setup.c
+++ b/
src/setup.c
@@
-4,7
+4,12
@@
* - management of global state
*/
/*
* - management of global state
*/
/*
- * This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+ * This file is
+ * Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ * It is part of adns, which is
+ * Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
+ * Copyright (C) 1999 Tony Finch <dot@dotat.at>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@
-456,7
+461,8
@@
static int init_begin(adns_state *ads_r, adns_initflags flags, FILE *diagfile) {
ads->iflags= flags;
ads->diagfile= diagfile;
ads->configerrno= 0;
ads->iflags= flags;
ads->diagfile= diagfile;
ads->configerrno= 0;
- LIST_INIT(ads->timew);
+ LIST_INIT(ads->udpw);
+ LIST_INIT(ads->tcpw);
LIST_INIT(ads->childw);
LIST_INIT(ads->output);
ads->forallnext= 0;
LIST_INIT(ads->childw);
LIST_INIT(ads->output);
ads->forallnext= 0;
@@
-464,6
+470,7
@@
static int init_begin(adns_state *ads_r, adns_initflags flags, FILE *diagfile) {
ads->udpsocket= ads->tcpsocket= -1;
adns__vbuf_init(&ads->tcpsend);
adns__vbuf_init(&ads->tcprecv);
ads->udpsocket= ads->tcpsocket= -1;
adns__vbuf_init(&ads->tcpsend);
adns__vbuf_init(&ads->tcprecv);
+ ads->tcprecv_skip= 0;
ads->nservers= ads->nsortlist= ads->nsearchlist= ads->tcpserver= 0;
ads->searchndots= 1;
ads->tcpstate= server_disconnected;
ads->nservers= ads->nsortlist= ads->nsearchlist= ads->tcpserver= 0;
ads->searchndots= 1;
ads->tcpstate= server_disconnected;
@@
-510,7
+517,7
@@
static void init_abort(adns_state ads) {
free(ads);
}
free(ads);
}
-int adns_init(adns_state *ads_r,
adns_initflags
flags, FILE *diagfile) {
+int adns_init(adns_state *ads_r,
int
flags, FILE *diagfile) {
adns_state ads;
const char *res_options, *adns_res_options;
int r;
adns_state ads;
const char *res_options, *adns_res_options;
int r;
@@
-550,7
+557,7
@@
int adns_init(adns_state *ads_r, adns_initflags flags, FILE *diagfile) {
return 0;
}
return 0;
}
-int adns_init_strcfg(adns_state *ads_r,
adns_initflags
flags,
+int adns_init_strcfg(adns_state *ads_r,
int
flags,
FILE *diagfile, const char *configtext) {
adns_state ads;
int r;
FILE *diagfile, const char *configtext) {
adns_state ads;
int r;
@@
-574,7
+581,8
@@
int adns_init_strcfg(adns_state *ads_r, adns_initflags flags,
void adns_finish(adns_state ads) {
adns__consistency(ads,0,cc_entex);
for (;;) {
void adns_finish(adns_state ads) {
adns__consistency(ads,0,cc_entex);
for (;;) {
- if (ads->timew.head) adns_cancel(ads->timew.head);
+ if (ads->udpw.head) adns_cancel(ads->udpw.head);
+ else if (ads->tcpw.head) adns_cancel(ads->tcpw.head);
else if (ads->childw.head) adns_cancel(ads->childw.head);
else if (ads->output.head) adns_cancel(ads->output.head);
else break;
else if (ads->childw.head) adns_cancel(ads->childw.head);
else if (ads->output.head) adns_cancel(ads->output.head);
else break;
@@
-589,7
+597,8
@@
void adns_finish(adns_state ads) {
void adns_forallqueries_begin(adns_state ads) {
adns__consistency(ads,0,cc_entex);
ads->forallnext=
void adns_forallqueries_begin(adns_state ads) {
adns__consistency(ads,0,cc_entex);
ads->forallnext=
- ads->timew.head ? ads->timew.head :
+ ads->udpw.head ? ads->udpw.head :
+ ads->tcpw.head ? ads->tcpw.head :
ads->childw.head ? ads->childw.head :
ads->output.head;
}
ads->childw.head ? ads->childw.head :
ads->output.head;
}
@@
-604,12
+613,15
@@
adns_query adns_forallqueries_next(adns_state ads, void **context_r) {
if (!qu) return 0;
if (qu->next) {
nqu= qu->next;
if (!qu) return 0;
if (qu->next) {
nqu= qu->next;
- } else if (qu == ads->timew.tail) {
- if (ads->childw.head) {
- nqu= ads->childw.head;
- } else {
- nqu= ads->output.head;
- }
+ } else if (qu == ads->udpw.tail) {
+ nqu=
+ ads->tcpw.head ? ads->tcpw.head :
+ ads->childw.head ? ads->childw.head :
+ ads->output.head;
+ } else if (qu == ads->tcpw.tail) {
+ nqu=
+ ads->childw.head ? ads->childw.head :
+ ads->output.head;
} else if (qu == ads->childw.tail) {
nqu= ads->output.head;
} else {
} else if (qu == ads->childw.tail) {
nqu= ads->output.head;
} else {
@@
-621,8
+633,3
@@
adns_query adns_forallqueries_next(adns_state ads, void **context_r) {
if (context_r) *context_r= qu->ctx.ext;
return qu;
}
if (context_r) *context_r= qu->ctx.ext;
return qu;
}
-
-void adns__checkqueues(adns_state ads) {
- adns_forallqueries_begin(ads);
- while (adns_forallqueries_next(ads,0));
-}