1
0
mirror of https://https.git.savannah.gnu.org/git/gnulib.git synced 2026-09-01 02:34:55 +00:00

28 Commits

Author SHA1 Message Date
Bruno Haible ddb55b0d7d error: Restore library name-spacing of verror_at_line.
* lib/error.in.h (verror_at_line): Don't define as a macro if
_GL_NO_INLINE_ERROR is defined.
2026-05-12 11:39:58 +02:00
Bruno Haible aa9ab93e4e error-h: Support multiple gnulib-tool invocations in the same package.
* lib/error.in.h (GNULIB_defined_error, GNULIB_defined_error_at_line):
New macros.
(verror): Test GNULIB_defined_verror, for consistency with the idiom.
(verror_at_line): Test GNULIB_defined_verror_at_line, for consistency
with the idiom.
2026-04-29 01:52:17 +02:00
Bruno Haible 3210d2f2c6 error-h: Don't stump on the system namespace.
* lib/error.in.h (_gl_error_call1): Renamed from __gl_error_call1.
(_gl_error_call): Renamed from __gl_error_call.
2026-03-08 15:27:28 +01:00
Collin Funk a8482ceecf maint: run 'make update-copyright' 2026-01-01 10:37:05 -08:00
Bruno Haible df7978ac7f stddef-h: Fix compilation errors in C++ mode (regression 2025-05-27).
* m4/stddef_h.m4 (gl_STDDEF_H): Set and substitute HAVE_C_UNREACHABLE.
Don't test for unreachable in <stddef.h> in C++. Set
GL_GENERATE_STDDEF_H to true always.
* lib/stddef.in.h (gl_unreachable): Renamed from _gl_unreachable. Test
HAVE_C_UNREACHABLE.
(unreachable): Don't define in C++ mode. Don't define if
HAVE_C_UNREACHABLE is 1.
* modules/stddef-h (Makefile.am): Substitute HAVE_C_UNREACHABLE.
* tests/test-stddef-h.c (test_unreachable_optimization,
test_unreachable_noreturn): Don't define in C++ mode.
(test_gl_unreachable_optimization, test_gl_unreachable_noreturn): New
functions.
* tests/test-stddef-h-c++3.cc (test_cxx_unreachable_1): Test
gl_unreachable instead of unreachable.
* lib/error.in.h (__gl_error_call1): Use gl_unreachable instead of
unreachable.
2025-06-02 18:43:34 +02:00
Pádraig Brady 7b08932179 maint: run 'make update-copyright' 2025-01-01 09:25:10 +00:00
Paul Eggert cf96562feb Don’t port July [[...]] changes to C89
Yesterday’s changes to port to C17 and earlier were intrusive,
since they twice replaced one macro with two.  Revert the macro
definitions to what they were before yesterday, and instead change
callers so that they always have four arguments even if the last
one is empty.  Although this change requires C99 or later, that’s
safe nowadays.  Suggested by Bruno Haible in:
https://lists.gnu.org/r/bug-gnulib/2024-09/msg00079.html
* lib/c++defs.h (_GL_FUNCDECL_RPL, _GL_FUNCDECL_SYS):
Revert yesterday’s changes.  All callers changed.
Add comments explaining the required comma before missing attrs.
2024-09-16 09:48:06 -07:00
Paul Eggert 4531edcf05 Port July changes for [[...]] to C17
The July 30 changes to _GL_FUNCDECL_RPL etc. to support use of
attributes in bracket syntax used a C23 preprocessor feature that is
a common extension to C17 and earlier, but which doesn’t work when
compiled with stricter C17-and-earlier compilers.  The feature is
using ‘#define f(a, ...) b’ and calling ‘f’ with only one arg.
Port back to C17 and earlier.  Problem discovered with
IBM XL C/C++ for AIX, V12.1 (5765-J02, 5725-C72) on cfarm111.
* lib/c++defs.h (_GL_FUNCDECL_RPL): Turn this into two macros
_GL_FUNCDECL_RPL and _GL_FUNCATTR_RPL.  The first macro is for
functions without attributes, the second one for functions with
attributes.  All uses changed.
(_GL_FUNCDECL_SYS): Likewise, turn this into _GL_FUNCDECL_SYS
and _GL_FUNCATTR_SYS.
2024-09-15 21:23:13 -07:00
Paul Eggert 48384fd1c6 verror: allow library name-spacing of verror
Problem reported by Bruno Haible in:
https://lists.gnu.org/r/bug-gnulib/2024-08/msg00085.html
* lib/error.c (verror, verror_at_line) [!_LIBC]: #undef only if
the corresponding GNULIB_defined_... macros are defined.
* lib/error.in.h (verror, verror_with_line):
Don't define as macros if they are already defined, or if
_GL_NO_INLINE_ERROR is defined.  This may lose some niceties with GCC
warnings, but the code’s valid.
2024-08-14 20:13:24 -07:00
Paul Eggert 959152ba37 error: merge from glibc and with verror
* lib/error.c: Merge changes since 2018 from glibc.
----- The following changes are taken from glibc:
(__error_internal, __error_at_line_internal): New functions,
with most of the old error and error_at_line_internal but
with va_list and with a new trailing mode_args,
for wide character mode.
(error_tail): Add trailing arg.
(error_tail, __error_internal, __error_at_line_internal):
Redo _LIBC implementation with respect to cancelation.
[_LIBC]: Include <libc-lock.h>, not <bits/libc-lock.h>.
----- The following changes are specific to Gnulib:
(__error_internal, __error_at_line_internal, error_tail) [!_LIBC]:
Use macros to define away the new trailing arg, and to name
the internal functions to verror and verror_at_line.
(verror, verror_at_line) [!_LIBC]: Undef so that we omit
the __gl_error_call business when defining these functions.
* lib/error.in.h: Include stdarg.h.
(verror, verror_at_line): New decls and macros.
* m4/error_h.m4 ([gl_ERROR_H]): Always compile error.c if
the verror module is also present.
* modules/verror (Files, lib_SOURCES):
Remove lib/verror.h, lib/verror.c.
(Depends-on): Remove stdio, xvasprintf.
(configure.ac-early): Define gl_HAVE_MODULE_VERROR so that
the error module compiles error.c.  Not sure if this is the
standard way to do this, but it seems to work.
* modules/verror (Include), tests/test-verror.c:
Include error.h, not verror.h.
2024-08-14 18:04:40 -07:00
Paul Eggert 5bdbf2b205 error: it’s cold
This mimics what glibc is doing nowadays.
* lib/error.in.h (error, error_at_line):
* lib/verror.h (verror, verror_at_line):
Declare with _GL_ATTRIBUTE_CODE.
2024-08-14 18:04:40 -07:00
Bruno Haible 513ef3260b Reenable use of attributes in bracket syntax [[...]] (regr. yesterday).
* m4/gnulib-common.m4 (gl_COMMON_BODY): Add more comments. Don't define
_GL_BRACKET_USABLE.
* lib/c++defs.h (_GL_EXTERN_C_FUNC): New macro.
(_GL_FUNCDECL_RPL, _GL_FUNCDECL_RPL_1, _GL_FUNCDECL_SYS): Expect the
attributes in an optional 4th argument. Expand them before the return
type.
* lib/arpa_inet.in.h: Update all _GL_FUNCDECL_RPL and _GL_FUNCDECL_SYS
invocations.
* lib/dirent.in.h: Likewise.
* lib/error.in.h: Likewise.
* lib/fcntl.in.h: Likewise.
* lib/fnmatch.in.h: Likewise.
* lib/glob.in.h: Likewise.
* lib/iconv.in.h: Likewise.
* lib/inttypes.in.h: Likewise.
* lib/locale.in.h: Likewise.
* lib/malloc.in.h: Likewise.
* lib/math.in.h: Likewise.
* lib/monetary.in.h: Likewise.
* lib/netdb.in.h: Likewise.
* lib/pthread.in.h: Likewise.
* lib/search.in.h: Likewise.
* lib/signal.in.h: Likewise.
* lib/spawn.in.h: Likewise.
* lib/stdio.in.h: Likewise.
* lib/stdlib.in.h: Likewise.
* lib/string.in.h: Likewise.
* lib/sys_random.in.h: Likewise.
* lib/sys_resource.in.h: Likewise.
* lib/sys_socket.in.h: Likewise.
* lib/sys_stat.in.h: Likewise.
* lib/sys_time.in.h: Likewise.
* lib/threads.in.h: Likewise.
* lib/time.in.h: Likewise.
* lib/uchar.in.h: Likewise.
* lib/unistd.in.h: Likewise.
* lib/utime.in.h: Likewise.
* lib/wchar.in.h: Likewise.
* lib/wctype.in.h: Likewise.
* lib/c-vasprintf.h (c_aszprintf, c_vaszprintf, c_asprintf,
c_vasprintf): Move _GL_ATTRIBUTE_NODISCARD back to the beginning of the
declaration.
2024-07-30 21:33:02 +02:00
Bruno Haible 99b6e70f16 error-h: Avoid namespace pollution on mingw.
* lib/error.in.h: Don't include mingw's <error.h>.
2024-05-11 23:21:08 +02:00
Simon Josefsson 5b92dd0a45 maint: run 'make update-copyright' 2024-01-01 10:31:48 +01:00
Bruno Haible 835209cfdb Use statement-expressions without warnings, even in strict ISO C mode.
Suggested by Eric Blake <eblake@redhat.com> in
<https://lists.gnu.org/archive/html/bug-gnulib/2023-09/msg00025.html>.

* lib/error.in.h (__gl_error_call): Use the variant with obvious control
flow also with clang. Use '__extension__' to avoid -Wpedantic warnings.
* lib/math.in.h (gl_signbitf, gl_signbitd, gl_signbitl): Define as
macros even when __STRICT_ANSI__ is defined. But use '__extension__' to
avoid -Wpedantic warnings.
* lib/setenv.c (KNOWN_VALUE): Use '__extension__' to avoid -Wpedantic
warnings.
* lib/xalloc-oversized.h (xalloc_oversized): Use optimized variant even
when __STRICT_ANSI__ is defined. But use '__extension__' to avoid
-Wpedantic warnings.
2023-09-04 21:54:09 +02:00
Bruno Haible 4b11de31a3 error: Fix support for library namespacing (regression 2023-05-27).
* lib/error.in.h (error): If error is defined as a macro, define a
static inline function _gl_inline_error that invokes it, and let the
new error macro invoke that function.
(error_at_line): If error_at_line is defined as a macro, define a static
inline function _gl_inline_error_at_line that invokes it, and let the
new error_at_line macro invoke that function.
2023-06-04 19:27:48 +02:00
Bruno Haible 11e2d84dc7 error: Improve comments.
* lib/error.in.h (__gl_error_call): Add more comments.
2023-06-03 11:59:59 +02:00
Paul Eggert cfd41b3ac1 error: do not evaluate status twice
Do this in a different way, so that the status is evaluated
once even when not optimizing and when using GCC.
* lib/error.in.h (__gl_error_call1) [__GNUC__]: New macro.
(__gl_error_call) [__GNUC__]: Use it.
2023-06-02 23:07:07 -07:00
Bruno Haible 26a6317569 error: Avoid implicit-fallthrough warnings with -O0 (regr. 2023-05-30).
* lib/error.in.h (__gl_error_call): Parenthesize status. When not
optimizing, expand to code without compound statements.
2023-06-02 20:02:45 +02:00
Paul Eggert 8bcd287398 error: fix typo in previous patch
* lib/error.in.h (error): Fix __VA_ARGS__ typo noted by
Bruno Haible.
2023-05-30 15:12:43 -07:00
Paul Eggert 47811d1ac2 error: don’t call ‘exit’
Let the underlying functions call ‘exit’, instead of having the
Gnulib replacement macros do it.  Use ‘unreachable’ to tell the
compiler that those functions exit when the status is nonzero.
This saves a function call.
* lib/error.in.h: Include stddef.h, not stdlib.h.
(__gl_error_call): Rely on the function to exit, using
‘unreachable’ to tell the compiler that the function does not return.
* modules/error (Depends-on): Add stddef.
2023-05-30 14:39:27 -07:00
Paul Eggert 8b21ff2559 error: don’t evaluate status arg twice
This avoids potential issues if the first argument has a side effect.
* lib/error.in.h (__gl_error_call): New macro, which evaluates its
status arg only once, by using a statement expression if GNU C -
the only platform we need to worry about pacifying - and by simply
calling ‘error’ otherwise.
(error, error_at_line): Use it.
2023-05-30 14:39:25 -07:00
Bruno Haible 4f7dce3fc2 error: Avoid -Wint-in-bool-context warning.
Reported by Pádraig Brady in
<https://lists.gnu.org/archive/html/bug-gnulib/2023-05/msg00178.html>.

* lib/error.in.h (error, error_at_line): Use 'status != 0', since status
is expected to be an int, not a bool value.
2023-05-28 15:18:06 +02:00
Bruno Haible 752f97e9af error: Support the compiler's control flow analysis better.
* lib/error.in.h: Remove @PRAGMA_SYSTEM_HEADER@. Include <stdlib.h>.
(error): Define as a macro that explicitly invokes exit().
(error_at_line): Likewise.
* lib/error.c (_GL_NO_INLINE_ERROR): Define before including error.h.
* modules/error-h (configure.ac): Don't invoke gl_CONDITIONAL_HEADER.
(Makefile.am): Generate error.h always. Don't substitute
PRAGMA_SYSTEM_HEADER.
* m4/error_h.m4 (gl_ERROR_H): Set COMPILE_ERROR_C instead of
GL_GENERATE_ERROR_H.
* modules/error (configure.ac, Depends-on): Test COMPILE_ERROR_C instead
of GL_GENERATE_ERROR_H.
* lib/copy-file.c: Revert the last change.
2023-05-27 22:39:59 +02:00
Bruno Haible 8ad7bc6714 Add more reminders to include <config.h>.
* m4/gnulib-common.m4 (gl_COMMON): In config.h, define
_GL_CONFIG_H_INCLUDED.
* lib/acl-internal.h: Test _GL_CONFIG_H_INCLUDED instead of
_GL_INLINE_HEADER_BEGIN.
* lib/alignalloc.h: Likewise.
* lib/argp-fmtstream.h: Likewise.
* lib/argp.h: Likewise.
* lib/binary-io.h: Likewise.
* lib/bitrotate.h: Likewise.
* lib/c-ctype.h: Likewise.
* lib/count-leading-zeros.h: Likewise.
* lib/count-one-bits.h: Likewise.
* lib/count-trailing-zeros.h: Likewise.
* lib/eealloc.h: Likewise.
* lib/execinfo.in.h: Likewise.
* lib/gethrxtime.h: Likewise.
* lib/gl_list.h: Likewise.
* lib/gl_map.h: Likewise.
* lib/gl_omap.h: Likewise.
* lib/gl_openssl.h: Likewise.
* lib/gl_oset.h: Likewise.
* lib/gl_set.h: Likewise.
* lib/gl_xlist.h: Likewise.
* lib/gl_xmap.h: Likewise.
* lib/gl_xomap.h: Likewise.
* lib/gl_xoset.h: Likewise.
* lib/gl_xset.h: Likewise.
* lib/gl_xsublist.h: Likewise.
* lib/glthread/cond.h: Likewise.
* lib/hamt.h: Likewise.
* lib/ialloc.h: Likewise.
* lib/math.in.h: Likewise.
* lib/mbchar.h: Likewise.
* lib/mbfile.h: Likewise.
* lib/mbiter.h: Likewise.
* lib/mbuiter.h: Likewise.
* lib/openat.h: Likewise.
* lib/pipe-filter-aux.h: Likewise.
* lib/priv-set.h: Likewise.
* lib/safe-alloc.h: Likewise.
* lib/savewd.h: Likewise.
* lib/se-context.in.h: Likewise.
* lib/se-label.in.h: Likewise.
* lib/se-selinux.in.h: Likewise.
* lib/sig-handler.h: Likewise.
* lib/stat-time.h: Likewise.
* lib/string-desc-quotearg.h: Likewise.
* lib/string-desc.h: Likewise.
* lib/sys_socket.in.h: Likewise.
* lib/timespec.h: Likewise.
* lib/u64.h: Likewise.
* lib/uchar.in.h: Likewise.
* lib/unistd.in.h: Likewise.
* lib/utimens.h: Likewise.
* lib/wctype.in.h: Likewise.
* lib/xalloc.h: Likewise.
* lib/xbinary-io.h: Likewise.
* lib/xsize.h: Likewise.
* lib/xstring-desc.h: Likewise.
* lib/xtime.h: Likewise.
* lib/acl.h: Check that config.h was already included.
* lib/alignof.h: Likewise.
* lib/argmatch.h: Likewise.
* lib/argv-iter.h: Likewise.
* lib/arpa_inet.in.h: Likewise.
* lib/attribute.h: Likewise.
* lib/backupfile.h: Likewise.
* lib/base32.h: Likewise.
* lib/base64.h: Likewise.
* lib/basename-lgpl.h: Likewise.
* lib/bitset.h: Likewise.
* lib/bitsetv.h: Likewise.
* lib/c-snprintf.h: Likewise.
* lib/c-stack.h: Likewise.
* lib/c-strcase.h: Likewise.
* lib/c-vasnprintf.h: Likewise.
* lib/c-vasprintf.h: Likewise.
* lib/c-vsnprintf.h: Likewise.
* lib/c-xvasprintf.h: Likewise.
* lib/canon-host.h: Likewise.
* lib/canonicalize.h: Likewise.
* lib/clean-temp.h: Likewise.
* lib/concat-filename.h: Likewise.
* lib/ctype.in.h: Likewise.
* lib/dfa.h: Likewise.
* lib/di-set.h: Likewise.
* lib/dirent-safer.h: Likewise.
* lib/dirent.in.h: Likewise.
* lib/dirname.h: Likewise.
* lib/eloop-threshold.h: Likewise.
* lib/error.in.h: Likewise.
* lib/exclude.h: Likewise.
* lib/fatal-signal.h: Likewise.
* lib/fcntl.in.h: Likewise.
* lib/file-type.h: Likewise.
* lib/filenamecat.h: Likewise.
* lib/filevercmp.h: Likewise.
* lib/flexmember.h: Likewise.
* lib/fnmatch.in.h: Likewise.
* lib/fpending.h: Likewise.
* lib/freadable.h: Likewise.
* lib/freadahead.h: Likewise.
* lib/freading.h: Likewise.
* lib/fts_.h: Likewise.
* lib/fwritable.h: Likewise.
* lib/fwriting.h: Likewise.
* lib/gc.h: Likewise.
* lib/get_progname_of.h: Likewise.
* lib/glob.in.h: Likewise.
* lib/glthread/thread.h: Likewise.
* lib/hash-pjw-bare.h: Likewise.
* lib/hash-pjw.h: Likewise.
* lib/hash-triple.h: Likewise.
* lib/hash.h: Likewise.
* lib/i-ring.h: Likewise.
* lib/iconv.in.h: Likewise.
* lib/ino-map.h: Likewise.
* lib/inttostr.h: Likewise.
* lib/inttypes.in.h: Likewise.
* lib/javaversion.h: Likewise.
* lib/langinfo.in.h: Likewise.
* lib/locale.in.h: Likewise.
* lib/localename.h: Likewise.
* lib/malloc.in.h: Likewise.
* lib/malloca.h: Likewise.
* lib/memcasecmp.h: Likewise.
* lib/memchr2.h: Likewise.
* lib/memcmp2.h: Likewise.
* lib/modechange.h: Likewise.
* lib/monetary.in.h: Likewise.
* lib/mountlist.h: Likewise.
* lib/netdb.in.h: Likewise.
* lib/obstack.h: Likewise.
* lib/opendirat.h: Likewise.
* lib/pagealign_alloc.h: Likewise.
* lib/pipe-filter.h: Likewise.
* lib/poll.in.h: Likewise.
* lib/pthread.in.h: Likewise.
* lib/pty.in.h: Likewise.
* lib/quotearg.h: Likewise.
* lib/read-file.h: Likewise.
* lib/readline.h: Likewise.
* lib/readutmp.h: Likewise.
* lib/regex-quote.h: Likewise.
* lib/relocatable.h: Likewise.
* lib/savedir.h: Likewise.
* lib/sched.in.h: Likewise.
* lib/search.in.h: Likewise.
* lib/sh-quote.h: Likewise.
* lib/signal.in.h: Likewise.
* lib/sigpipe-die.h: Likewise.
* lib/sockets.h: Likewise.
* lib/spawn.in.h: Likewise.
* lib/ssfmalloc.h: Likewise.
* lib/stack.h: Likewise.
* lib/stdalign.in.h: Likewise.
* lib/stdarg.in.h: Likewise.
* lib/stddef.in.h: Likewise.
* lib/stdio-safer.h: Likewise.
* lib/stdio.in.h: Likewise.
* lib/stdlib.in.h: Likewise.
* lib/stdnoreturn.in.h: Likewise.
* lib/strerror-override.h: Likewise.
* lib/striconv.h: Likewise.
* lib/striconveh.h: Likewise.
* lib/striconveha.h: Likewise.
* lib/string-buffer.h: Likewise.
* lib/string.in.h: Likewise.
* lib/strings.in.h: Likewise.
* lib/strnlen1.h: Likewise.
* lib/sys_file.in.h: Likewise.
* lib/sys_ioctl.in.h: Likewise.
* lib/sys_random.in.h: Likewise.
* lib/sys_resource.in.h: Likewise.
* lib/sys_select.in.h: Likewise.
* lib/sys_stat.in.h: Likewise.
* lib/sys_time.in.h: Likewise.
* lib/sys_times.in.h: Likewise.
* lib/sys_utsname.in.h: Likewise.
* lib/sys_wait.in.h: Likewise.
* lib/system-quote.h: Likewise.
* lib/term-style-control.h: Likewise.
* lib/termios.in.h: Likewise.
* lib/textstyle.in.h: Likewise.
* lib/threads.in.h: Likewise.
* lib/time.in.h: Likewise.
* lib/trim.h: Likewise.
* lib/utime.in.h: Likewise.
* lib/utmp.in.h: Likewise.
* lib/vasnprintf.h: Likewise.
* lib/verror.h: Likewise.
* lib/version-etc.h: Likewise.
* lib/wchar.in.h: Likewise.
* lib/windows-spawn.h: Likewise.
* lib/windows-thread.h: Likewise.
* lib/xgetcwd.h: Likewise.
* lib/xgetdomainname.h: Likewise.
* lib/xgethostname.h: Likewise.
* lib/xmalloca.h: Likewise.
* lib/xmemdup0.h: Likewise.
* lib/xprintf.h: Likewise.
* lib/xreadlink.h: Likewise.
* lib/xstriconv.h: Likewise.
* lib/xstriconveh.h: Likewise.
* lib/xstrndup.h: Likewise.
* lib/xstrtol-error.h: Likewise.
* lib/xvasprintf.h: Likewise.
* Makefile (config_h_MACROS*): New variables.
(sc_check_config_h_reminder): New rule.
2023-04-12 19:37:37 +02:00
Bruno Haible 8e3b4ac39b error-h: Make less fragile.
* lib/error.in.h: Use #include_next if the system has an <error.h>. Use
a split double-inclusion guard.
* m4/error_h.m4 (gl_ERROR_H): Invoke gl_CHECK_NEXT_HEADERS. Set
HAVE_ERROR_H.
* modules/error-h (Makefile.am): Substitute GUARD_PREFIX, HAVE_ERROR_H,
INCLUDE_NEXT, PRAGMA_SYSTEM_HEADER, NEXT_ERROR_H.
2023-02-11 21:12:00 +01:00
Bruno Haible eaf067b33e Resolve conflicts for functions introduced in Android API level 23.
* m4/error_h.m4 (gl_ERROR_H): Conditionally set REPLACE_ERROR.
* lib/error.in.h (error): Disable _GL_CXXALIASWARN invocation on
non-glibc systems.
2023-01-22 15:57:00 +01:00
Bruno Haible 2886cca839 error: Work around an Android problem.
* lib/error.in.h: Renamed from lib/error.h.
(_GL_ATTRIBUTE_SPEC_PRINTF_ERROR): New macro.
(error): Consider HAVE_ERROR and REPLACE_ERROR.
(error_at_line): Consider HAVE_ERROR_AT_LINE and REPLACE_ERROR_AT_LINE.
* m4/error_h.m4: New file, partially based on m4/error.m4.
* m4/error.m4 (gl_ERROR): Remove the test for error_at_line.
* modules/error-h: New file.
* modules/error (Files): Remove lib/error.h.
(Depends-on): Add error-h. Update conditions.
(configure.ac): Require gl_ERROR_H. Update condition.
* doc/glibc-headers/error.texi: Mention the 'error-h' module.
* doc/glibc-functions/error.texi: Mention the Android problem.
* config/srclist.txt: Add comment regarding error.h.
2023-01-12 16:51:15 +01:00