chiark
/
gitweb
/
~ian
/
chiark-tcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
cdb: Replace ad-hocery with use of offsetof/typeof. Closes:#812718.
[chiark-tcl.git]
/
adns
/
adns.c
diff --git
a/adns/adns.c
b/adns/adns.c
index 2a86f4aca2db743b928efb35778dc2467e90f56a..7dde69cfc2782b1ff039160c1e827ef49f130bd6 100644
(file)
--- a/
adns/adns.c
+++ b/
adns/adns.c
@@
-60,7
+60,7
@@
/*
* adns.c - adns binding for Tcl
/*
* adns.c - adns binding for Tcl
- * Copyright 2006 Ian Jackson
+ * Copyright 2006
-2012
Ian Jackson
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@
-73,9
+73,7
@@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301, USA.
+ * along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
#define _GNU_SOURCE
*/
#define _GNU_SOURCE
@@
-198,6
+196,14
@@
struct Resolver {
Tcl_Obj *errstring_accum;
};
Tcl_Obj *errstring_accum;
};
+struct Query {
+ int ix; /* first! */
+ Resolver *res;
+ adns_query aqu;
+ ScriptToInvoke on_yes, on_no, on_fail;
+ Tcl_Obj *xargs;
+};
+
/* The default resolver is recorded using Tcl_SetAssocData with key
* ASSOC_DEFAULTRES to record the Resolver*. If it was explicitly
* created with `adns new-resolver' then ix will be >=0, and the
/* The default resolver is recorded using Tcl_SetAssocData with key
* ASSOC_DEFAULTRES to record the Resolver*. If it was explicitly
* created with `adns new-resolver' then ix will be >=0, and the
@@
-284,6
+290,7
@@
static Resolver *default_resolver(Tcl_Interp *ip) {
static void destroy_resolver(Tcl_Interp *ip, Resolver *res) {
void *query_v;
static void destroy_resolver(Tcl_Interp *ip, Resolver *res) {
void *query_v;
+ Query *query;
int logstring_len;
char *rstr;
adns_query aqu;
int logstring_len;
char *rstr;
adns_query aqu;
@@
-305,8
+312,9
@@
static void destroy_resolver(Tcl_Interp *ip, Resolver *res) {
adns_forallqueries_begin(res->ads);
aqu= adns_forallqueries_next(res->ads, &query_v);
if (!aqu) break;
adns_forallqueries_begin(res->ads);
aqu= adns_forallqueries_next(res->ads, &query_v);
if (!aqu) break;
- assert(query_v->aqu == aqu);
- query_v->aqu= 0; /* avoid disrupting the adns query list */
+ query= query_v;
+ assert(query->aqu == aqu);
+ query->aqu= 0; /* avoid disrupting the adns query list */
asynch_query_dispose(ip, query_v);
}
adns_finish(res->ads);
asynch_query_dispose(ip, query_v);
}
adns_finish(res->ads);
@@
-524,6
+532,7
@@
static void make_resultstatus(Tcl_Interp *ip, adns_status status,
results[1]= cht_ret_int(ip, status);
results[2]= cht_ret_string(ip, adns_errabbrev(status));
results[3]= cht_ret_string(ip, adns_strerror(status));
results[1]= cht_ret_int(ip, status);
results[2]= cht_ret_string(ip, adns_errabbrev(status));
results[3]= cht_ret_string(ip, adns_strerror(status));
+ assert(RESULTSTATUS_LLEN==4);
}
static Tcl_Obj *make_resultrdata(Tcl_Interp *ip, adns_answer *answer) {
}
static Tcl_Obj *make_resultrdata(Tcl_Interp *ip, adns_answer *answer) {
@@
-554,6
+563,7
@@
static void make_resultlist(Tcl_Interp *ip, adns_answer *answer,
results[4]= cht_ret_string(ip, answer->owner);
results[5]= cht_ret_string(ip, answer->cname ? answer->cname : "");
results[6]= make_resultrdata(ip, answer);
results[4]= cht_ret_string(ip, answer->owner);
results[5]= cht_ret_string(ip, answer->cname ? answer->cname : "");
results[6]= make_resultrdata(ip, answer);
+ assert(RESULTLIST_LLEN==7);
}
/*---------- synchronous query handling ----------*/
}
/*---------- synchronous query handling ----------*/
@@
-614,14
+624,6
@@
int cht_do_adns_synch(ClientData cd, Tcl_Interp *ip,
/*---------- asynchronous query handling ----------*/
/*---------- asynchronous query handling ----------*/
-struct Query {
- int ix; /* first! */
- Resolver *res;
- adns_query aqu;
- ScriptToInvoke on_yes, on_no, on_fail;
- Tcl_Obj *xargs;
-};
-
static void asynch_check_now(Resolver *res);
static void asynch_timerhandler(void *res_v) {
static void asynch_check_now(Resolver *res);
static void asynch_timerhandler(void *res_v) {