Signed-off-by: Colin McCabe <cmccabe@xxxxxxxxxxxxxx> --- include/cldc.h | 7 ++--- lib/cldc-dns.c | 80 +++++++++++++++++++++----------------------------------- tools/cldcli.c | 12 +++++--- 3 files changed, 41 insertions(+), 58 deletions(-) diff --git a/include/cldc.h b/include/cldc.h index 70062cf..f0a1b37 100644 --- a/include/cldc.h +++ b/include/cldc.h @@ -200,14 +200,13 @@ extern int cldc_udp_pkt_send(void *private, const void *buf, size_t buflen); /* cldc-dns */ -extern int cldc_getaddr(GList **host_list, const char *thishost, bool verbose, - void (*act_log)(int prio, const char *fmt, ...)); +extern int cldc_getaddr(GList **host_list, const char *thishost, + struct cld_log *log); extern int cldc_saveaddr(struct cldc_host *hp, unsigned int priority, unsigned int weight, unsigned int port, unsigned int nlen, const char *name, - bool verbose, - void (*act_log)(int prio, const char *fmt, ...)); + struct cld_log *log); static inline bool seqid_after_eq(uint64_t a_, uint64_t b_) { diff --git a/lib/cldc-dns.c b/lib/cldc-dns.c index 89800ba..f28cc92 100644 --- a/lib/cldc-dns.c +++ b/lib/cldc-dns.c @@ -21,8 +21,7 @@ int cldc_saveaddr(struct cldc_host *hp, unsigned int priority, unsigned int weight, unsigned int port, unsigned int nlen, const char *name, - bool verbose, - void (*act_log)(int prio, const char *fmt, ...)) + struct cld_log *log) { char portstr[11]; char *hostname; @@ -47,7 +46,7 @@ int cldc_saveaddr(struct cldc_host *hp, rc = getaddrinfo(hostname, portstr, &hints, &res0); if (rc) { - act_log(LOG_INFO, "getaddrinfo(%s,%s) failed: %s", + CLD_INFO(log, "getaddrinfo(%s,%s) failed: %s", hostname, portstr, gai_strerror(rc)); rc = -EINVAL; goto err_addr; @@ -66,7 +65,7 @@ int cldc_saveaddr(struct cldc_host *hp, } if (!something_suitable) { - act_log(LOG_INFO, "Host %s port %u has no addresses", + CLD_INFO(log, "Host %s port %u has no addresses", hostname, port); rc = -EINVAL; goto err_suitable; @@ -77,11 +76,8 @@ int cldc_saveaddr(struct cldc_host *hp, hp->prio = priority; hp->weight = weight; - if (verbose) { - act_log(LOG_DEBUG, - "Found CLD host %s prio %d weight %d", - hostname, priority, weight); - } + CLD_DEBUG(log, "Found CLD host %s prio %d weight %d", + hostname, priority, weight); freeaddrinfo(res0); return 0; @@ -100,8 +96,7 @@ err_name: * on YP-driven networks with nonqualified hostnames (at least for now). */ static int cldc_make_fqdn(char *buf, int size, const char *srvname, - const char *thishost, - void (*act_log)(int prio, const char *fmt, ...)) + const char *thishost, struct cld_log *log) { char *s; int nlen; @@ -109,29 +104,26 @@ static int cldc_make_fqdn(char *buf, int size, const char *srvname, nlen = strlen(srvname); if (nlen >= size-20) { - act_log(LOG_INFO, - "cldc_getaddr: internal error (nlen %d size %d)", + CLD_INFO(log, "cldc_getaddr: internal error " + "(nlen %d size %d)", nlen, size); return -1; } if (thishost == NULL) { - act_log(LOG_INFO, - "cldc_getaddr: internal error (null hostname)"); + CLD_INFO(log, "cldc_getaddr: internal error (null hostname)"); return -1; } if ((s = strchr(thishost, '.')) == NULL) { - act_log(LOG_INFO, - "cldc_getaddr: hostname is not FQDN: \"%s\"", - thishost); + CLD_INFO(log, "cldc_getaddr: hostname is not FQDN: \"%s\"", + thishost); return -1; } s++; dlen = strlen(s); if (nlen + 1 + dlen + 1 > size) { - act_log(LOG_INFO, - "cldc_getaddr: domain is too long: \"%s\"", s); + CLD_INFO(log, "cldc_getaddr: domain is too long: \"%s\"", s); return -1; } @@ -161,8 +153,8 @@ static void push_host(GList **host_list, struct cldc_host *hp_in) * This is not reentrant. Better be called before any other threads * are started. */ -int cldc_getaddr(GList **host_list, const char *thishost, bool verbose, - void (*act_log)(int prio, const char *fmt, ...)) +int cldc_getaddr(GList **host_list, const char *thishost, + struct cld_log *log) { enum { hostsz = 64 }; char cldb[hostsz]; @@ -183,7 +175,7 @@ int cldc_getaddr(GList **host_list, const char *thishost, bool verbose, * is a lookup in the DNS root (probably the standard-compliant * dot between "_cld" and "_udp" hurts us here). */ - if (cldc_make_fqdn(cldb, hostsz, "_cld._udp", thishost, act_log) != 0) + if (cldc_make_fqdn(cldb, hostsz, "_cld._udp", thishost, log) != 0) return -1; do_try_again: @@ -191,12 +183,11 @@ do_try_again: if (rc < 0) { switch (h_errno) { case HOST_NOT_FOUND: - act_log(LOG_INFO, - "cldc_getaddr: No _cld._udp SRV record"); + CLD_INFO(log, "cldc_getaddr: No _cld._udp SRV record"); return -1; case NO_DATA: - act_log(LOG_INFO, - "cldc_getaddr: Cannot find _cld._udp SRV record"); + CLD_INFO(log, "cldc_getaddr: Cannot find _cld._udp " + "SRV record"); return -1; case TRY_AGAIN: if (search_retries-- > 0) @@ -204,8 +195,7 @@ do_try_again: /* fall through */ case NO_RECOVERY: default: - act_log(LOG_INFO, - "cldc_getaddr: res_search error (%d): %s", + CLD_INFO(log, "cldc_getaddr: res_search error (%d): %s", h_errno, hstrerror(h_errno)); return -1; } @@ -213,13 +203,13 @@ do_try_again: rlen = rc; if (rlen == 0) { - act_log(LOG_INFO, - "cldc_getaddr: res_search returned empty reply"); + CLD_INFO(log, "cldc_getaddr: res_search returned " + "empty reply"); return -1; } if (ns_initparse(resp, rlen, &nsb) < 0) { - act_log(LOG_INFO, "cldc_getaddr: ns_initparse error"); + CLD_INFO(log, "cldc_getaddr: ns_initparse error"); return -1; } @@ -237,42 +227,32 @@ do_try_again: case ns_t_srv: rrlen = ns_rr_rdlen(rrb); if (rrlen < 8) { /* 2+2+2 and 2 for host */ - if (verbose) { - act_log(LOG_DEBUG, - "cldc_getaddr: SRV len %d", - rrlen); - } + CLD_DEBUG(log, "cldc_getaddr: SRV len %d", + rrlen); break; } p = ns_rr_rdata(rrb); rc = dn_expand(resp, resp+rlen, p+6, hostb, hostsz); if (rc < 0) { - if (verbose) { - act_log(LOG_DEBUG, "cldc_getaddr: " - "dn_expand error %d", rc); - } + CLD_DEBUG(log, "cldc_getaddr: " + "dn_expand error %d", rc); break; } if (rc < 2) { - if (verbose) { - act_log(LOG_DEBUG, "cldc_getaddr: " - "dn_expand short %d", rc); - } + CLD_DEBUG(log, "cldc_getaddr: " + "dn_expand short %d", rc); break; } if (cldc_saveaddr(&hp, ns_get16(p+0), ns_get16(p+2), ns_get16(p+4), - rc, hostb, verbose, act_log)) + rc, hostb, log)) break; push_host(host_list, &hp); break; case ns_t_cname: /* impossible, but */ - if (verbose) { - act_log(LOG_DEBUG, - "CNAME in SRV request, ignored"); - } + CLD_DEBUG(log, "CNAME in SRV request, ignored"); break; default: ; diff --git a/tools/cldcli.c b/tools/cldcli.c index 23cba99..52ef49a 100644 --- a/tools/cldcli.c +++ b/tools/cldcli.c @@ -97,7 +97,6 @@ struct timer { }; static unsigned long thread_running = 1; -static int debugging; static GList *host_list; static char clicwd[CLD_PATH_MAX + 1] = "/"; static int to_thread[2], from_thread[2]; @@ -136,6 +135,11 @@ static void applog(int prio, const char *fmt, ...) va_end(ap); } +static struct cld_log cli_log = { + .func = applog, + .verbose = 0, +}; + static gint timer_cmp(gconstpointer a_, gconstpointer b_) { const struct timer *a = a_; @@ -531,7 +535,7 @@ static void handle_user_command(void) read_to_thread(&creq, sizeof(creq)); - if (debugging) + if (cli_log.verbose) switch (creq.cmd) { case CREQ_CD: case CREQ_CAT: @@ -1236,7 +1240,7 @@ static error_t parse_opt (int key, char *arg, struct argp_state *state) switch(key) { case 'D': if (atoi(arg) >= 0 && atoi(arg) <= 2) - debugging = atoi(arg); + cli_log.verbose = atoi(arg); else { fprintf(stderr, "invalid debug level: '%s'\n", arg); argp_usage(state); @@ -1304,7 +1308,7 @@ int main (int argc, char *argv[]) return 1; } hostb[hostsz-1] = 0; - if (cldc_getaddr(&host_list, hostb, debugging, applog)) { + if (cldc_getaddr(&host_list, hostb, &cli_log)) { fprintf(stderr, "Unable to find a CLD host\n"); return 1; } -- 1.6.2.5 -- To unsubscribe from this list: send the line "unsubscribe hail-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html