From: Bruno Haible Date: Sat, 7 Aug 2021 21:30:53 +0000 (+0200) Subject: xgetdomainname: Ensure .c file starts with '#include '. X-Git-Tag: v1.0~2683 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=9af2d6c99c9353a4160c99d84134330c1beab246;p=gnulib.git xgetdomainname: Ensure .c file starts with '#include '. * lib/xgetaname-impl.h: New file, based on lib/xgethostname.c. * lib/xgethostname.c: Move implementation to lib/xgetaname-impl.h. * lib/xgetdomainname.c: Include . Include xgetaname-impl.h instead of xgethostname.c. * modules/xgethostname (Files): Add lib/xgetaname-impl.h. * modules/xgetdomainname (Files): Likewise. (Depends-on): Remove xgethostname. Add free-posix, xalloc. --- diff --git a/ChangeLog b/ChangeLog index 8e3707f046..9073c377f2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2021-08-07 Bruno Haible + + xgetdomainname: Ensure .c file starts with '#include '. + * lib/xgetaname-impl.h: New file, based on lib/xgethostname.c. + * lib/xgethostname.c: Move implementation to lib/xgetaname-impl.h. + * lib/xgetdomainname.c: Include . Include xgetaname-impl.h + instead of xgethostname.c. + * modules/xgethostname (Files): Add lib/xgetaname-impl.h. + * modules/xgetdomainname (Files): Likewise. + (Depends-on): Remove xgethostname. Add free-posix, xalloc. + 2021-08-07 Bruno Haible xstrndup: Improve GCC 11 allocation-deallocation checking. diff --git a/lib/xgetaname-impl.h b/lib/xgetaname-impl.h new file mode 100644 index 0000000000..ce6200025f --- /dev/null +++ b/lib/xgetaname-impl.h @@ -0,0 +1,63 @@ +/* xgetaname-impl.c -- common implementation of xgethostname and xgetdomainname + + Copyright (C) 1992, 1996, 2000-2001, 2003-2006, 2009-2021 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* written by Jim Meyering and Paul Eggert */ + +#include +#include +#include +#include + +#include "xalloc.h" + +/* Return the current host or domain name in malloc'd storage. + If malloc fails, exit. + Upon any other failure, return NULL and set errno. */ +char * +XGETANAME (void) +{ + char buf[100]; + idx_t size = sizeof buf; + char *name = buf; + char *alloc = NULL; + + while (1) + { + /* Use SIZE_1 here rather than SIZE to work around the bug in + SunOS 5.5's gethostname whereby it NUL-terminates HOSTNAME + even when the name is as long as the supplied buffer. */ + idx_t size_1 = size - 1; + name[size_1] = '\0'; + errno = 0; + if (GETANAME (name, size_1) == 0) + { + /* Check whether the name was possibly truncated; POSIX does not + specify whether a truncated name is null-terminated. */ + idx_t actual_size = strlen (name) + 1; + if (actual_size < size_1) + return alloc ? alloc : ximemdup (name, actual_size); + errno = 0; + } + free (alloc); + if (errno != 0 && errno != ENAMETOOLONG && errno != EINVAL + /* macOS/Darwin does this when SIZE_1 is too small. */ + && errno != ENOMEM) + return NULL; + name = alloc = xpalloc (NULL, &size, 1, -1, 1); + } +} diff --git a/lib/xgetdomainname.c b/lib/xgetdomainname.c index c854dd3840..08ba7fadc7 100644 --- a/lib/xgetdomainname.c +++ b/lib/xgetdomainname.c @@ -15,8 +15,11 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +#include + +/* Specification. */ #include "xgetdomainname.h" #define GETANAME getdomainname #define XGETANAME xgetdomainname -#include "xgethostname.c" +#include "xgetaname-impl.h" diff --git a/lib/xgethostname.c b/lib/xgethostname.c index 84c2f279bb..69dd857a9c 100644 --- a/lib/xgethostname.c +++ b/lib/xgethostname.c @@ -20,53 +20,9 @@ #include -#ifndef GETANAME /* Specification. */ -# include "xgethostname.h" -# define GETANAME gethostname -# define XGETANAME xgethostname -#endif +#include "xgethostname.h" -#include -#include -#include -#include - -#include "xalloc.h" - -/* Return the current host or domain name in malloc'd storage. - If malloc fails, exit. - Upon any other failure, return NULL and set errno. */ -char * -XGETANAME (void) -{ - char buf[100]; - idx_t size = sizeof buf; - char *name = buf; - char *alloc = NULL; - - while (1) - { - /* Use SIZE_1 here rather than SIZE to work around the bug in - SunOS 5.5's gethostname whereby it NUL-terminates HOSTNAME - even when the name is as long as the supplied buffer. */ - idx_t size_1 = size - 1; - name[size_1] = '\0'; - errno = 0; - if (GETANAME (name, size_1) == 0) - { - /* Check whether the name was possibly truncated; POSIX does not - specify whether a truncated name is null-terminated. */ - idx_t actual_size = strlen (name) + 1; - if (actual_size < size_1) - return alloc ? alloc : ximemdup (name, actual_size); - errno = 0; - } - free (alloc); - if (errno != 0 && errno != ENAMETOOLONG && errno != EINVAL - /* macOS/Darwin does this when SIZE_1 is too small. */ - && errno != ENOMEM) - return NULL; - name = alloc = xpalloc (NULL, &size, 1, -1, 1); - } -} +#define GETANAME gethostname +#define XGETANAME xgethostname +#include "xgetaname-impl.h" diff --git a/modules/xgetdomainname b/modules/xgetdomainname index c1417c8ef6..ec68362089 100644 --- a/modules/xgetdomainname +++ b/modules/xgetdomainname @@ -4,10 +4,12 @@ Return machine's domainname, without size limitations. Files: lib/xgetdomainname.h lib/xgetdomainname.c +lib/xgetaname-impl.h Depends-on: +free-posix getdomainname -xgethostname +xalloc configure.ac: diff --git a/modules/xgethostname b/modules/xgethostname index 846df1c004..ec25db0291 100644 --- a/modules/xgethostname +++ b/modules/xgethostname @@ -4,6 +4,7 @@ Return machine's hostname, without size limitations. Files: lib/xgethostname.h lib/xgethostname.c +lib/xgetaname-impl.h Depends-on: free-posix