chiark
/
gitweb
/
~mdw
/
adns
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
update copyright dates
[adns]
/
client
/
adnstest.c
diff --git
a/client/adnstest.c
b/client/adnstest.c
index 67f287e03ec808c277667da07301c17096d2489f..550cf275642f7f29683a9c278bf90e22b49bb274 100644
(file)
--- a/
client/adnstest.c
+++ b/
client/adnstest.c
@@
-3,7
+3,11
@@
* - simple test program, not part of the library
*/
/*
* - simple test program, not part of the library
*/
/*
- * This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+ * This file is part of adns, which is
+ * Copyright (C) 1997-2000,2003,2006 Ian Jackson
+ * Copyright (C) 1999-2000,2003,2006 Tony Finch
+ * Copyright (C) 1991 Massachusetts Institute of Technology
+ * (See the file INSTALL for full details.)
*
* 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
@@
-28,19
+32,37
@@
#include <string.h>
#include <errno.h>
#include <string.h>
#include <errno.h>
-#include "adns.h"
-
#include "config.h"
#include "config.h"
+#include "adns.h"
-#if
ndef OUTPUTSTREAM
-#
define OUTPUTSTREAM stdout
+#if
def ADNS_REGRESS_TEST
+#
include "hredirect.h"
#endif
#endif
+struct myctx {
+ adns_query qu;
+ int doneyet, found;
+ const char *fdom;
+};
+
+static struct myctx *mcs;
+static adns_state ads;
+static adns_rrtype *types_a;
+
+static void quitnow(int rc) NONRETURNING;
+static void quitnow(int rc) {
+ free(mcs);
+ free(types_a);
+ if (ads) adns_finish(ads);
+
+ exit(rc);
+}
+
#ifndef HAVE_POLL
#undef poll
int poll(struct pollfd *ufds, int nfds, int timeout) {
fputs("poll(2) not supported on this system\n",stderr);
#ifndef HAVE_POLL
#undef poll
int poll(struct pollfd *ufds, int nfds, int timeout) {
fputs("poll(2) not supported on this system\n",stderr);
-
exit
(5);
+
quitnow
(5);
}
#define adns_beforepoll(a,b,c,d,e) 0
#define adns_afterpoll(a,b,c,d) 0
}
#define adns_beforepoll(a,b,c,d,e) 0
#define adns_afterpoll(a,b,c,d) 0
@@
-49,13
+71,24
@@
int poll(struct pollfd *ufds, int nfds, int timeout) {
static void failure_status(const char *what, adns_status st) NONRETURNING;
static void failure_status(const char *what, adns_status st) {
fprintf(stderr,"adns failure: %s: %s\n",what,adns_strerror(st));
static void failure_status(const char *what, adns_status st) NONRETURNING;
static void failure_status(const char *what, adns_status st) {
fprintf(stderr,"adns failure: %s: %s\n",what,adns_strerror(st));
-
exit
(2);
+
quitnow
(2);
}
static void failure_errno(const char *what, int errnoval) NONRETURNING;
static void failure_errno(const char *what, int errnoval) {
}
static void failure_errno(const char *what, int errnoval) NONRETURNING;
static void failure_errno(const char *what, int errnoval) {
- fprintf(stderr,"adns failure: %s: errno=%d\n",what,errnoval);
- exit(2);
+ switch (errnoval) {
+#define CE(e) \
+ case e: fprintf(stderr,"adns failure: %s: errno=" #e "\n",what); break
+ CE(EINVAL);
+ CE(EINTR);
+ CE(ESRCH);
+ CE(EAGAIN);
+ CE(ENOSYS);
+ CE(ERANGE);
+#undef CE
+ default: fprintf(stderr,"adns failure: %s: errno=%d\n",what,errnoval); break;
+ }
+ quitnow(2);
}
static void usageerr(const char *why) NONRETURNING;
}
static void usageerr(const char *why) NONRETURNING;
@@
-75,7
+108,7
@@
static void usageerr(const char *why) {
" 4 usage error\n"
" 5 operation not supported on this system\n",
why);
" 4 usage error\n"
" 5 operation not supported on this system\n",
why);
-
exit
(4);
+
quitnow
(4);
}
static const adns_rrtype defaulttypes[]= {
}
static const adns_rrtype defaulttypes[]= {
@@
-102,7
+135,7
@@
static const adns_rrtype defaulttypes[]= {
static void dumptype(adns_status ri, const char *rrtn, const char *fmtn) {
fprintf(stdout, "%s(%s)%s%s",
static void dumptype(adns_status ri, const char *rrtn, const char *fmtn) {
fprintf(stdout, "%s(%s)%s%s",
-
ri ? "?" : rrtn
, ri ? "?" : fmtn ? fmtn : "-",
+
(!ri && rrtn) ? rrtn : "?"
, ri ? "?" : fmtn ? fmtn : "-",
ri ? " " : "", ri ? adns_strerror(ri) : "");
}
ri ? " " : "", ri ? adns_strerror(ri) : "");
}
@@
-115,7
+148,7
@@
static void fdom_split(const char *fdom, const char **dom_r, int *qf_r,
if (*ep == ',' && strchr(ep,'/')) {
ep++;
while (*ep != '/') {
if (*ep == ',' && strchr(ep,'/')) {
ep++;
while (*ep != '/') {
- if (--ownflags_l <= 0) { fputs("too many flags\n",stderr);
exit
(3); }
+ if (--ownflags_l <= 0) { fputs("too many flags\n",stderr);
quitnow
(3); }
*ownflags++= *ep++;
}
}
*ownflags++= *ep++;
}
}
@@
-129,15
+162,8
@@
static int consistsof(const char *string, const char *accept) {
}
int main(int argc, char *const *argv) {
}
int main(int argc, char *const *argv) {
- struct myctx {
- adns_query qu;
- int doneyet, found;
- const char *fdom;
- };
-
- adns_state ads;
adns_query qu;
adns_query qu;
- struct myctx *mc
s, *mc
, *mcw;
+ struct myctx *mc, *mcw;
void *mcr;
adns_answer *ans;
const char *initstring, *rrtn, *fmtn;
void *mcr;
adns_answer *ans;
const char *initstring, *rrtn, *fmtn;
@@
-148,7
+174,6
@@
int main(int argc, char *const *argv) {
int r;
const adns_rrtype *types;
struct timeval now;
int r;
const adns_rrtype *types;
struct timeval now;
- adns_rrtype *types_a;
char ownflags[10];
char *ep;
const char *initflags, *owninitflags;
char ownflags[10];
char *ep;
const char *initflags, *owninitflags;
@@
-180,7
+205,7
@@
int main(int argc, char *const *argv) {
for (cp= argv[1]+1, tc=1; (ch= *cp); cp++)
if (ch==',') tc++;
types_a= malloc(sizeof(*types_a)*(tc+1));
for (cp= argv[1]+1, tc=1; (ch= *cp); cp++)
if (ch==',') tc++;
types_a= malloc(sizeof(*types_a)*(tc+1));
- if (!types_a) { perror("malloc types");
exit
(3); }
+ if (!types_a) { perror("malloc types");
quitnow
(3); }
for (cp= argv[1]+1, ti=0; ti<tc; ti++) {
types_a[ti]= strtoul(cp,&cp,10);
if ((ch= *cp)) {
for (cp= argv[1]+1, ti=0; ti<tc; ti++) {
types_a[ti]= strtoul(cp,&cp,10);
if ((ch= *cp)) {
@@
-188,10
+213,11
@@
int main(int argc, char *const *argv) {
cp++;
}
}
cp++;
}
}
-
*cp++
= adns_r_none;
+
types_a[ti]
= adns_r_none;
types= types_a;
argv++;
} else {
types= types_a;
argv++;
} else {
+ types_a= 0;
types= defaulttypes;
}
types= defaulttypes;
}
@@
-200,9
+226,11
@@
int main(int argc, char *const *argv) {
for (qc=0; fdomlist[qc]; qc++);
for (tc=0; types[tc] != adns_r_none; tc++);
for (qc=0; fdomlist[qc]; qc++);
for (tc=0; types[tc] != adns_r_none; tc++);
- mcs= malloc(
sizeof(*mcs)*qc*tc
);
- if (!mcs) { perror("malloc mcs");
exit
(3); }
+ mcs= malloc(
tc ? sizeof(*mcs)*qc*tc : 1
);
+ if (!mcs) { perror("malloc mcs");
quitnow
(3); }
+ setvbuf(stdout,0,_IOLBF,0);
+
if (initstring) {
r= adns_init_strcfg(&ads,
(adns_if_debug|adns_if_noautosys|adns_if_checkc_freq)
if (initstring) {
r= adns_init_strcfg(&ads,
(adns_if_debug|adns_if_noautosys|adns_if_checkc_freq)
@@
-288,7
+316,7
@@
int main(int argc, char *const *argv) {
fdom_split(mc->fdom,&domain,&qflags,ownflags,sizeof(ownflags));
fdom_split(mc->fdom,&domain,&qflags,ownflags,sizeof(ownflags));
- if (gettimeofday(&now,0)) { perror("gettimeofday");
exit
(3); }
+ if (gettimeofday(&now,0)) { perror("gettimeofday");
quitnow
(3); }
ri= adns_rr_info(ans->type, &rrtn,&fmtn,&len, 0,0);
fprintf(stdout, "%s flags %d type ",domain,qflags);
ri= adns_rr_info(ans->type, &rrtn,&fmtn,&len, 0,0);
fprintf(stdout, "%s flags %d type ",domain,qflags);
@@
-316,8
+344,5
@@
int main(int argc, char *const *argv) {
mc->doneyet= 1;
}
mc->doneyet= 1;
}
- free(mcs);
- adns_finish(ads);
-
- exit(0);
+ quitnow(0);
}
}