From: Zbigniew Jędrzejewski-Szmek Date: Sun, 3 Aug 2014 18:02:04 +0000 (-0400) Subject: resolve-host: make arg_type an int X-Git-Tag: v216~277 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=de292aa1dd1942e151ff034fcb88504a86742f97;ds=sidebyside resolve-host: make arg_type an int We are using it also to store _DNS_TYPE_INVALID, so it should be signed. --- diff --git a/Makefile.am b/Makefile.am index 45d2e58bf..ce8f2472e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1189,7 +1189,7 @@ src/resolve/dns_type-list.txt: src/resolve/dns-type.h $(AM_V_GEN)$(SED) -n -r 's/.* DNS_TYPE_(\w+).*/\1/p' <$< >$@ src/resolve/dns_type-to-name.h: src/resolve/dns_type-list.txt - $(AM_V_GEN)$(AWK) 'BEGIN{ print "const char *dns_type_to_string(uint16_t type) {\n\tswitch(type) {" } {printf " case DNS_TYPE_%s: return ", $$1; sub(/_/, "-"); printf "\"%s\";\n", $$1 } END{ print "\ndefault: return NULL;\n\t}\n}\n" }' <$< >$@ + $(AM_V_GEN)$(AWK) 'BEGIN{ print "const char *dns_type_to_string(int type) {\n\tswitch(type) {" } {printf " case DNS_TYPE_%s: return ", $$1; sub(/_/, "-"); printf "\"%s\";\n", $$1 } END{ print "\ndefault: return NULL;\n\t}\n}\n" }' <$< >$@ src/resolve/dns_type-from-name.gperf: src/resolve/dns_type-list.txt $(AM_V_GEN)$(AWK) 'BEGIN{ print "struct dns_type_name { const char* name; int id; };"; print "%null-strings"; print "%%";} { s=$$1; sub(/_/, "-", s); printf "%s, ", $$s; printf "DNS_TYPE_%s\n", $$1 }' <$< >$@ diff --git a/src/resolve-host/resolve-host.c b/src/resolve-host/resolve-host.c index 987b43a0c..4b46cdfa1 100644 --- a/src/resolve-host/resolve-host.c +++ b/src/resolve-host/resolve-host.c @@ -37,7 +37,7 @@ static int arg_family = AF_UNSPEC; static int arg_ifindex = 0; -static uint16_t arg_type = 0; +static int arg_type = 0; static uint16_t arg_class = 0; static bool arg_legend = true; @@ -316,6 +316,7 @@ static int resolve_record(sd_bus *bus, const char *name) { if (r < 0) return bus_log_create_error(r); + assert((uint16_t) arg_type == arg_type); r = sd_bus_message_append(req, "sqq", name, arg_class, arg_type); if (r < 0) return bus_log_create_error(r); @@ -482,11 +483,12 @@ static int parse_argv(int argc, char *argv[]) { return 0; } - r = dns_type_from_string(optarg, &arg_type); - if (r < 0) { + arg_type = dns_type_from_string(optarg); + if (arg_type < 0) { log_error("Failed to parse RR record type %s", optarg); return r; } + assert(arg_type > 0 && (uint16_t) arg_type == arg_type); break; diff --git a/src/resolve/dns-type.c b/src/resolve/dns-type.c index 271a7e176..a3e740896 100644 --- a/src/resolve/dns-type.c +++ b/src/resolve/dns-type.c @@ -32,16 +32,14 @@ lookup_dns_type (register const char *str, register unsigned int len); #include "dns_type-from-name.h" #include "dns_type-to-name.h" -int dns_type_from_string(const char *s, uint16_t *type) { +int dns_type_from_string(const char *s) { const struct dns_type_name *sc; assert(s); - assert(type); sc = lookup_dns_type(s, strlen(s)); if (!sc) - return -EINVAL; + return _DNS_TYPE_INVALID; - *type = sc->id; - return 0; + return sc->id; } diff --git a/src/resolve/dns-type.h b/src/resolve/dns-type.h index 66063153a..86951d233 100644 --- a/src/resolve/dns-type.h +++ b/src/resolve/dns-type.h @@ -21,12 +21,10 @@ #pragma once -#include - #include "macro.h" -const char *dns_type_to_string(uint16_t type); -int dns_type_from_string(const char *s, uint16_t *type); +const char *dns_type_to_string(int type); +int dns_type_from_string(const char *s); /* DNS record types, taken from * http://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml.