From e719af5942771e36ca8ae4d41d2dd5dbf14b71c0 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Wed, 23 Jul 2014 23:18:56 +0100 Subject: [PATCH] reverse parsing: Make adns__revparse_* return bool This seems nicer and is going to be more convenient. Signed-off-by: Ian Jackson --- src/addrfam.c | 18 +++++++++--------- src/internal.h | 21 +++++++++++---------- src/types.c | 8 ++++---- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/addrfam.c b/src/addrfam.c index d087016..ddae5cb 100644 --- a/src/addrfam.c +++ b/src/addrfam.c @@ -579,8 +579,8 @@ static const struct revparse_domain { #define REVDOMAIN_MAP(rps, labnum) \ ((labnum) ? (rps)->map : (1 << NREVDOMAINS) - 1) -int adns__revparse_label(struct revparse_state *rps, int labnum, - const char *dgram, int labstart, int lablen) { +bool adns__revparse_label(struct revparse_state *rps, int labnum, + const char *dgram, int labstart, int lablen) { const char *label = dgram+labstart; unsigned f= REVDOMAIN_MAP(rps, labnum); const struct revparse_domain *rpd; @@ -604,16 +604,16 @@ int adns__revparse_label(struct revparse_state *rps, int labnum, mismatch: f &= ~d; - if (!f) return -1; + if (!f) return 0; } rps->map= f; - return 0; + return 1; } -int adns__revparse_done(struct revparse_state *rps, - const char *dgram, int nlabels, - adns_rrtype *rrtype_r, adns_sockaddr *addr_r) { +bool adns__revparse_done(struct revparse_state *rps, + const char *dgram, int nlabels, + adns_rrtype *rrtype_r, adns_sockaddr *addr_r) { unsigned f= REVDOMAIN_MAP(rps, nlabels); const struct revparse_domain *rpd; unsigned d; @@ -624,7 +624,7 @@ int adns__revparse_done(struct revparse_state *rps, if (nlabels >= rpd->nrevlab && !rpd->tail[nlabels - rpd->nrevlab]) { found = i; continue; } f &= ~d; - if (!f) return -1; + if (!f) return 0; } assert(found >= 0); assert(f == (1 << found)); @@ -632,5 +632,5 @@ int adns__revparse_done(struct revparse_state *rps, *rrtype_r= rpd->rrtype; addr_r->sa.sa_family= rpd->af; rpd->rev_mkaddr(addr_r, rps->ipv[found]); - return 0; + return 1; } diff --git a/src/internal.h b/src/internal.h index 49f5e66..2a0b009 100644 --- a/src/internal.h +++ b/src/internal.h @@ -39,6 +39,7 @@ typedef unsigned char byte; #include #include #include +#include #include @@ -467,26 +468,26 @@ extern int adns__make_reverse_domain(const struct sockaddr *sa, * allocate an output buffer failed. */ -extern int adns__revparse_label(struct revparse_state *rps, int labnum, - const char *dgram, - int labstart, int lablen); +extern bool adns__revparse_label(struct revparse_state *rps, int labnum, + const char *dgram, + int labstart, int lablen); /* Parse a label in a reverse-domain name, given its index labnum (starting * from zero), a pointer to its contents (which need not be null-terminated), * and its length. The state in *rps is initialized implicitly when labnum * is zero. * - * Returns zero if the parse was successful, nonzero if the domain name is - * definitely invalid and the parse must be abandoned. + * Returns 1 if the parse is proceeding successfully, 0 if the domain + * name is definitely invalid and the parse must be abandoned. */ -extern int adns__revparse_done(struct revparse_state *rps, - const char *dgram, int nlabels, - adns_rrtype *rrtype_r, adns_sockaddr *addr_r); +extern bool adns__revparse_done(struct revparse_state *rps, + const char *dgram, int nlabels, + adns_rrtype *rrtype_r, adns_sockaddr *addr_r); /* Finishes parsing a reverse-domain name, given the total number of * labels in the name. On success, fills in the af and protocol * address in *addr_r, and the forward query type in *rrtype_r - * (because that turns out to be useful). Returns nonzero if the - * parse must be abandoned. + * (because that turns out to be useful). Returns 1 if the parse + * was successful. */ /* From setup.c: */ diff --git a/src/types.c b/src/types.c index 804b3b5..0f89bdb 100644 --- a/src/types.c +++ b/src/types.c @@ -1142,12 +1142,12 @@ static adns_status ckl_ptr(adns_state ads, adns_queryflags flags, int labnum, const char *dgram, int labstart, int lablen) { if (lablen) { - if (adns__revparse_label(&cls->ptr, labnum, dgram,labstart,lablen)) + if (!adns__revparse_label(&cls->ptr, labnum, dgram,labstart,lablen)) return adns_s_querydomainwrong; } else { - if (adns__revparse_done(&cls->ptr, dgram, labnum, - &ctx->tinfo.ptr.rev_rrtype, - &ctx->tinfo.ptr.addr)) + if (!adns__revparse_done(&cls->ptr, dgram, labnum, + &ctx->tinfo.ptr.rev_rrtype, + &ctx->tinfo.ptr.addr)) return adns_s_querydomainwrong; } return adns_s_ok; -- 2.30.2