X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=client%2Fadnslogres.c;h=d5f0e369a3354bacf3d13257ccf72a087623e431;hb=66f7ac484ca092766a46a6d50c07cf59291ffc86;hp=a91af8702a82616b59674a0b5521846d00813290;hpb=bb149f75ad8494e2f955297024c888f04513dea5;p=adns.git diff --git a/client/adnslogres.c b/client/adnslogres.c index a91af87..d5f0e36 100644 --- a/client/adnslogres.c +++ b/client/adnslogres.c @@ -5,10 +5,10 @@ /* * This file is * Copyright (C) 1999 Tony Finch - * Copyright (C) 1999 Ian Jackson + * Copyright (C) 1999-2000 Ian Jackson * * It is part of adns, which is - * Copyright (C) 1997-1999 Ian Jackson + * Copyright (C) 1997-2000 Ian Jackson * Copyright (C) 1999 Tony Finch * * This program is free software; you can redistribute it and/or modify @@ -25,8 +25,9 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * This version was originally supplied by Tony Finch, but has been - * modified by Ian Jackson as it was incorporated into adns. + * This version was originally supplied by Tony Finch, but has been + * modified by Ian Jackson as it was incorporated into adns and + * subsequently. */ static const char * const cvsid = @@ -56,9 +57,16 @@ static const char * const cvsid = static const char *progname; -static void aargh(const char *msg) { - fprintf(stderr, "%s: %s: %s (%d)\n", progname, msg, - strerror(errno) ? strerror(errno) : "Unknown error", errno); +#define msg(fmt, args...) fprintf(stderr, "%s: " fmt "\n", progname, ##args) +#define guard_null(str) ((str) ? (str) : "") + +#define sensible_ctype(type,ch) (type((unsigned char)(ch))) + /* isfoo() functions from ctype.h can't safely be fed char - blech ! */ + +static void aargh(const char *cause) { + const char *why = strerror(errno); + if (!why) why = "Unknown error"; + msg("%s: %s (%d)", cause, why, errno); exit(1); } @@ -72,7 +80,7 @@ static char *ipaddr2domain(char *start, char **addr, char **rest) { ptrs[0]= start; retry: - while (!isdigit(*ptrs[0])) + while (!sensible_ctype(isdigit,*ptrs[0])) if (!*ptrs[0]++) { strcpy(buf, "invalid."); *addr= *rest= NULL; @@ -80,8 +88,8 @@ retry: } for (i= 1; i < 5; i++) { ptrs[i]= ptrs[i-1]; - while (isdigit(*ptrs[i]++)); - if ((i == 4 && !isspace(ptrs[i][-1])) || + while (sensible_ctype(isdigit,*ptrs[i]++)); + if ((i == 4 && !sensible_ctype(isspace,ptrs[i][-1])) || (i != 4 && ptrs[i][-1] != '.') || (ptrs[i]-ptrs[i-1] > 4)) { ptrs[0]= ptrs[i]-1; @@ -126,7 +134,7 @@ static logline *readline(FILE *inf, adns_state adns, int opts) { strcpy(line->start, buf); str= ipaddr2domain(line->start, &line->addr, &line->rest); if (opts & OPT_DEBUG) - msg("submitting %.*s -> %s", line->rest-line->addr, line->addr, str); + msg("submitting %.*s -> %s", line->rest-line->addr, guard_null(line->addr), str); if (adns_submit(adns, str, adns_r_ptr, adns_qf_quoteok_cname|adns_qf_cname_loose, NULL, &line->query)) @@ -151,7 +159,7 @@ static void proclog(FILE *inf, FILE *outf, int opts) { while (head) { if (opts & OPT_DEBUG) msg("%d in queue; checking %.*s", len, - head->rest-head->addr, head->addr); + head->rest-head->addr, guard_null(head->addr)); if (eof || len > MAXPENDING) if (opts & OPT_POLL) err= adns_wait_poll(adns, &head->query, &answer, NULL);