enable more GCC/clang warnings, fix reported warnings

pull/797/head
Brad House 5 months ago
parent bbcb1a2bdf
commit 253bdee3bc
  1. 2
      CMakeLists.txt
  2. 6
      Makefile.dj
  3. 6
      cmake/EnableWarnings.cmake
  4. 40
      configure.ac
  5. 12
      include/ares_dns_record.h
  6. 8
      src/lib/ares__addrinfo2hostent.c
  7. 2
      src/lib/ares_event_configchg.c
  8. 8
      src/lib/ares_gethostbyname.c
  9. 4
      src/lib/ares_getnameinfo.c
  10. 2
      src/lib/ares_private.h
  11. 4
      src/lib/ares_process.c
  12. 2
      src/lib/ares_rand.c
  13. 10
      src/lib/ares_sysconfig_mac.c
  14. 29
      src/tools/adig.c
  15. 12
      src/tools/ahost.c
  16. 4
      src/tools/ares_getopt.c
  17. 4
      src/tools/ares_getopt.h

@ -564,7 +564,7 @@ SET (RECVFROM_TYPE_ARG5 "struct sockaddr *")
SET (RECV_TYPE_ARG4 int) SET (RECV_TYPE_ARG4 int)
SET (GETNAMEINFO_TYPE_ARG1 "struct sockaddr *") SET (GETNAMEINFO_TYPE_ARG1 "struct sockaddr *")
SET (GETNAMEINFO_TYPE_ARG7 int) SET (GETNAMEINFO_TYPE_ARG7 int)
SET (SEND_TYPE_ARG2 "void *") SET (SEND_TYPE_ARG2 "const void *")
SET (SEND_TYPE_ARG4 int) SET (SEND_TYPE_ARG4 int)
################################################################################ ################################################################################

@ -21,9 +21,12 @@ OBJ_DIR = djgpp
CFLAGS = -g -O2 -I./include -I./src/lib \ CFLAGS = -g -O2 -I./include -I./src/lib \
-I$(WATT32_ROOT)/inc \ -I$(WATT32_ROOT)/inc \
-std=c90 \
-Wall \ -Wall \
-Wextra \ -Wextra \
-Waggregate-return \
-Wcast-align \ -Wcast-align \
-Wcast-qual \
-Wconversion \ -Wconversion \
-Wdeclaration-after-statement \ -Wdeclaration-after-statement \
-Wdouble-promotion \ -Wdouble-promotion \
@ -40,6 +43,7 @@ CFLAGS = -g -O2 -I./include -I./src/lib \
-Wno-coverage-mismatch \ -Wno-coverage-mismatch \
-Wold-style-definition \ -Wold-style-definition \
-Wpacked \ -Wpacked \
-Wpedantic \
-Wpointer-arith \ -Wpointer-arith \
-Wshadow \ -Wshadow \
-Wsign-conversion \ -Wsign-conversion \
@ -47,12 +51,14 @@ CFLAGS = -g -O2 -I./include -I./src/lib \
-Wstrict-prototypes \ -Wstrict-prototypes \
-Wtrampolines \ -Wtrampolines \
-Wundef \ -Wundef \
-Wunreachable-code \
-Wunused \ -Wunused \
-Wvariadic-macros \ -Wvariadic-macros \
-Wvla \ -Wvla \
-Wwrite-strings \ -Wwrite-strings \
-Werror=implicit-int \ -Werror=implicit-int \
-Werror=implicit-function-declaration \ -Werror=implicit-function-declaration \
-Wno-long-long \
-DWATT32 -DHAVE_CONFIG_H \ -DWATT32 -DHAVE_CONFIG_H \
-D_REENTRANT \ -D_REENTRANT \
-DCARES_NO_DEPRECATED \ -DCARES_NO_DEPRECATED \

@ -305,7 +305,9 @@ else ()
-Wextra -Wextra
# Enable additional warnings not covered by Wall and Wextra. # Enable additional warnings not covered by Wall and Wextra.
-Waggregate-return
-Wcast-align -Wcast-align
-Wcast-qual
-Wconversion -Wconversion
-Wdeclaration-after-statement -Wdeclaration-after-statement
-Wdouble-promotion -Wdouble-promotion
@ -323,6 +325,7 @@ else ()
-Wno-coverage-mismatch -Wno-coverage-mismatch
-Wold-style-definition -Wold-style-definition
-Wpacked -Wpacked
-Wpedantic
-Wpointer-arith -Wpointer-arith
-Wredundant-decls -Wredundant-decls
-Wshadow -Wshadow
@ -331,6 +334,7 @@ else ()
-Wstrict-prototypes -Wstrict-prototypes
-Wtrampolines -Wtrampolines
-Wundef -Wundef
-Wunreachable-code
-Wunused -Wunused
-Wvariadic-macros -Wvariadic-macros
-Wvla -Wvla
@ -349,6 +353,8 @@ else ()
# Some clang versions might warn if an argument like "-I/path/to/headers" is unused, # Some clang versions might warn if an argument like "-I/path/to/headers" is unused,
# silence these. # silence these.
-Qunused-arguments -Qunused-arguments
-Wno-long-long
) )
# C++ flags: # C++ flags:

@ -245,42 +245,8 @@ AC_SUBST(CARES_SYMBOL_HIDING_CFLAG)
if test "$enable_warnings" = "yes"; then if test "$enable_warnings" = "yes"; then
AX_APPEND_COMPILE_FLAGS([-Wall \ AX_APPEND_COMPILE_FLAGS([-std=c90 -Wall -Wextra -Waggregate-return -Wcast-align -Wcast-qual -Wconversion -Wdeclaration-after-statement -Wdouble-promotion -Wfloat-equal -Wformat-security -Winit-self -Wjump-misses-init -Wlogical-op -Wmissing-braces -Wmissing-declarations -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-prototypes -Wnested-externs -Wno-coverage-mismatch -Wold-style-definition -Wpacked -Wpedantic -Wpointer-arith -Wredundant-decls -Wshadow -Wsign-conversion -Wstrict-overflow -Wstrict-prototypes -Wtrampolines -Wundef -Wunreachable-code -Wunused -Wvariadic-macros -Wvla -Wwrite-strings -Werror=implicit-int -Werror=implicit-function-declaration -Werror=partial-availability -Wno-long-long ],
-Wextra \ [AM_CFLAGS], [-Werror])
-Wcast-align \
-Wconversion \
-Wdeclaration-after-statement \
-Wdouble-promotion \
-Wfloat-equal \
-Wformat-security \
-Winit-self \
-Wjump-misses-init \
-Wlogical-op \
-Wmissing-braces \
-Wmissing-declarations \
-Wmissing-format-attribute \
-Wmissing-include-dirs \
-Wmissing-prototypes \
-Wnested-externs \
-Wno-coverage-mismatch \
-Wold-style-definition \
-Wpacked \
-Wpointer-arith \
-Wredundant-decls \
-Wshadow \
-Wsign-conversion \
-Wstrict-overflow \
-Wstrict-prototypes \
-Wtrampolines \
-Wundef \
-Wunused \
-Wvariadic-macros \
-Wvla \
-Wwrite-strings \
-Werror=implicit-int \
-Werror=implicit-function-declaration \
-Werror=partial-availability \
], [AM_CFLAGS], [-Werror])
fi fi
if test "$ax_cv_c_compiler_vendor" = "intel"; then if test "$ax_cv_c_compiler_vendor" = "intel"; then
@ -663,7 +629,7 @@ recvfrom_type_arg5="struct sockaddr *"
recv_type_arg4=int recv_type_arg4=int
getnameinfo_type_arg1="struct sockaddr *" getnameinfo_type_arg1="struct sockaddr *"
getnameinfo_type_arg7=int getnameinfo_type_arg7=int
send_type_arg2="void *" send_type_arg2="const void *"
send_type_arg4=int send_type_arg4=int
AC_DEFINE_UNQUOTED([RECVFROM_TYPE_RETV], [ ${recvfrom_type_retv} ], [ recvfrom() return value ]) AC_DEFINE_UNQUOTED([RECVFROM_TYPE_RETV], [ ${recvfrom_type_retv} ], [ recvfrom() return value ])

@ -94,7 +94,7 @@ typedef enum {
ARES_OPCODE_IQUERY = 1, /*!< Inverse query. Obsolete. */ ARES_OPCODE_IQUERY = 1, /*!< Inverse query. Obsolete. */
ARES_OPCODE_STATUS = 2, /*!< Name server status query */ ARES_OPCODE_STATUS = 2, /*!< Name server status query */
ARES_OPCODE_NOTIFY = 4, /*!< Zone change notification (RFC 1996) */ ARES_OPCODE_NOTIFY = 4, /*!< Zone change notification (RFC 1996) */
ARES_OPCODE_UPDATE = 5, /*!< Zone update message (RFC2136) */ ARES_OPCODE_UPDATE = 5 /*!< Zone update message (RFC2136) */
} ares_dns_opcode_t; } ares_dns_opcode_t;
/*! DNS Header flags */ /*! DNS Header flags */
@ -108,7 +108,7 @@ typedef enum {
ARES_FLAG_AD = 1 << 5, /*!< RFC 2065. Authentic Data bit indicates in a ARES_FLAG_AD = 1 << 5, /*!< RFC 2065. Authentic Data bit indicates in a
* response that the data included has been verified by * response that the data included has been verified by
* the server providing it */ * the server providing it */
ARES_FLAG_CD = 1 << 6, /*!< RFC 2065. Checking Disabled bit indicates in a ARES_FLAG_CD = 1 << 6 /*!< RFC 2065. Checking Disabled bit indicates in a
* query that non-verified data is acceptable to the * query that non-verified data is acceptable to the
* resolver sending the query. */ * resolver sending the query. */
} ares_dns_flags_t; } ares_dns_flags_t;
@ -152,7 +152,7 @@ typedef enum {
ARES_RCODE_BADNAME = 20, /*!< RFC 2930. Duplicate Key Name */ ARES_RCODE_BADNAME = 20, /*!< RFC 2930. Duplicate Key Name */
ARES_RCODE_BADALG = 21, /*!< RFC 2930. Algorithm not supported */ ARES_RCODE_BADALG = 21, /*!< RFC 2930. Algorithm not supported */
ARES_RCODE_BADTRUNC = 22, /*!< RFC 8945. Bad Truncation */ ARES_RCODE_BADTRUNC = 22, /*!< RFC 8945. Bad Truncation */
ARES_RCODE_BADCOOKIE = 23, /*!< RVC 7973. Bad/missing Server Cookie */ ARES_RCODE_BADCOOKIE = 23 /*!< RVC 7973. Bad/missing Server Cookie */
} ares_dns_rcode_t; } ares_dns_rcode_t;
/*! Data types used */ /*! Data types used */
@ -169,7 +169,7 @@ typedef enum {
* printable. Guaranteed to have a NULL * printable. Guaranteed to have a NULL
* terminator for convenience (not included in * terminator for convenience (not included in
* length) */ * length) */
ARES_DATATYPE_OPT = 10, /*!< Array of options. 16bit identifier, BIN ARES_DATATYPE_OPT = 10 /*!< Array of options. 16bit identifier, BIN
* data. */ * data. */
} ares_dns_datatype_t; } ares_dns_datatype_t;
@ -292,7 +292,7 @@ typedef enum {
/*! RAW Record. RR Type. Datatype: U16 */ /*! RAW Record. RR Type. Datatype: U16 */
ARES_RR_RAW_RR_TYPE = (ARES_REC_TYPE_RAW_RR * 100) + 1, ARES_RR_RAW_RR_TYPE = (ARES_REC_TYPE_RAW_RR * 100) + 1,
/*! RAW Record. RR Data. Datatype: BIN */ /*! RAW Record. RR Data. Datatype: BIN */
ARES_RR_RAW_RR_DATA = (ARES_REC_TYPE_RAW_RR * 100) + 2, ARES_RR_RAW_RR_DATA = (ARES_REC_TYPE_RAW_RR * 100) + 2
} ares_dns_rr_key_t; } ares_dns_rr_key_t;
/*! TLSA Record ARES_RR_TLSA_CERT_USAGE known values */ /*! TLSA Record ARES_RR_TLSA_CERT_USAGE known values */
@ -372,7 +372,7 @@ typedef enum {
/*! RFC 8145. Signaling Trust Anchor Knowledge in DNSSEC */ /*! RFC 8145. Signaling Trust Anchor Knowledge in DNSSEC */
ARES_OPT_PARAM_EDNS_KEY_TAG = 14, ARES_OPT_PARAM_EDNS_KEY_TAG = 14,
/*! RFC 8914. Extended ERROR code and message */ /*! RFC 8914. Extended ERROR code and message */
ARES_OPT_PARAM_EXTENDED_DNS_ERROR = 15, ARES_OPT_PARAM_EXTENDED_DNS_ERROR = 15
} ares_opt_param_t; } ares_opt_param_t;
/*! Data type for option records for keys like ARES_RR_OPT_OPTIONS and /*! Data type for option records for keys like ARES_RR_OPT_OPTIONS and

@ -165,13 +165,13 @@ ares_status_t ares__addrinfo2hostent(const struct ares_addrinfo *ai, int family,
if (family == AF_INET6) { if (family == AF_INET6) {
memcpy( memcpy(
(*host)->h_addr_list[i], (*host)->h_addr_list[i],
&(CARES_INADDR_CAST(struct sockaddr_in6 *, next->ai_addr)->sin6_addr), &(CARES_INADDR_CAST(const struct sockaddr_in6 *, next->ai_addr)->sin6_addr),
(size_t)(*host)->h_length); (size_t)(*host)->h_length);
} }
if (family == AF_INET) { if (family == AF_INET) {
memcpy( memcpy(
(*host)->h_addr_list[i], (*host)->h_addr_list[i],
&(CARES_INADDR_CAST(struct sockaddr_in *, next->ai_addr)->sin_addr), &(CARES_INADDR_CAST(const struct sockaddr_in *, next->ai_addr)->sin_addr),
(size_t)(*host)->h_length); (size_t)(*host)->h_length);
} }
++i; ++i;
@ -256,7 +256,7 @@ ares_status_t ares__addrinfo2addrttl(const struct ares_addrinfo *ai, int family,
memcpy( memcpy(
&addr6ttls[*naddrttls].ip6addr, &addr6ttls[*naddrttls].ip6addr,
&(CARES_INADDR_CAST(struct sockaddr_in6 *, next->ai_addr)->sin6_addr), &(CARES_INADDR_CAST(const struct sockaddr_in6 *, next->ai_addr)->sin6_addr),
sizeof(struct ares_in6_addr)); sizeof(struct ares_in6_addr));
} else { } else {
if (next->ai_ttl > cname_ttl) { if (next->ai_ttl > cname_ttl) {
@ -266,7 +266,7 @@ ares_status_t ares__addrinfo2addrttl(const struct ares_addrinfo *ai, int family,
} }
memcpy( memcpy(
&addrttls[*naddrttls].ipaddr, &addrttls[*naddrttls].ipaddr,
&(CARES_INADDR_CAST(struct sockaddr_in *, next->ai_addr)->sin_addr), &(CARES_INADDR_CAST(const struct sockaddr_in *, next->ai_addr)->sin_addr),
sizeof(struct in_addr)); sizeof(struct in_addr));
} }
(*naddrttls)++; (*naddrttls)++;

@ -473,7 +473,7 @@ ares_status_t ares_event_configchg_init(ares_event_configchg_t **configchg,
continue; continue;
} }
pdns_configuration_notify_key = pdns_configuration_notify_key = (const char *(*)(void))
dlsym(handle, "dns_configuration_notify_key"); dlsym(handle, "dns_configuration_notify_key");
if (pdns_configuration_notify_key != NULL) { if (pdns_configuration_notify_key != NULL) {
break; break;

@ -102,13 +102,17 @@ static void ares_gethostbyname_callback(void *arg, int status, int timeouts,
void ares_gethostbyname(ares_channel_t *channel, const char *name, int family, void ares_gethostbyname(ares_channel_t *channel, const char *name, int family,
ares_host_callback callback, void *arg) ares_host_callback callback, void *arg)
{ {
const struct ares_addrinfo_hints hints = { ARES_AI_CANONNAME, family, 0, 0 }; struct ares_addrinfo_hints hints;
struct host_query *ghbn_arg; struct host_query *ghbn_arg;
if (!callback) { if (!callback) {
return; return;
} }
memset(&hints, 0, sizeof(hints));
hints.ai_flags = ARES_AI_CANONNAME;
hints.ai_family = family;
ghbn_arg = ares_malloc(sizeof(*ghbn_arg)); ghbn_arg = ares_malloc(sizeof(*ghbn_arg));
if (!ghbn_arg) { if (!ghbn_arg) {
callback(arg, ARES_ENOMEM, 0, NULL); callback(arg, ARES_ENOMEM, 0, NULL);

@ -100,11 +100,11 @@ static void ares_getnameinfo_int(ares_channel_t *channel,
/* Validate socket address family and length */ /* Validate socket address family and length */
if (sa && sa->sa_family == AF_INET && if (sa && sa->sa_family == AF_INET &&
salen >= (ares_socklen_t)sizeof(struct sockaddr_in)) { salen >= (ares_socklen_t)sizeof(struct sockaddr_in)) {
addr = CARES_INADDR_CAST(struct sockaddr_in *, sa); addr = CARES_INADDR_CAST(const struct sockaddr_in *, sa);
port = addr->sin_port; port = addr->sin_port;
} else if (sa && sa->sa_family == AF_INET6 && } else if (sa && sa->sa_family == AF_INET6 &&
salen >= (ares_socklen_t)sizeof(struct sockaddr_in6)) { salen >= (ares_socklen_t)sizeof(struct sockaddr_in6)) {
addr6 = CARES_INADDR_CAST(struct sockaddr_in6 *, sa); addr6 = CARES_INADDR_CAST(const struct sockaddr_in6 *, sa);
port = addr6->sin6_port; port = addr6->sin6_port;
} else { } else {
callback(arg, ARES_ENOTIMP, 0, NULL, NULL); callback(arg, ARES_ENOTIMP, 0, NULL, NULL);

@ -41,7 +41,7 @@
* warning: cast from 'const struct sockaddr *' to 'const struct sockaddr_in6 *' * warning: cast from 'const struct sockaddr *' to 'const struct sockaddr_in6 *'
* increases required alignment from 1 to 4 [-Wcast-align] * increases required alignment from 1 to 4 [-Wcast-align]
*/ */
#define CARES_INADDR_CAST(type, var) ((type)((void *)var)) #define CARES_INADDR_CAST(type, var) ((type)((const void *)var))
#if defined(USE_WINSOCK) #if defined(USE_WINSOCK)

@ -1222,14 +1222,14 @@ static ares_bool_t same_address(const struct sockaddr *sa,
switch (aa->family) { switch (aa->family) {
case AF_INET: case AF_INET:
addr1 = &aa->addr.addr4; addr1 = &aa->addr.addr4;
addr2 = &(CARES_INADDR_CAST(struct sockaddr_in *, sa))->sin_addr; addr2 = &(CARES_INADDR_CAST(const struct sockaddr_in *, sa))->sin_addr;
if (memcmp(addr1, addr2, sizeof(aa->addr.addr4)) == 0) { if (memcmp(addr1, addr2, sizeof(aa->addr.addr4)) == 0) {
return ARES_TRUE; /* match */ return ARES_TRUE; /* match */
} }
break; break;
case AF_INET6: case AF_INET6:
addr1 = &aa->addr.addr6; addr1 = &aa->addr.addr6;
addr2 = &(CARES_INADDR_CAST(struct sockaddr_in6 *, sa))->sin6_addr; addr2 = &(CARES_INADDR_CAST(const struct sockaddr_in6 *, sa))->sin6_addr;
if (memcmp(addr1, addr2, sizeof(aa->addr.addr6)) == 0) { if (memcmp(addr1, addr2, sizeof(aa->addr.addr6)) == 0) {
return ARES_TRUE; /* match */ return ARES_TRUE; /* match */
} }

@ -43,7 +43,7 @@
typedef enum { typedef enum {
ARES_RAND_OS = 1 << 0, /* OS-provided such as RtlGenRandom or arc4random */ ARES_RAND_OS = 1 << 0, /* OS-provided such as RtlGenRandom or arc4random */
ARES_RAND_FILE = 1 << 1, /* OS file-backed random number generator */ ARES_RAND_FILE = 1 << 1, /* OS file-backed random number generator */
ARES_RAND_RC4 = 1 << 2, /* Internal RC4 based PRNG */ ARES_RAND_RC4 = 1 << 2 /* Internal RC4 based PRNG */
} ares_rand_backend; } ares_rand_backend;
#define ARES_RC4_KEY_LEN 32 /* 256 bits */ #define ARES_RC4_KEY_LEN 32 /* 256 bits */

@ -45,6 +45,11 @@
* private header extracted from: * private header extracted from:
* https://opensource.apple.com/source/configd/configd-1109.140.1/dnsinfo/dnsinfo.h * https://opensource.apple.com/source/configd/configd-1109.140.1/dnsinfo/dnsinfo.h
*/ */
/* The apple header uses anonymous unions which came with C11 */
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wc11-extensions"
# include "ares_setup.h" # include "ares_setup.h"
# include <stdio.h> # include <stdio.h>
# include <stdlib.h> # include <stdlib.h>
@ -110,10 +115,10 @@ static ares_status_t dnsinfo_init(dnsinfo_t **dnsinfo_out)
continue; continue;
} }
dnsinfo->dns_configuration_copy = dnsinfo->dns_configuration_copy = (dns_config_t *(*)(void))
dlsym(dnsinfo->handle, "dns_configuration_copy"); dlsym(dnsinfo->handle, "dns_configuration_copy");
dnsinfo->dns_configuration_free = dnsinfo->dns_configuration_free = (void (*)(dns_config_t *))
dlsym(dnsinfo->handle, "dns_configuration_free"); dlsym(dnsinfo->handle, "dns_configuration_free");
if (dnsinfo->dns_configuration_copy != NULL && if (dnsinfo->dns_configuration_copy != NULL &&
@ -365,6 +370,7 @@ done:
} }
return status; return status;
} }
#pragma GCC diagnostic pop
#endif #endif

@ -113,12 +113,16 @@ static void free_config(adig_config_t *config)
static void print_help(void) static void print_help(void)
{ {
/* Split due to maximum c89 string literal of 509 bytes */
printf("adig version %s\n\n", ares_version(NULL)); printf("adig version %s\n\n", ares_version(NULL));
printf( printf(
"usage: adig [-h] [-d] [-f flag] [[-s server] ...] [-T|U port] [-c class]\n" "usage: adig [-h] [-d] [-f flag] [[-s server] ...] [-T|U port] [-c class]\n"
" [-t type] name ...\n\n" " [-t type] name ...\n\n");
" -h : Display this help and exit.\n" printf(
" -d : Print some extra debugging output.\n" " -h : Display this help and exit.\n");
printf(
" -d : Print some extra debugging output.\n");
printf(
" -f flag : Add a behavior control flag. Possible values are\n" " -f flag : Add a behavior control flag. Possible values are\n"
" igntc - do not retry a truncated query as TCP, just\n" " igntc - do not retry a truncated query as TCP, just\n"
" return the truncated answer\n" " return the truncated answer\n"
@ -127,21 +131,26 @@ static void print_help(void)
" norecurse - don't query upstream servers recursively\n" " norecurse - don't query upstream servers recursively\n"
" primary - use the first server\n" " primary - use the first server\n"
" stayopen - don't close the communication sockets\n" " stayopen - don't close the communication sockets\n"
" usevc - use TCP only\n" " usevc - use TCP only\n");
printf(
" -s server : Connect to the specified DNS server, instead of the\n" " -s server : Connect to the specified DNS server, instead of the\n"
" system's default one(s). Servers are tried in round-robin,\n" " system's default one(s). Servers are tried in round-robin,\n"
" if the previous one failed.\n" " if the previous one failed.\n");
" -T port : Connect to the specified TCP port of DNS server.\n" printf(
" -U port : Connect to the specified UDP port of DNS server.\n" " -T port : Connect to the specified TCP port of DNS server.\n");
printf(
" -U port : Connect to the specified UDP port of DNS server.\n");
printf(
" -c class : Set the query class. Possible values for class are:\n" " -c class : Set the query class. Possible values for class are:\n"
" ANY, CHAOS, HS and IN (default)\n" " ANY, CHAOS, HS and IN (default)\n");
printf(
" -t type : Query records of the specified type. Possible values for\n" " -t type : Query records of the specified type. Possible values for\n"
" type are:\n" " type are:\n"
" A (default), AAAA, ANY, CNAME, HINFO, MX, NAPTR, NS, PTR,\n" " A (default), AAAA, ANY, CNAME, HINFO, MX, NAPTR, NS, PTR,\n"
" SOA, SRV, TXT, TLSA, URI, CAA, SVCB, HTTPS\n\n"); " SOA, SRV, TXT, TLSA, URI, CAA, SVCB, HTTPS\n\n");
} }
static ares_bool_t read_cmdline(int argc, const char **argv, static ares_bool_t read_cmdline(int argc, const char * const * argv,
adig_config_t *config) adig_config_t *config)
{ {
ares_getopt_state_t state; ares_getopt_state_t state;
@ -897,7 +906,7 @@ int main(int argc, char **argv)
memset(&config, 0, sizeof(config)); memset(&config, 0, sizeof(config));
config.qclass = ARES_CLASS_IN; config.qclass = ARES_CLASS_IN;
config.qtype = ARES_REC_TYPE_A; config.qtype = ARES_REC_TYPE_A;
if (!read_cmdline(argc, (const char **)argv, &config)) { if (!read_cmdline(argc, (const char * const *)argv, &config)) {
printf("\n** ERROR: %s\n\n", config.error); printf("\n** ERROR: %s\n\n", config.error);
print_help(); print_help();
rv = 1; rv = 1;

@ -95,7 +95,7 @@ int main(int argc, char **argv)
return 1; return 1;
} }
ares_getopt_init(&state, argc, (const char **)argv); ares_getopt_init(&state, argc, (const char * const *)argv);
while ((c = ares_getopt(&state, "dt:h?D:s:")) != -1) { while ((c = ares_getopt(&state, "dt:h?D:s:")) != -1) {
switch (c) { switch (c) {
case 'd': case 'd':
@ -276,18 +276,22 @@ static void usage(void)
/* Information from the man page. Formatting taken from man -h */ /* Information from the man page. Formatting taken from man -h */
static void print_help_info_ahost(void) static void print_help_info_ahost(void)
{ {
/* Split due to maximum c89 string literal of 509 bytes */
printf("ahost, version %s\n\n", ARES_VERSION_STR); printf("ahost, version %s\n\n", ARES_VERSION_STR);
printf( printf(
"usage: ahost [-h] [-d] [-D domain] [-s server] [-t a|aaaa|u] host|addr " "usage: ahost [-h] [-d] [-D domain] [-s server] [-t a|aaaa|u] host|addr "
"...\n\n" "...\n\n");
printf(
" -h : Display this help and exit.\n" " -h : Display this help and exit.\n"
" -d : Print some extra debugging output.\n\n" " -d : Print some extra debugging output.\n\n"
" -D domain : Specify the domain to search instead of using the default " " -D domain : Specify the domain to search instead of using the default "
"values\n" "values\n");
printf(
" -s server : Connect to the specified DNS server, instead of the\n" " -s server : Connect to the specified DNS server, instead of the\n"
" system's default one(s). Servers are tried in round-robin,\n" " system's default one(s). Servers are tried in round-robin,\n"
" if the previous one failed.\n" " if the previous one failed.\n"
" -t type : If type is \"a\", print the A record.\n" " -t type : If type is \"a\", print the A record.\n");
printf(
" If type is \"aaaa\", print the AAAA record.\n" " If type is \"aaaa\", print the AAAA record.\n"
" If type is \"u\" (default), print both A and AAAA records.\n" " If type is \"u\" (default), print both A and AAAA records.\n"
"\n"); "\n");

@ -47,9 +47,9 @@
#define BADCH (int)'?' #define BADCH (int)'?'
#define BADARG (int)':' #define BADARG (int)':'
#define EMSG (char *)"" #define EMSG ""
void ares_getopt_init(ares_getopt_state_t *state, int nargc, const char **nargv) void ares_getopt_init(ares_getopt_state_t *state, int nargc, const char * const * nargv)
{ {
memset(state, 0, sizeof(*state)); memset(state, 0, sizeof(*state));
state->opterr = 1; state->opterr = 1;

@ -40,10 +40,10 @@ typedef struct {
int optopt; /* character checked for validity */ int optopt; /* character checked for validity */
const char *place; const char *place;
int argc; int argc;
const char **argv; const char * const *argv;
} ares_getopt_state_t; } ares_getopt_state_t;
void ares_getopt_init(ares_getopt_state_t *state, int argc, const char **argv); void ares_getopt_init(ares_getopt_state_t *state, int argc, const char * const * argv);
int ares_getopt(ares_getopt_state_t *state, const char *ostr); int ares_getopt(ares_getopt_state_t *state, const char *ostr);
#endif /* ARES_GETOPT_H */ #endif /* ARES_GETOPT_H */

Loading…
Cancel
Save