Module Name: src Committed By: christos Date: Thu Feb 6 19:35:29 UTC 2025
Modified Files: src/usr.bin/getaddrinfo: Makefile getaddrinfo.c tables.awk Added Files: src/usr.bin/getaddrinfo: Makefile.inc support.c support.h Log Message: Split table functions to a separate file. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/usr.bin/getaddrinfo/Makefile \ src/usr.bin/getaddrinfo/tables.awk cvs rdiff -u -r0 -r1.1 src/usr.bin/getaddrinfo/Makefile.inc \ src/usr.bin/getaddrinfo/support.c src/usr.bin/getaddrinfo/support.h cvs rdiff -u -r1.5 -r1.6 src/usr.bin/getaddrinfo/getaddrinfo.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/getaddrinfo/Makefile diff -u src/usr.bin/getaddrinfo/Makefile:1.2 src/usr.bin/getaddrinfo/Makefile:1.3 --- src/usr.bin/getaddrinfo/Makefile:1.2 Mon Apr 28 21:21:02 2014 +++ src/usr.bin/getaddrinfo/Makefile Thu Feb 6 14:35:28 2025 @@ -1,22 +1,14 @@ -# $NetBSD: Makefile,v 1.2 2014/04/29 01:21:02 christos Exp $ +# $NetBSD: Makefile,v 1.3 2025/02/06 19:35:28 christos Exp $ .include <bsd.own.mk> +.include "Makefile.inc" PROG= getaddrinfo +SRCS= getaddrinfo.c support.c DPADD+= ${LIBUTIL} LDADD+= -lutil WARNS= 5 -SYS_SOCKET_H?= ${NETBSDSRCDIR}/sys/sys/socket.h - -CPPFLAGS+= -I. -DPSRCS+= tables.h -CLEANFILES+= tables.h -tables.h: tables.awk ${SYS_SOCKET_H} - ${_MKTARGET_CREATE} - ${TOOL_AWK} -f ${.ALLSRC} > ${.TARGET}.tmp \ - && mv -f -- ${.TARGET}.tmp ${.TARGET} - .include <bsd.prog.mk> Index: src/usr.bin/getaddrinfo/tables.awk diff -u src/usr.bin/getaddrinfo/tables.awk:1.2 src/usr.bin/getaddrinfo/tables.awk:1.3 --- src/usr.bin/getaddrinfo/tables.awk:1.2 Wed Feb 26 20:17:13 2014 +++ src/usr.bin/getaddrinfo/tables.awk Thu Feb 6 14:35:28 2025 @@ -1,6 +1,6 @@ #!/usr/bin/awk -f -# $NetBSD: tables.awk,v 1.2 2014/02/27 01:17:13 ginsbach Exp $ +# $NetBSD: tables.awk,v 1.3 2025/02/06 19:35:28 christos Exp $ # Copyright (c) 2013 The NetBSD Foundation, Inc. # All rights reserved. @@ -48,6 +48,7 @@ $2 ~ /^SOCK_[A-Z0-9_]*$/ { END { printf("/* Do not edit! This file was generated automagically! */\n"); + printf("#include <sys/socket.h>\n"); printf("\nstatic const char *const address_families[] = {\n"); for (i = 0; i < n_afs; i++) Index: src/usr.bin/getaddrinfo/getaddrinfo.c diff -u src/usr.bin/getaddrinfo/getaddrinfo.c:1.5 src/usr.bin/getaddrinfo/getaddrinfo.c:1.6 --- src/usr.bin/getaddrinfo/getaddrinfo.c:1.5 Tue Jan 9 20:48:16 2024 +++ src/usr.bin/getaddrinfo/getaddrinfo.c Thu Feb 6 14:35:28 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: getaddrinfo.c,v 1.5 2024/01/10 01:48:16 riastradh Exp $ */ +/* $NetBSD: getaddrinfo.c,v 1.6 2025/02/06 19:35:28 christos Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: getaddrinfo.c,v 1.5 2024/01/10 01:48:16 riastradh Exp $"); +__RCSID("$NetBSD: getaddrinfo.c,v 1.6 2025/02/06 19:35:28 christos Exp $"); #include <sys/types.h> #include <sys/socket.h> @@ -49,14 +49,10 @@ __RCSID("$NetBSD: getaddrinfo.c,v 1.5 20 #include <util.h> #include "tables.h" +#include "support.h" static void usage(void) __dead; static void printaddrinfo(struct addrinfo *); -static bool parse_af(const char *, int *); -static bool parse_protocol(const char *, int *); -static bool parse_socktype(const char *, int *); -static bool parse_numeric_tabular(const char *, int *, const char *const *, - size_t); int main(int argc, char **argv) @@ -64,7 +60,8 @@ main(int argc, char **argv) static const struct addrinfo zero_addrinfo; struct addrinfo hints = zero_addrinfo; struct addrinfo *addrinfo; - const char *hostname = NULL, *service = NULL; + const char *hostname = NULL; + char *service = NULL; int ch; int error; @@ -169,88 +166,6 @@ usage(void) exit(1); } -static bool -parse_af(const char *string, int *afp) -{ - - return parse_numeric_tabular(string, afp, address_families, - __arraycount(address_families)); -} - -static bool -parse_protocol(const char *string, int *protop) -{ - struct protoent *protoent; - char *end; - long value; - - errno = 0; - value = strtol(string, &end, 0); - if ((string[0] == '\0') || (*end != '\0')) - goto numeric_failed; - if ((errno == ERANGE) && ((value == LONG_MAX) || (value == LONG_MIN))) - goto numeric_failed; - if ((value > INT_MAX) || (value < INT_MIN)) - goto numeric_failed; - - *protop = value; - return true; - -numeric_failed: - protoent = getprotobyname(string); - if (protoent == NULL) - goto protoent_failed; - - *protop = protoent->p_proto; - return true; - -protoent_failed: - return false; -} - -static bool -parse_socktype(const char *string, int *typep) -{ - - return parse_numeric_tabular(string, typep, socket_types, - __arraycount(socket_types)); -} - -static bool -parse_numeric_tabular(const char *string, int *valuep, - const char *const *table, size_t n) -{ - char *end; - long value; - size_t i; - - assert((uintmax_t)n <= (uintmax_t)INT_MAX); - - errno = 0; - value = strtol(string, &end, 0); - if ((string[0] == '\0') || (*end != '\0')) - goto numeric_failed; - if ((errno == ERANGE) && ((value == LONG_MAX) || (value == LONG_MIN))) - goto numeric_failed; - if ((value > INT_MAX) || (value < INT_MIN)) - goto numeric_failed; - - *valuep = value; - return true; - -numeric_failed: - for (i = 0; i < n; i++) - if ((table[i] != NULL) && (strcmp(string, table[i]) == 0)) - break; - if (i == n) - goto table_failed; - *valuep = i; - return true; - -table_failed: - return false; -} - static void printaddrinfo(struct addrinfo *addrinfo) { Added files: Index: src/usr.bin/getaddrinfo/Makefile.inc diff -u /dev/null src/usr.bin/getaddrinfo/Makefile.inc:1.1 --- /dev/null Thu Feb 6 14:35:29 2025 +++ src/usr.bin/getaddrinfo/Makefile.inc Thu Feb 6 14:35:28 2025 @@ -0,0 +1,11 @@ +# $NetBSD: Makefile.inc,v 1.1 2025/02/06 19:35:28 christos Exp $ + +SYS_SOCKET_H?= ${NETBSDSRCDIR}/sys/sys/socket.h + +CPPFLAGS+= -I. +DPSRCS+= tables.h +CLEANFILES+= tables.h +tables.h: ${.PARSEDIR}/tables.awk ${SYS_SOCKET_H} + ${_MKTARGET_CREATE} + ${TOOL_AWK} -f ${.ALLSRC} > ${.TARGET}.tmp \ + && mv -f -- ${.TARGET}.tmp ${.TARGET} Index: src/usr.bin/getaddrinfo/support.c diff -u /dev/null src/usr.bin/getaddrinfo/support.c:1.1 --- /dev/null Thu Feb 6 14:35:29 2025 +++ src/usr.bin/getaddrinfo/support.c Thu Feb 6 14:35:28 2025 @@ -0,0 +1,114 @@ +/* $NetBSD: support.c,v 1.1 2025/02/06 19:35:28 christos Exp $ */ + +/*- + * Copyright (c) 2013 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Taylor R. Campbell. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: support.c,v 1.1 2025/02/06 19:35:28 christos Exp $"); + +#include <assert.h> +#include <limits.h> +#include <errno.h> +#include <netdb.h> +#include <stdbool.h> +#include <stdint.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include "tables.h" +#include "support.h" + +static bool +parse_numeric(const char *string, int *rv) +{ + char *end; + long value; + + errno = 0; + value = strtol(string, &end, 0); + if ((string[0] == '\0') || (*end != '\0')) + return false; + if ((errno == ERANGE) && ((value == LONG_MAX) || (value == LONG_MIN))) + return false; + if ((value > INT_MAX) || (value < INT_MIN)) + return false; + *rv = (int)value; + return true; +} + +bool +parse_af(const char *string, int *afp) +{ + + return parse_numeric_tabular(string, afp, address_families, + __arraycount(address_families)); +} + +bool +parse_protocol(const char *string, int *protop) +{ + struct protoent *protoent; + + if (parse_numeric(string, protop)) + return true; + + protoent = getprotobyname(string); + if (protoent == NULL) + return false; + + *protop = protoent->p_proto; + return true; +} + +bool +parse_socktype(const char *string, int *typep) +{ + + return parse_numeric_tabular(string, typep, socket_types, + __arraycount(socket_types)); +} + +bool +parse_numeric_tabular(const char *string, int *valuep, + const char *const *table, size_t n) +{ + + assert((uintmax_t)n <= (uintmax_t)INT_MAX); + + if (parse_numeric(string, valuep)) + return true; + + for (size_t i = 0; i < n; i++) + if ((table[i] != NULL) && (strcmp(string, table[i]) == 0)) { + *valuep = (int)i; + return true; + } + return false; +} Index: src/usr.bin/getaddrinfo/support.h diff -u /dev/null src/usr.bin/getaddrinfo/support.h:1.1 --- /dev/null Thu Feb 6 14:35:29 2025 +++ src/usr.bin/getaddrinfo/support.h Thu Feb 6 14:35:28 2025 @@ -0,0 +1,35 @@ +/* $NetBSD: support.h,v 1.1 2025/02/06 19:35:28 christos Exp $ */ + +/*- + * Copyright (c) 2013 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Taylor R. Campbell. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +bool parse_af(const char *, int *); +bool parse_protocol(const char *, int *); +bool parse_socktype(const char *, int *); +bool parse_numeric_tabular(const char *, int *, const char *const *, size_t);