From: Po Lu Date: Mon, 7 Aug 2023 00:14:38 +0000 (+0800) Subject: Update from Gnulib, remove printf-posix X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=76cac8ae6f600be34f83bd3aaf9b38355eab773e;p=emacs.git Update from Gnulib, remove printf-posix * m4, lib: Update from Gnulib. * msdos/sedlibmk.inp: Remove variables deleted as part of previous change. * admin/merge-gnulib (GNULIB_MODULES): Remove vasprintf and printf-posix. --- diff --git a/ChangeLog.android b/ChangeLog.android index 45d245336ec..54fbfc6e3b1 100644 --- a/ChangeLog.android +++ b/ChangeLog.android @@ -1,3 +1,13 @@ +2023-08-07 Po Lu + + * m4, lib: Update from Gnulib. + + * msdos/sedlibmk.inp: Remove variables deleted as part of previous + change. + + * admin/merge-gnulib (GNULIB_MODULES): Remove vasprintf and + printf-posix. + 2023-08-06 Po Lu * java/org/gnu/emacs/EmacsService.java (readDirectoryEntry): Fix diff --git a/admin/merge-gnulib b/admin/merge-gnulib index a0dbaae1519..b533f69cceb 100755 --- a/admin/merge-gnulib +++ b/admin/merge-gnulib @@ -42,7 +42,7 @@ GNULIB_MODULES=' manywarnings memmem-simple mempcpy memrchr memset_explicit minmax mkostemp mktime nanosleep nproc nstrftime - pathmax pipe2 printf-posix vasprintf-posix pselect pthread_sigmask + pathmax pipe2 pselect pthread_sigmask qcopy-acl readlink readlinkat regex sig2str sigdescr_np socklen stat-time std-gnu11 stdbool stdckdint stddef stdio stpcpy stpncpy strnlen strnlen strtoimax symlink sys_stat sys_time diff --git a/lib/asnprintf.c b/lib/asnprintf.c deleted file mode 100644 index f4861bf8457..00000000000 --- a/lib/asnprintf.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Formatted output to strings. - Copyright (C) 1999, 2002, 2006, 2009-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "vasnprintf.h" - -#include - -char * -asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) -{ - va_list args; - char *result; - - va_start (args, format); - result = vasnprintf (resultbuf, lengthp, format, args); - va_end (args); - return result; -} diff --git a/lib/asprintf.c b/lib/asprintf.c deleted file mode 100644 index ba58e06481f..00000000000 --- a/lib/asprintf.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Formatted output to strings. - Copyright (C) 1999, 2002, 2006-2007, 2009-2023 Free Software Foundation, - Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#ifdef IN_LIBASPRINTF -# include "vasprintf.h" -#else -# include -#endif - -#include - -int -asprintf (char **resultp, const char *format, ...) -{ - va_list args; - int result; - - va_start (args, format); - result = vasprintf (resultp, format, args); - va_end (args); - return result; -} diff --git a/lib/float+.h b/lib/float+.h deleted file mode 100644 index e7531e46a38..00000000000 --- a/lib/float+.h +++ /dev/null @@ -1,147 +0,0 @@ -/* Supplemental information about the floating-point formats. - Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc. - Written by Bruno Haible , 2007. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifndef _FLOATPLUS_H -#define _FLOATPLUS_H - -#include -#include - -/* Number of bits in the mantissa of a floating-point number, including the - "hidden bit". */ -#if FLT_RADIX == 2 -# define FLT_MANT_BIT FLT_MANT_DIG -# define DBL_MANT_BIT DBL_MANT_DIG -# define LDBL_MANT_BIT LDBL_MANT_DIG -#elif FLT_RADIX == 4 -# define FLT_MANT_BIT (FLT_MANT_DIG * 2) -# define DBL_MANT_BIT (DBL_MANT_DIG * 2) -# define LDBL_MANT_BIT (LDBL_MANT_DIG * 2) -#elif FLT_RADIX == 16 -# define FLT_MANT_BIT (FLT_MANT_DIG * 4) -# define DBL_MANT_BIT (DBL_MANT_DIG * 4) -# define LDBL_MANT_BIT (LDBL_MANT_DIG * 4) -#endif - -/* Bit mask that can be used to mask the exponent, as an unsigned number. */ -#define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7) -#define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) -#define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7) - -/* Number of bits used for the exponent of a floating-point number, including - the exponent's sign. */ -#define FLT_EXP_BIT \ - (FLT_EXP_MASK < 0x100 ? 8 : \ - FLT_EXP_MASK < 0x200 ? 9 : \ - FLT_EXP_MASK < 0x400 ? 10 : \ - FLT_EXP_MASK < 0x800 ? 11 : \ - FLT_EXP_MASK < 0x1000 ? 12 : \ - FLT_EXP_MASK < 0x2000 ? 13 : \ - FLT_EXP_MASK < 0x4000 ? 14 : \ - FLT_EXP_MASK < 0x8000 ? 15 : \ - FLT_EXP_MASK < 0x10000 ? 16 : \ - FLT_EXP_MASK < 0x20000 ? 17 : \ - FLT_EXP_MASK < 0x40000 ? 18 : \ - FLT_EXP_MASK < 0x80000 ? 19 : \ - FLT_EXP_MASK < 0x100000 ? 20 : \ - FLT_EXP_MASK < 0x200000 ? 21 : \ - FLT_EXP_MASK < 0x400000 ? 22 : \ - FLT_EXP_MASK < 0x800000 ? 23 : \ - FLT_EXP_MASK < 0x1000000 ? 24 : \ - FLT_EXP_MASK < 0x2000000 ? 25 : \ - FLT_EXP_MASK < 0x4000000 ? 26 : \ - FLT_EXP_MASK < 0x8000000 ? 27 : \ - FLT_EXP_MASK < 0x10000000 ? 28 : \ - FLT_EXP_MASK < 0x20000000 ? 29 : \ - FLT_EXP_MASK < 0x40000000 ? 30 : \ - FLT_EXP_MASK <= 0x7fffffff ? 31 : \ - 32) -#define DBL_EXP_BIT \ - (DBL_EXP_MASK < 0x100 ? 8 : \ - DBL_EXP_MASK < 0x200 ? 9 : \ - DBL_EXP_MASK < 0x400 ? 10 : \ - DBL_EXP_MASK < 0x800 ? 11 : \ - DBL_EXP_MASK < 0x1000 ? 12 : \ - DBL_EXP_MASK < 0x2000 ? 13 : \ - DBL_EXP_MASK < 0x4000 ? 14 : \ - DBL_EXP_MASK < 0x8000 ? 15 : \ - DBL_EXP_MASK < 0x10000 ? 16 : \ - DBL_EXP_MASK < 0x20000 ? 17 : \ - DBL_EXP_MASK < 0x40000 ? 18 : \ - DBL_EXP_MASK < 0x80000 ? 19 : \ - DBL_EXP_MASK < 0x100000 ? 20 : \ - DBL_EXP_MASK < 0x200000 ? 21 : \ - DBL_EXP_MASK < 0x400000 ? 22 : \ - DBL_EXP_MASK < 0x800000 ? 23 : \ - DBL_EXP_MASK < 0x1000000 ? 24 : \ - DBL_EXP_MASK < 0x2000000 ? 25 : \ - DBL_EXP_MASK < 0x4000000 ? 26 : \ - DBL_EXP_MASK < 0x8000000 ? 27 : \ - DBL_EXP_MASK < 0x10000000 ? 28 : \ - DBL_EXP_MASK < 0x20000000 ? 29 : \ - DBL_EXP_MASK < 0x40000000 ? 30 : \ - DBL_EXP_MASK <= 0x7fffffff ? 31 : \ - 32) -#define LDBL_EXP_BIT \ - (LDBL_EXP_MASK < 0x100 ? 8 : \ - LDBL_EXP_MASK < 0x200 ? 9 : \ - LDBL_EXP_MASK < 0x400 ? 10 : \ - LDBL_EXP_MASK < 0x800 ? 11 : \ - LDBL_EXP_MASK < 0x1000 ? 12 : \ - LDBL_EXP_MASK < 0x2000 ? 13 : \ - LDBL_EXP_MASK < 0x4000 ? 14 : \ - LDBL_EXP_MASK < 0x8000 ? 15 : \ - LDBL_EXP_MASK < 0x10000 ? 16 : \ - LDBL_EXP_MASK < 0x20000 ? 17 : \ - LDBL_EXP_MASK < 0x40000 ? 18 : \ - LDBL_EXP_MASK < 0x80000 ? 19 : \ - LDBL_EXP_MASK < 0x100000 ? 20 : \ - LDBL_EXP_MASK < 0x200000 ? 21 : \ - LDBL_EXP_MASK < 0x400000 ? 22 : \ - LDBL_EXP_MASK < 0x800000 ? 23 : \ - LDBL_EXP_MASK < 0x1000000 ? 24 : \ - LDBL_EXP_MASK < 0x2000000 ? 25 : \ - LDBL_EXP_MASK < 0x4000000 ? 26 : \ - LDBL_EXP_MASK < 0x8000000 ? 27 : \ - LDBL_EXP_MASK < 0x10000000 ? 28 : \ - LDBL_EXP_MASK < 0x20000000 ? 29 : \ - LDBL_EXP_MASK < 0x40000000 ? 30 : \ - LDBL_EXP_MASK <= 0x7fffffff ? 31 : \ - 32) - -/* Number of bits used for a floating-point number: the mantissa (not - counting the "hidden bit", since it may or may not be explicit), the - exponent, and the sign. */ -#define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1) -#define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1) -#define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1) - -/* Number of bytes used for a floating-point number. - This can be smaller than the 'sizeof'. For example, on i386 systems, - 'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence - LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but - sizeof (long double) = 12 or = 16. */ -#define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) -#define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) -#define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) - -/* Verify that SIZEOF_FLT <= sizeof (float) etc. */ -typedef int verify_sizeof_flt[SIZEOF_FLT <= sizeof (float) ? 1 : -1]; -typedef int verify_sizeof_dbl[SIZEOF_DBL <= sizeof (double) ? 1 : - 1]; -typedef int verify_sizeof_ldbl[SIZEOF_LDBL <= sizeof (long double) ? 1 : - 1]; - -#endif /* _FLOATPLUS_H */ diff --git a/lib/float.c b/lib/float.c deleted file mode 100644 index f81ff33d3b7..00000000000 --- a/lib/float.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Auxiliary definitions for . - Copyright (C) 2011-2023 Free Software Foundation, Inc. - Written by Bruno Haible , 2011. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include - -#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ -const union gl_long_double_union gl_LDBL_MAX = - { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } }; -#elif defined __i386__ -const union gl_long_double_union gl_LDBL_MAX = - { { 0xFFFFFFFF, 0xFFFFFFFF, 32766 } }; -#else -/* This declaration is solely to ensure that after preprocessing - this file is never empty. */ -typedef int dummy; -#endif diff --git a/lib/float.in.h b/lib/float.in.h deleted file mode 100644 index bf2c502c7f5..00000000000 --- a/lib/float.in.h +++ /dev/null @@ -1,194 +0,0 @@ -/* A correct . - - Copyright (C) 2007-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifndef _@GUARD_PREFIX@_FLOAT_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_FLOAT_H@ - -#ifndef _@GUARD_PREFIX@_FLOAT_H -#define _@GUARD_PREFIX@_FLOAT_H - -/* 'long double' properties. */ - -#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) -/* Number of mantissa units, in base FLT_RADIX. */ -# undef LDBL_MANT_DIG -# define LDBL_MANT_DIG 64 -/* Number of decimal digits that is sufficient for representing a number. */ -# undef LDBL_DIG -# define LDBL_DIG 18 -/* x-1 where x is the smallest representable number > 1. */ -# undef LDBL_EPSILON -# define LDBL_EPSILON 1.0842021724855044340E-19L -/* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP (-16381) -/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ -# undef LDBL_MAX_EXP -# define LDBL_MAX_EXP 16384 -/* Minimum positive normalized number. */ -# undef LDBL_MIN -# define LDBL_MIN 3.3621031431120935063E-4932L -/* Maximum representable finite number. */ -# undef LDBL_MAX -# define LDBL_MAX 1.1897314953572317650E+4932L -/* Minimum e such that 10^e is in the range of normalized numbers. */ -# undef LDBL_MIN_10_EXP -# define LDBL_MIN_10_EXP (-4931) -/* Maximum e such that 10^e is in the range of representable finite numbers. */ -# undef LDBL_MAX_10_EXP -# define LDBL_MAX_10_EXP 4932 -#endif - -/* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of - precision in the compiler but 64 bits of precision at runtime. See - . */ -#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) -/* Number of mantissa units, in base FLT_RADIX. */ -# undef LDBL_MANT_DIG -# define LDBL_MANT_DIG 64 -/* Number of decimal digits that is sufficient for representing a number. */ -# undef LDBL_DIG -# define LDBL_DIG 18 -/* x-1 where x is the smallest representable number > 1. */ -# undef LDBL_EPSILON -# define LDBL_EPSILON 1.084202172485504434007452800869941711426e-19L /* 2^-63 */ -/* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP (-16381) -/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ -# undef LDBL_MAX_EXP -# define LDBL_MAX_EXP 16384 -/* Minimum positive normalized number. */ -# undef LDBL_MIN -# define LDBL_MIN 3.362103143112093506262677817321752E-4932L /* = 0x1p-16382L */ -/* Maximum representable finite number. */ -# undef LDBL_MAX -/* LDBL_MAX is represented as { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }. - But the largest literal that GCC allows us to write is - 0x0.fffffffffffff8p16384L = { 0xFFFFF800, 0xFFFFFFFF, 32766 }. - So, define it like this through a reference to an external variable - - const unsigned int LDBL_MAX[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }; - extern const long double LDBL_MAX; - - Unfortunately, this is not a constant expression. */ -# if !GNULIB_defined_long_double_union -union gl_long_double_union - { - struct { unsigned int lo; unsigned int hi; unsigned int exponent; } xd; - long double ld; - }; -# define GNULIB_defined_long_double_union 1 -# endif -extern const union gl_long_double_union gl_LDBL_MAX; -# define LDBL_MAX (gl_LDBL_MAX.ld) -/* Minimum e such that 10^e is in the range of normalized numbers. */ -# undef LDBL_MIN_10_EXP -# define LDBL_MIN_10_EXP (-4931) -/* Maximum e such that 10^e is in the range of representable finite numbers. */ -# undef LDBL_MAX_10_EXP -# define LDBL_MAX_10_EXP 4932 -#endif - -/* On AIX 7.1 with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX are - wrong. - On Linux/PowerPC with gcc 4.4, the value of LDBL_MAX is wrong. */ -#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP DBL_MIN_EXP -# undef LDBL_MIN_10_EXP -# define LDBL_MIN_10_EXP DBL_MIN_10_EXP -# undef LDBL_MIN -# define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ -#endif -#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ -# undef LDBL_MAX -/* LDBL_MAX is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xFFFFFFFF }. - It is not easy to define: - #define LDBL_MAX 1.79769313486231580793728971405302307166e308L - is too small, whereas - #define LDBL_MAX 1.79769313486231580793728971405302307167e308L - is too large. Apparently a bug in GCC decimal-to-binary conversion. - Also, I can't get values larger than - #define LDBL63 ((long double) (1ULL << 63)) - #define LDBL882 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) - #define LDBL945 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) - #define LDBL1008 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) - #define LDBL_MAX (LDBL1008 * 65535.0L + LDBL945 * (long double) 9223372036821221375ULL + LDBL882 * (long double) 4611686018427387904ULL) - which is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xF8000000 }. - So, define it like this through a reference to an external variable - - const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }; - extern const long double LDBL_MAX; - - or through a pointer cast - - #define LDBL_MAX \ - (*(const long double *) (double[]) { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }) - - Unfortunately, this is not a constant expression, and the latter expression - does not work well when GCC is optimizing.. */ -# if !GNULIB_defined_long_double_union -union gl_long_double_union - { - struct { double hi; double lo; } dd; - long double ld; - }; -# define GNULIB_defined_long_double_union 1 -# endif -extern const union gl_long_double_union gl_LDBL_MAX; -# define LDBL_MAX (gl_LDBL_MAX.ld) -#endif - -/* On IRIX 6.5, with cc, the value of LDBL_MANT_DIG is wrong. - On IRIX 6.5, with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_EPSILON - are wrong. */ -#if defined __sgi && (LDBL_MANT_DIG >= 106) -# undef LDBL_MANT_DIG -# define LDBL_MANT_DIG 106 -# if defined __GNUC__ -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP DBL_MIN_EXP -# undef LDBL_MIN_10_EXP -# define LDBL_MIN_10_EXP DBL_MIN_10_EXP -# undef LDBL_MIN -# define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ -# undef LDBL_EPSILON -# define LDBL_EPSILON 2.46519032881566189191165176650870696773e-32L /* 2^-105 */ -# endif -#endif - -#if @REPLACE_ITOLD@ -/* Pull in a function that fixes the 'int' to 'long double' conversion - of glibc 2.7. */ -extern -# ifdef __cplusplus -"C" -# endif -void _Qp_itoq (long double *, int); -static void (*_gl_float_fix_itold) (long double *, int) = _Qp_itoq; -#endif - -#endif /* _@GUARD_PREFIX@_FLOAT_H */ -#endif /* _@GUARD_PREFIX@_FLOAT_H */ diff --git a/lib/fpucw.h b/lib/fpucw.h deleted file mode 100644 index 7dcb310eaf5..00000000000 --- a/lib/fpucw.h +++ /dev/null @@ -1,108 +0,0 @@ -/* Manipulating the FPU control word. -*- coding: utf-8 -*- - Copyright (C) 2007-2023 Free Software Foundation, Inc. - Written by Bruno Haible , 2007. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifndef _FPUCW_H -#define _FPUCW_H - -/* The i386 floating point hardware (the 387 compatible FPU, not the modern - SSE/SSE2 hardware) has a controllable rounding precision. It is specified - through the 'PC' bits in the FPU control word ('fctrl' register). (See - the GNU libc i386 header for details.) - - On some platforms, such as Linux or Solaris, the default precision setting - is set to "extended precision". This means that 'long double' instructions - operate correctly, but 'double' computations often produce slightly - different results as on strictly IEEE 754 conforming systems. - - On some platforms, such as NetBSD, the default precision is set to - "double precision". This means that 'long double' instructions will operate - only as 'double', i.e. lead to wrong results. Similarly on FreeBSD 6.4, at - least for the division of 'long double' numbers. - - The FPU control word is under control of the application, i.e. it is - not required to be set either way by the ABI. (In fact, the i386 ABI - https://www.linux-mips.org/pub/linux/mips/doc/ABI/abi386-4.pdf page 3-12 = page 38 - is not clear about it. But in any case, gcc treats the control word - like a "preserved" register: it emits code that assumes that the control - word is preserved across calls, and it restores the control word at the - end of functions that modify it.) - - See Vincent Lefèvre's page https://www.vinc17.net/research/extended.en.html - for a good explanation. - See https://web.archive.org/web/20060905133417/http://www.uwsg.iu.edu/hypermail/linux/kernel/0103.0/0453.html - some argumentation which setting should be the default. */ - -/* This header file provides the following facilities: - fpucw_t integral type holding the value of 'fctrl' - FPU_PC_MASK bit mask denoting the precision control - FPU_PC_DOUBLE precision control for 53 bits mantissa - FPU_PC_EXTENDED precision control for 64 bits mantissa - GET_FPUCW () yields the current FPU control word - SET_FPUCW (word) sets the FPU control word - DECL_LONG_DOUBLE_ROUNDING variable declaration for - BEGIN/END_LONG_DOUBLE_ROUNDING - BEGIN_LONG_DOUBLE_ROUNDING () starts a sequence of instructions with - 'long double' safe operation precision - END_LONG_DOUBLE_ROUNDING () ends a sequence of instructions with - 'long double' safe operation precision - */ - -/* Inline assembler like this works only with GNU C and clang. */ -#if (defined __i386__ || defined __x86_64__) && (defined __GNUC__ || defined __clang__) - -typedef unsigned short fpucw_t; /* glibc calls this fpu_control_t */ - -# define FPU_PC_MASK 0x0300 -# define FPU_PC_DOUBLE 0x200 /* glibc calls this _FPU_DOUBLE */ -# define FPU_PC_EXTENDED 0x300 /* glibc calls this _FPU_EXTENDED */ - -# define GET_FPUCW() __extension__ \ - ({ fpucw_t _cw; \ - __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_cw)); \ - _cw; \ - }) -# define SET_FPUCW(word) __extension__ \ - (void)({ fpucw_t _ncw = (word); \ - __asm__ __volatile__ ("fldcw %0" : : "m" (*&_ncw)); \ - }) - -# define DECL_LONG_DOUBLE_ROUNDING \ - fpucw_t oldcw; -# define BEGIN_LONG_DOUBLE_ROUNDING() \ - (void)(oldcw = GET_FPUCW (), \ - SET_FPUCW ((oldcw & ~FPU_PC_MASK) | FPU_PC_EXTENDED)) -# define END_LONG_DOUBLE_ROUNDING() \ - SET_FPUCW (oldcw) - -#else - -typedef unsigned int fpucw_t; - -# define FPU_PC_MASK 0 -# define FPU_PC_DOUBLE 0 -# define FPU_PC_EXTENDED 0 - -# define GET_FPUCW() 0 -# define SET_FPUCW(word) (void)(word) - -# define DECL_LONG_DOUBLE_ROUNDING -# define BEGIN_LONG_DOUBLE_ROUNDING() -# define END_LONG_DOUBLE_ROUNDING() - -#endif - -#endif /* _FPUCW_H */ diff --git a/lib/frexp.c b/lib/frexp.c deleted file mode 100644 index 78d627b5876..00000000000 --- a/lib/frexp.c +++ /dev/null @@ -1,168 +0,0 @@ -/* Split a double into fraction and mantissa. - Copyright (C) 2007-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* Written by Paolo Bonzini , 2003, and - Bruno Haible , 2007. */ - -#if ! defined USE_LONG_DOUBLE -# include -#endif - -/* Specification. */ -#include - -#include -#ifdef USE_LONG_DOUBLE -# include "isnanl-nolibm.h" -# include "fpucw.h" -#else -# include "isnand-nolibm.h" -#endif - -/* This file assumes FLT_RADIX = 2. If FLT_RADIX is a power of 2 greater - than 2, or not even a power of 2, some rounding errors can occur, so that - then the returned mantissa is only guaranteed to be <= 1.0, not < 1.0. */ - -#ifdef USE_LONG_DOUBLE -# define FUNC frexpl -# define DOUBLE long double -# define ISNAN isnanl -# define DECL_ROUNDING DECL_LONG_DOUBLE_ROUNDING -# define BEGIN_ROUNDING() BEGIN_LONG_DOUBLE_ROUNDING () -# define END_ROUNDING() END_LONG_DOUBLE_ROUNDING () -# define L_(literal) literal##L -#else -# define FUNC frexp -# define DOUBLE double -# define ISNAN isnand -# define DECL_ROUNDING -# define BEGIN_ROUNDING() -# define END_ROUNDING() -# define L_(literal) literal -#endif - -DOUBLE -FUNC (DOUBLE x, int *expptr) -{ - int sign; - int exponent; - DECL_ROUNDING - - /* Test for NaN, infinity, and zero. */ - if (ISNAN (x) || x + x == x) - { - *expptr = 0; - return x; - } - - sign = 0; - if (x < 0) - { - x = - x; - sign = -1; - } - - BEGIN_ROUNDING (); - - { - /* Since the exponent is an 'int', it fits in 64 bits. Therefore the - loops are executed no more than 64 times. */ - DOUBLE pow2[64]; /* pow2[i] = 2^2^i */ - DOUBLE powh[64]; /* powh[i] = 2^-2^i */ - int i; - - exponent = 0; - if (x >= L_(1.0)) - { - /* A positive exponent. */ - DOUBLE pow2_i; /* = pow2[i] */ - DOUBLE powh_i; /* = powh[i] */ - - /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, - x * 2^exponent = argument, x >= 1.0. */ - for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); - ; - i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) - { - if (x >= pow2_i) - { - exponent += (1 << i); - x *= powh_i; - } - else - break; - - pow2[i] = pow2_i; - powh[i] = powh_i; - } - /* Avoid making x too small, as it could become a denormalized - number and thus lose precision. */ - while (i > 0 && x < pow2[i - 1]) - { - i--; - powh_i = powh[i]; - } - exponent += (1 << i); - x *= powh_i; - /* Here 2^-2^i <= x < 1.0. */ - } - else - { - /* A negative or zero exponent. */ - DOUBLE pow2_i; /* = pow2[i] */ - DOUBLE powh_i; /* = powh[i] */ - - /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, - x * 2^exponent = argument, x < 1.0. */ - for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); - ; - i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) - { - if (x < powh_i) - { - exponent -= (1 << i); - x *= pow2_i; - } - else - break; - - pow2[i] = pow2_i; - powh[i] = powh_i; - } - /* Here 2^-2^i <= x < 1.0. */ - } - - /* Invariants: x * 2^exponent = argument, and 2^-2^i <= x < 1.0. */ - while (i > 0) - { - i--; - if (x < powh[i]) - { - exponent -= (1 << i); - x *= pow2[i]; - } - } - /* Here 0.5 <= x < 1.0. */ - } - - if (sign < 0) - x = - x; - - END_ROUNDING (); - - *expptr = exponent; - return x; -} diff --git a/lib/frexpl.c b/lib/frexpl.c deleted file mode 100644 index 8b17094d50c..00000000000 --- a/lib/frexpl.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Split a 'long double' into fraction and mantissa. - Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -#if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE - -/* Specification. */ -# include - -long double -frexpl (long double x, int *expptr) -{ - return frexp (x, expptr); -} - -#else - -# define USE_LONG_DOUBLE -# include "frexp.c" - -#endif diff --git a/lib/fseterr.c b/lib/fseterr.c deleted file mode 100644 index 9b39305c6d5..00000000000 --- a/lib/fseterr.c +++ /dev/null @@ -1,84 +0,0 @@ -/* Set the error indicator of a stream. - Copyright (C) 2007-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "fseterr.h" - -#include - -#include "stdio-impl.h" - -/* This file is not used on systems that have the __fseterr function, - namely musl libc. */ - -void -fseterr (FILE *fp) -{ - /* Most systems provide FILE as a struct and the necessary bitmask in - , because they need it for implementing getc() and putc() as - fast macros. */ -#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 - /* GNU libc, BeOS, Haiku, Linux libc5 */ - fp->_flags |= _IO_ERR_SEEN; -#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ - fp_->_flags |= __SERR; -#elif defined __EMX__ /* emx+gcc */ - fp->_flags |= _IOERR; -#elif defined __minix /* Minix */ - fp->_flags |= _IOERR; -#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ - fp_->_flag |= _IOERR; -#elif defined __UCLIBC__ /* uClibc */ - fp->__modeflags |= __FLAG_ERROR; -#elif defined __QNX__ /* QNX */ - fp->_Mode |= 0x200 /* _MERR */; -#elif defined __MINT__ /* Atari FreeMiNT */ - fp->__error = 1; -#elif defined EPLAN9 /* Plan9 */ - if (fp->state != 0 /* CLOSED */) - fp->state = 5 /* ERR */; -#elif 0 /* unknown */ - /* Portable fallback, based on an idea by Rich Felker. - Wow! 6 system calls for something that is just a bit operation! - Not activated on any system, because there is no way to repair FP when - the sequence of system calls fails, and library code should not call - abort(). */ - int saved_errno; - int fd; - int fd2; - - saved_errno = errno; - fflush (fp); - fd = fileno (fp); - fd2 = dup (fd); - if (fd2 >= 0) - { - close (fd); - fputc ('\0', fp); /* This should set the error indicator. */ - fflush (fp); /* Or this. */ - if (dup2 (fd2, fd) < 0) - /* Whee... we botched the stream and now cannot restore it! */ - abort (); - close (fd2); - } - errno = saved_errno; -#else - #error "Please port gnulib fseterr.c to your platform! Look at the definitions of ferror and clearerr on your system, then report this to bug-gnulib." -#endif -} diff --git a/lib/fseterr.h b/lib/fseterr.h deleted file mode 100644 index 87dc347332d..00000000000 --- a/lib/fseterr.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Set the error indicator of a stream. - Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifndef _FSETERR_H -#define _FSETERR_H - -/* This file uses HAVE___FSETERR. */ -#if !_GL_CONFIG_H_INCLUDED - #error "Please include config.h first." -#endif - -#include - -/* Set the error indicator of the stream FP. - The "error indicator" is set when an I/O operation on the stream fails, and - is cleared (together with the "end-of-file" indicator) by clearerr (FP). */ - -#if HAVE___FSETERR /* musl libc */ - -# include -# define fseterr(fp) __fseterr (fp) - -#else - -# ifdef __cplusplus -extern "C" { -# endif - -extern void fseterr (FILE *fp); - -# ifdef __cplusplus -} -# endif - -#endif - -#endif /* _FSETERR_H */ diff --git a/lib/gnulib.mk.in b/lib/gnulib.mk.in index 4fef3c4c82d..1bfa1daa0b3 100644 --- a/lib/gnulib.mk.in +++ b/lib/gnulib.mk.in @@ -136,7 +136,6 @@ # nstrftime \ # pathmax \ # pipe2 \ -# printf-posix \ # pselect \ # pthread_sigmask \ # qcopy-acl \ @@ -170,7 +169,6 @@ # unlocked-io \ # update-copyright \ # utimensat \ -# vasprintf-posix \ # vla \ # warnings \ # year2038 @@ -198,11 +196,11 @@ ANDROID_OBJ = @ANDROID_OBJ@ ANDROID_SDK_18_OR_EARLIER = @ANDROID_SDK_18_OR_EARLIER@ ANDROID_SDK_8_OR_EARLIER = @ANDROID_SDK_8_OR_EARLIER@ ANDROID_SHARED_USER_ID = @ANDROID_SHARED_USER_ID@ +ANDROID_SHARED_USER_NAME = @ANDROID_SHARED_USER_NAME@ APKSIGNER = @APKSIGNER@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ -ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ ASSERT_H = @ASSERT_H@ AUTO_DEPEND = @AUTO_DEPEND@ AWK = @AWK@ @@ -270,7 +268,6 @@ EXEEXT = @EXEEXT@ FILE_HAS_ACL_LIB = @FILE_HAS_ACL_LIB@ FIND_DELETE = @FIND_DELETE@ FIRSTFILE_OBJ = @FIRSTFILE_OBJ@ -FLOAT_H = @FLOAT_H@ FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ FONT_OBJ = @FONT_OBJ@ @@ -299,10 +296,8 @@ GL_COND_OBJ_FACCESSAT_CONDITION = @GL_COND_OBJ_FACCESSAT_CONDITION@ GL_COND_OBJ_FCHMODAT_CONDITION = @GL_COND_OBJ_FCHMODAT_CONDITION@ GL_COND_OBJ_FCNTL_CONDITION = @GL_COND_OBJ_FCNTL_CONDITION@ GL_COND_OBJ_FDOPENDIR_CONDITION = @GL_COND_OBJ_FDOPENDIR_CONDITION@ -GL_COND_OBJ_FLOAT_CONDITION = @GL_COND_OBJ_FLOAT_CONDITION@ GL_COND_OBJ_FPENDING_CONDITION = @GL_COND_OBJ_FPENDING_CONDITION@ GL_COND_OBJ_FREE_CONDITION = @GL_COND_OBJ_FREE_CONDITION@ -GL_COND_OBJ_FSETERR_CONDITION = @GL_COND_OBJ_FSETERR_CONDITION@ GL_COND_OBJ_FSTATAT_CONDITION = @GL_COND_OBJ_FSTATAT_CONDITION@ GL_COND_OBJ_FSUSAGE_CONDITION = @GL_COND_OBJ_FSUSAGE_CONDITION@ GL_COND_OBJ_FSYNC_CONDITION = @GL_COND_OBJ_FSYNC_CONDITION@ @@ -316,7 +311,6 @@ GL_COND_OBJ_GETOPT_CONDITION = @GL_COND_OBJ_GETOPT_CONDITION@ GL_COND_OBJ_GETRANDOM_CONDITION = @GL_COND_OBJ_GETRANDOM_CONDITION@ GL_COND_OBJ_GETTIMEOFDAY_CONDITION = @GL_COND_OBJ_GETTIMEOFDAY_CONDITION@ GL_COND_OBJ_GROUP_MEMBER_CONDITION = @GL_COND_OBJ_GROUP_MEMBER_CONDITION@ -GL_COND_OBJ_ITOLD_CONDITION = @GL_COND_OBJ_ITOLD_CONDITION@ GL_COND_OBJ_LCHMOD_CONDITION = @GL_COND_OBJ_LCHMOD_CONDITION@ GL_COND_OBJ_LSTAT_CONDITION = @GL_COND_OBJ_LSTAT_CONDITION@ GL_COND_OBJ_MEMPCPY_CONDITION = @GL_COND_OBJ_MEMPCPY_CONDITION@ @@ -334,7 +328,6 @@ GL_COND_OBJ_READLINK_CONDITION = @GL_COND_OBJ_READLINK_CONDITION@ GL_COND_OBJ_REGEX_CONDITION = @GL_COND_OBJ_REGEX_CONDITION@ GL_COND_OBJ_SIG2STR_CONDITION = @GL_COND_OBJ_SIG2STR_CONDITION@ GL_COND_OBJ_SIGDESCR_NP_CONDITION = @GL_COND_OBJ_SIGDESCR_NP_CONDITION@ -GL_COND_OBJ_SIGNBIT3_CONDITION = @GL_COND_OBJ_SIGNBIT3_CONDITION@ GL_COND_OBJ_STDIO_READ_CONDITION = @GL_COND_OBJ_STDIO_READ_CONDITION@ GL_COND_OBJ_STDIO_WRITE_CONDITION = @GL_COND_OBJ_STDIO_WRITE_CONDITION@ GL_COND_OBJ_STPCPY_CONDITION = @GL_COND_OBJ_STPCPY_CONDITION@ @@ -352,7 +345,6 @@ GL_GENERATE_ASSERT_H_CONDITION = @GL_GENERATE_ASSERT_H_CONDITION@ GL_GENERATE_BYTESWAP_H_CONDITION = @GL_GENERATE_BYTESWAP_H_CONDITION@ GL_GENERATE_ERRNO_H_CONDITION = @GL_GENERATE_ERRNO_H_CONDITION@ GL_GENERATE_EXECINFO_H_CONDITION = @GL_GENERATE_EXECINFO_H_CONDITION@ -GL_GENERATE_FLOAT_H_CONDITION = @GL_GENERATE_FLOAT_H_CONDITION@ GL_GENERATE_GETOPT_CDEFS_H_CONDITION = @GL_GENERATE_GETOPT_CDEFS_H_CONDITION@ GL_GENERATE_GETOPT_H_CONDITION = @GL_GENERATE_GETOPT_H_CONDITION@ GL_GENERATE_GMP_GMP_H_CONDITION = @GL_GENERATE_GMP_GMP_H_CONDITION@ @@ -364,37 +356,18 @@ GL_GENERATE_STDCKDINT_H_CONDITION = @GL_GENERATE_STDCKDINT_H_CONDITION@ GL_GENERATE_STDDEF_H_CONDITION = @GL_GENERATE_STDDEF_H_CONDITION@ GL_GENERATE_STDINT_H_CONDITION = @GL_GENERATE_STDINT_H_CONDITION@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ -GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ -GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ -GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ -GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ -GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ -GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ -GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ -GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ -GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ -GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ -GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ -GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ -GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ -GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ -GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ -GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ -GL_GNULIB_COSF = @GL_GNULIB_COSF@ -GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ -GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ @@ -411,17 +384,7 @@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ -GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ -GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ -GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ -GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ -GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ -GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ -GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ -GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ -GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ -GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ @@ -436,15 +399,6 @@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ -GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ -GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ -GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ -GL_GNULIB_FMA = @GL_GNULIB_FMA@ -GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ -GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ -GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ -GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ -GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ @@ -455,9 +409,6 @@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ -GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ -GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ -GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ @@ -494,43 +445,14 @@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ -GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ -GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ -GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ -GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ -GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ -GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ -GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ -GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ -GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ -GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ -GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ -GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ -GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ -GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ -GL_GNULIB_LOG = @GL_GNULIB_LOG@ -GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ -GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ -GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ -GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ -GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ -GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ -GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ -GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ -GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ -GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ -GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ -GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ -GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ -GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ @@ -575,9 +497,6 @@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ -GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ -GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ -GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ @@ -594,9 +513,6 @@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ -GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ -GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ -GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ @@ -614,9 +530,6 @@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ -GL_GNULIB_MODF = @GL_GNULIB_MODF@ -GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ -GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ @@ -632,7 +545,6 @@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ -GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ @@ -658,20 +570,11 @@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ -GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ -GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ -GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ -GL_GNULIB_RINT = @GL_GNULIB_RINT@ -GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ -GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ -GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ -GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ -GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ @@ -683,16 +586,10 @@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ -GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ -GL_GNULIB_SINF = @GL_GNULIB_SINF@ -GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ -GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ -GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ -GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ @@ -726,9 +623,6 @@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ -GL_GNULIB_TANF = @GL_GNULIB_TANF@ -GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ -GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ @@ -736,10 +630,7 @@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ -GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ -GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ -GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ @@ -786,58 +677,26 @@ HAIKU_LIBS = @HAIKU_LIBS@ HAIKU_OBJ = @HAIKU_OBJ@ HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@ HARFBUZZ_LIBS = @HARFBUZZ_LIBS@ -HAVE_ACOSF = @HAVE_ACOSF@ -HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ -HAVE_ASINF = @HAVE_ASINF@ -HAVE_ASINL = @HAVE_ASINL@ -HAVE_ATAN2F = @HAVE_ATAN2F@ -HAVE_ATANF = @HAVE_ATANF@ -HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BE_APP = @HAVE_BE_APP@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ -HAVE_CBRT = @HAVE_CBRT@ -HAVE_CBRTF = @HAVE_CBRTF@ -HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ -HAVE_COPYSIGN = @HAVE_COPYSIGN@ -HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ -HAVE_COSF = @HAVE_COSF@ -HAVE_COSHF = @HAVE_COSHF@ -HAVE_COSL = @HAVE_COSL@ -HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ -HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ -HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ -HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ -HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ -HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ -HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ -HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ -HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ -HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ -HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ -HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ -HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ -HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ -HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ -HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ -HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ @@ -853,32 +712,17 @@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ -HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ -HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ -HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ -HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ -HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ -HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ -HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_POSIX_SPAWN_SETSID = @HAVE_DECL_POSIX_SPAWN_SETSID@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ -HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ -HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ -HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ -HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ -HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ -HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ -HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ -HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ @@ -887,11 +731,7 @@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ -HAVE_DECL_TANL = @HAVE_DECL_TANL@ -HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ -HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ -HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ @@ -900,13 +740,7 @@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ -HAVE_EXPF = @HAVE_EXPF@ -HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ -HAVE_EXPM1 = @HAVE_EXPM1@ -HAVE_EXPM1F = @HAVE_EXPM1F@ -HAVE_FABSF = @HAVE_FABSF@ -HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ @@ -914,15 +748,8 @@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ -HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ -HAVE_FMA = @HAVE_FMA@ -HAVE_FMAF = @HAVE_FMAF@ -HAVE_FMAL = @HAVE_FMAL@ -HAVE_FMODF = @HAVE_FMODF@ -HAVE_FMODL = @HAVE_FMODL@ -HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ @@ -945,35 +772,17 @@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSETTINGS = @HAVE_GSETTINGS@ -HAVE_HYPOTF = @HAVE_HYPOTF@ -HAVE_HYPOTL = @HAVE_HYPOTL@ -HAVE_ILOGB = @HAVE_ILOGB@ -HAVE_ILOGBF = @HAVE_ILOGBF@ -HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ -HAVE_ISNAND = @HAVE_ISNAND@ -HAVE_ISNANF = @HAVE_ISNANF@ -HAVE_ISNANL = @HAVE_ISNANL@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ -HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGMP = @HAVE_LIBGMP@ HAVE_LIBSECCOMP = @HAVE_LIBSECCOMP@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ -HAVE_LOG10F = @HAVE_LOG10F@ -HAVE_LOG10L = @HAVE_LOG10L@ -HAVE_LOG1P = @HAVE_LOG1P@ -HAVE_LOG1PF = @HAVE_LOG1PF@ -HAVE_LOG1PL = @HAVE_LOG1PL@ -HAVE_LOGBF = @HAVE_LOGBF@ -HAVE_LOGBL = @HAVE_LOGBL@ -HAVE_LOGF = @HAVE_LOGF@ -HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MACPORTS = @HAVE_MACPORTS@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ @@ -991,8 +800,6 @@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ -HAVE_MODFF = @HAVE_MODFF@ -HAVE_MODFL = @HAVE_MODFL@ HAVE_MODULES = @HAVE_MODULES@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NATIVE_COMP = @HAVE_NATIVE_COMP@ @@ -1012,7 +819,6 @@ HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ HAVE_POSIX_SPAWNATTR_SETFLAGS = @HAVE_POSIX_SPAWNATTR_SETFLAGS@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR_NP = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR_NP@ -HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ @@ -1030,14 +836,9 @@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ -HAVE_REMAINDER = @HAVE_REMAINDER@ -HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ -HAVE_RINT = @HAVE_RINT@ -HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ -HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SECCOMP = @HAVE_SECCOMP@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ @@ -1053,13 +854,8 @@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ -HAVE_SINF = @HAVE_SINF@ -HAVE_SINHF = @HAVE_SINHF@ -HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SPAWN_H = @HAVE_SPAWN_H@ -HAVE_SQRTF = @HAVE_SQRTF@ -HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ @@ -1090,9 +886,6 @@ HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ -HAVE_TANF = @HAVE_TANF@ -HAVE_TANHF = @HAVE_TANHF@ -HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ @@ -1227,11 +1020,9 @@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ -NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ -NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ @@ -1248,11 +1039,9 @@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ -NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ -NEXT_MATH_H = @NEXT_MATH_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ @@ -1307,26 +1096,15 @@ QCOPY_ACL_LIB = @QCOPY_ACL_LIB@ RALLOC_OBJ = @RALLOC_OBJ@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ -REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ -REPLACE_ASINF = @REPLACE_ASINF@ -REPLACE_ATAN2F = @REPLACE_ATAN2F@ -REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ -REPLACE_CBRTF = @REPLACE_CBRTF@ -REPLACE_CBRTL = @REPLACE_CBRTL@ -REPLACE_CEIL = @REPLACE_CEIL@ -REPLACE_CEILF = @REPLACE_CEILF@ -REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ -REPLACE_COSF = @REPLACE_COSF@ -REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ @@ -1341,14 +1119,6 @@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ -REPLACE_EXP2 = @REPLACE_EXP2@ -REPLACE_EXP2L = @REPLACE_EXP2L@ -REPLACE_EXPF = @REPLACE_EXPF@ -REPLACE_EXPL = @REPLACE_EXPL@ -REPLACE_EXPM1 = @REPLACE_EXPM1@ -REPLACE_EXPM1F = @REPLACE_EXPM1F@ -REPLACE_EXPM1L = @REPLACE_EXPM1L@ -REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ @@ -1359,24 +1129,12 @@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ -REPLACE_FLOOR = @REPLACE_FLOOR@ -REPLACE_FLOORF = @REPLACE_FLOORF@ -REPLACE_FLOORL = @REPLACE_FLOORL@ -REPLACE_FMA = @REPLACE_FMA@ -REPLACE_FMAF = @REPLACE_FMAF@ -REPLACE_FMAL = @REPLACE_FMAL@ -REPLACE_FMOD = @REPLACE_FMOD@ -REPLACE_FMODF = @REPLACE_FMODF@ -REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ -REPLACE_FREXP = @REPLACE_FREXP@ -REPLACE_FREXPF = @REPLACE_FREXPF@ -REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ @@ -1402,42 +1160,15 @@ REPLACE_GETRANDOM = @REPLACE_GETRANDOM@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ -REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ -REPLACE_HYPOT = @REPLACE_HYPOT@ -REPLACE_HYPOTF = @REPLACE_HYPOTF@ -REPLACE_HYPOTL = @REPLACE_HYPOTL@ -REPLACE_ILOGB = @REPLACE_ILOGB@ -REPLACE_ILOGBF = @REPLACE_ILOGBF@ -REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ -REPLACE_ISFINITE = @REPLACE_ISFINITE@ -REPLACE_ISINF = @REPLACE_ISINF@ -REPLACE_ISNAN = @REPLACE_ISNAN@ -REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ -REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ -REPLACE_LOG = @REPLACE_LOG@ -REPLACE_LOG10 = @REPLACE_LOG10@ -REPLACE_LOG10F = @REPLACE_LOG10F@ -REPLACE_LOG10L = @REPLACE_LOG10L@ -REPLACE_LOG1P = @REPLACE_LOG1P@ -REPLACE_LOG1PF = @REPLACE_LOG1PF@ -REPLACE_LOG1PL = @REPLACE_LOG1PL@ -REPLACE_LOG2 = @REPLACE_LOG2@ -REPLACE_LOG2F = @REPLACE_LOG2F@ -REPLACE_LOG2L = @REPLACE_LOG2L@ -REPLACE_LOGB = @REPLACE_LOGB@ -REPLACE_LOGBF = @REPLACE_LOGBF@ -REPLACE_LOGBL = @REPLACE_LOGBL@ -REPLACE_LOGF = @REPLACE_LOGF@ -REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ @@ -1457,10 +1188,6 @@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ -REPLACE_MODF = @REPLACE_MODF@ -REPLACE_MODFF = @REPLACE_MODFF@ -REPLACE_MODFL = @REPLACE_MODFL@ -REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ @@ -1492,31 +1219,18 @@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ -REPLACE_REMAINDER = @REPLACE_REMAINDER@ -REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ -REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ -REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ -REPLACE_ROUND = @REPLACE_ROUND@ -REPLACE_ROUNDF = @REPLACE_ROUNDF@ -REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ -REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ -REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ -REPLACE_SINF = @REPLACE_SINF@ -REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ -REPLACE_SQRTF = @REPLACE_SQRTF@ -REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ @@ -1546,16 +1260,11 @@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ -REPLACE_TANF = @REPLACE_TANF@ -REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ -REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ -REPLACE_TRUNCF = @REPLACE_TRUNCF@ -REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ @@ -1691,7 +1400,6 @@ gamegroup = @gamegroup@ gameuser = @gameuser@ gl_GNULIB_ENABLED_03e0aaad4cb89ca757653bd367a6ccb7_CONDITION = @gl_GNULIB_ENABLED_03e0aaad4cb89ca757653bd367a6ccb7_CONDITION@ gl_GNULIB_ENABLED_260941c0e5dc67ec9e87d1fb321c300b_CONDITION = @gl_GNULIB_ENABLED_260941c0e5dc67ec9e87d1fb321c300b_CONDITION@ -gl_GNULIB_ENABLED_3f0e593033d1fc2c127581960f641b66_CONDITION = @gl_GNULIB_ENABLED_3f0e593033d1fc2c127581960f641b66_CONDITION@ gl_GNULIB_ENABLED_5264294aa0a5557541b53c8c741f7f31_CONDITION = @gl_GNULIB_ENABLED_5264294aa0a5557541b53c8c741f7f31_CONDITION@ gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c_CONDITION = @gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c_CONDITION@ gl_GNULIB_ENABLED_61bcaca76b3e6f9ae55d57a1c3193bc4_CONDITION = @gl_GNULIB_ENABLED_61bcaca76b3e6f9ae55d57a1c3193bc4_CONDITION@ @@ -1704,22 +1412,17 @@ gl_GNULIB_ENABLED_cloexec_CONDITION = @gl_GNULIB_ENABLED_cloexec_CONDITION@ gl_GNULIB_ENABLED_d3b2383720ee0e541357aa2aac598e2b_CONDITION = @gl_GNULIB_ENABLED_d3b2383720ee0e541357aa2aac598e2b_CONDITION@ gl_GNULIB_ENABLED_dirfd_CONDITION = @gl_GNULIB_ENABLED_dirfd_CONDITION@ gl_GNULIB_ENABLED_e80bf6f757095d2e5fc94dafb8f8fc8b_CONDITION = @gl_GNULIB_ENABLED_e80bf6f757095d2e5fc94dafb8f8fc8b_CONDITION@ -gl_GNULIB_ENABLED_ed5616be3593d355b981ffab56b9f37b_CONDITION = @gl_GNULIB_ENABLED_ed5616be3593d355b981ffab56b9f37b_CONDITION@ gl_GNULIB_ENABLED_ef455225c00f5049c808c2eda3e76866_CONDITION = @gl_GNULIB_ENABLED_ef455225c00f5049c808c2eda3e76866_CONDITION@ gl_GNULIB_ENABLED_euidaccess_CONDITION = @gl_GNULIB_ENABLED_euidaccess_CONDITION@ gl_GNULIB_ENABLED_fd38c7e463b54744b77b98aeafb4fa7c_CONDITION = @gl_GNULIB_ENABLED_fd38c7e463b54744b77b98aeafb4fa7c_CONDITION@ -gl_GNULIB_ENABLED_fseterr_CONDITION = @gl_GNULIB_ENABLED_fseterr_CONDITION@ gl_GNULIB_ENABLED_getdelim_CONDITION = @gl_GNULIB_ENABLED_getdelim_CONDITION@ gl_GNULIB_ENABLED_getdtablesize_CONDITION = @gl_GNULIB_ENABLED_getdtablesize_CONDITION@ gl_GNULIB_ENABLED_getgroups_CONDITION = @gl_GNULIB_ENABLED_getgroups_CONDITION@ gl_GNULIB_ENABLED_lchmod_CONDITION = @gl_GNULIB_ENABLED_lchmod_CONDITION@ gl_GNULIB_ENABLED_open_CONDITION = @gl_GNULIB_ENABLED_open_CONDITION@ gl_GNULIB_ENABLED_rawmemchr_CONDITION = @gl_GNULIB_ENABLED_rawmemchr_CONDITION@ -gl_GNULIB_ENABLED_size_max_CONDITION = @gl_GNULIB_ENABLED_size_max_CONDITION@ gl_GNULIB_ENABLED_strtoll_CONDITION = @gl_GNULIB_ENABLED_strtoll_CONDITION@ gl_GNULIB_ENABLED_utimens_CONDITION = @gl_GNULIB_ENABLED_utimens_CONDITION@ -gl_GNULIB_ENABLED_vasnprintf_CONDITION = @gl_GNULIB_ENABLED_vasnprintf_CONDITION@ -gl_GNULIB_ENABLED_xsize_CONDITION = @gl_GNULIB_ENABLED_xsize_CONDITION@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ @@ -2387,42 +2090,6 @@ EXTRA_DIST += flexmember.h endif ## end gnulib module flexmember -## begin gnulib module float -ifeq (,$(OMIT_GNULIB_MODULE_float)) - -BUILT_SOURCES += $(FLOAT_H) - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -ifneq (,$(GL_GENERATE_FLOAT_H_CONDITION)) -float.h: float.in.h $(top_builddir)/config.status - $(gl_V_at)$(SED_HEADER_STDOUT) \ - -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ - -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ - $(srcdir)/float.in.h > $@-t - $(AM_V_at)mv $@-t $@ -else -float.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += float.h float.h-t - -ifneq (,$(GL_COND_OBJ_FLOAT_CONDITION)) -libgnu_a_SOURCES += float.c -endif -ifneq (,$(GL_COND_OBJ_ITOLD_CONDITION)) -libgnu_a_SOURCES += itold.c -endif - -EXTRA_DIST += float.in.h - -endif -## end gnulib module float - ## begin gnulib module fpending ifeq (,$(OMIT_GNULIB_MODULE_fpending)) @@ -2435,15 +2102,6 @@ EXTRA_DIST += fpending.h stdio-impl.h endif ## end gnulib module fpending -## begin gnulib module fpucw -ifeq (,$(OMIT_GNULIB_MODULE_fpucw)) - - -EXTRA_DIST += fpucw.h - -endif -## end gnulib module fpucw - ## begin gnulib module free-posix ifeq (,$(OMIT_GNULIB_MODULE_free-posix)) @@ -2454,42 +2112,6 @@ endif endif ## end gnulib module free-posix -## begin gnulib module frexp-nolibm -ifeq (,$(OMIT_GNULIB_MODULE_frexp-nolibm)) - - -EXTRA_DIST += frexp.c - -EXTRA_libgnu_a_SOURCES += frexp.c - -endif -## end gnulib module frexp-nolibm - -## begin gnulib module frexpl-nolibm -ifeq (,$(OMIT_GNULIB_MODULE_frexpl-nolibm)) - - -EXTRA_DIST += frexp.c frexpl.c - -EXTRA_libgnu_a_SOURCES += frexp.c frexpl.c - -endif -## end gnulib module frexpl-nolibm - -## begin gnulib module fseterr -ifeq (,$(OMIT_GNULIB_MODULE_fseterr)) - -ifneq (,$(gl_GNULIB_ENABLED_fseterr_CONDITION)) -ifneq (,$(GL_COND_OBJ_FSETERR_CONDITION)) -libgnu_a_SOURCES += fseterr.c -endif - -endif -EXTRA_DIST += fseterr.h stdio-impl.h - -endif -## end gnulib module fseterr - ## begin gnulib module fstatat ifeq (,$(OMIT_GNULIB_MODULE_fstatat)) @@ -2875,41 +2497,6 @@ EXTRA_DIST += inttypes.in.h endif ## end gnulib module inttypes-incomplete -## begin gnulib module isnand-nolibm -ifeq (,$(OMIT_GNULIB_MODULE_isnand-nolibm)) - - -EXTRA_DIST += float+.h isnan.c isnand-nolibm.h isnand.c - -EXTRA_libgnu_a_SOURCES += isnan.c isnand.c - -endif -## end gnulib module isnand-nolibm - -## begin gnulib module isnanf-nolibm -ifeq (,$(OMIT_GNULIB_MODULE_isnanf-nolibm)) - -ifneq (,$(gl_GNULIB_ENABLED_3f0e593033d1fc2c127581960f641b66_CONDITION)) - -endif -EXTRA_DIST += float+.h isnan.c isnanf-nolibm.h isnanf.c - -EXTRA_libgnu_a_SOURCES += isnan.c isnanf.c - -endif -## end gnulib module isnanf-nolibm - -## begin gnulib module isnanl-nolibm -ifeq (,$(OMIT_GNULIB_MODULE_isnanl-nolibm)) - - -EXTRA_DIST += float+.h isnan.c isnanl-nolibm.h isnanl.c - -EXTRA_libgnu_a_SOURCES += isnan.c isnanl.c - -endif -## end gnulib module isnanl-nolibm - ## begin gnulib module lchmod ifeq (,$(OMIT_GNULIB_MODULE_lchmod)) @@ -3030,313 +2617,6 @@ EXTRA_libgnu_a_SOURCES += malloc.c endif ## end gnulib module malloc-posix -## begin gnulib module math -ifeq (,$(OMIT_GNULIB_MODULE_math)) - -BUILT_SOURCES += math.h -libgnu_a_SOURCES += math.c - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(gl_V_at)$(SED_HEADER_STDOUT) \ - -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \ - -e 's/@''GNULIB_ACOSF''@/$(GL_GNULIB_ACOSF)/g' \ - -e 's/@''GNULIB_ACOSL''@/$(GL_GNULIB_ACOSL)/g' \ - -e 's/@''GNULIB_ASINF''@/$(GL_GNULIB_ASINF)/g' \ - -e 's/@''GNULIB_ASINL''@/$(GL_GNULIB_ASINL)/g' \ - -e 's/@''GNULIB_ATANF''@/$(GL_GNULIB_ATANF)/g' \ - -e 's/@''GNULIB_ATANL''@/$(GL_GNULIB_ATANL)/g' \ - -e 's/@''GNULIB_ATAN2F''@/$(GL_GNULIB_ATAN2F)/g' \ - -e 's/@''GNULIB_CBRT''@/$(GL_GNULIB_CBRT)/g' \ - -e 's/@''GNULIB_CBRTF''@/$(GL_GNULIB_CBRTF)/g' \ - -e 's/@''GNULIB_CBRTL''@/$(GL_GNULIB_CBRTL)/g' \ - -e 's/@''GNULIB_CEIL''@/$(GL_GNULIB_CEIL)/g' \ - -e 's/@''GNULIB_CEILF''@/$(GL_GNULIB_CEILF)/g' \ - -e 's/@''GNULIB_CEILL''@/$(GL_GNULIB_CEILL)/g' \ - -e 's/@''GNULIB_COPYSIGN''@/$(GL_GNULIB_COPYSIGN)/g' \ - -e 's/@''GNULIB_COPYSIGNF''@/$(GL_GNULIB_COPYSIGNF)/g' \ - -e 's/@''GNULIB_COPYSIGNL''@/$(GL_GNULIB_COPYSIGNL)/g' \ - -e 's/@''GNULIB_COSF''@/$(GL_GNULIB_COSF)/g' \ - -e 's/@''GNULIB_COSL''@/$(GL_GNULIB_COSL)/g' \ - -e 's/@''GNULIB_COSHF''@/$(GL_GNULIB_COSHF)/g' \ - -e 's/@''GNULIB_EXPF''@/$(GL_GNULIB_EXPF)/g' \ - -e 's/@''GNULIB_EXPL''@/$(GL_GNULIB_EXPL)/g' \ - -e 's/@''GNULIB_EXP2''@/$(GL_GNULIB_EXP2)/g' \ - -e 's/@''GNULIB_EXP2F''@/$(GL_GNULIB_EXP2F)/g' \ - -e 's/@''GNULIB_EXP2L''@/$(GL_GNULIB_EXP2L)/g' \ - -e 's/@''GNULIB_EXPM1''@/$(GL_GNULIB_EXPM1)/g' \ - -e 's/@''GNULIB_EXPM1F''@/$(GL_GNULIB_EXPM1F)/g' \ - -e 's/@''GNULIB_EXPM1L''@/$(GL_GNULIB_EXPM1L)/g' \ - -e 's/@''GNULIB_FABSF''@/$(GL_GNULIB_FABSF)/g' \ - -e 's/@''GNULIB_FABSL''@/$(GL_GNULIB_FABSL)/g' \ - -e 's/@''GNULIB_FLOOR''@/$(GL_GNULIB_FLOOR)/g' \ - -e 's/@''GNULIB_FLOORF''@/$(GL_GNULIB_FLOORF)/g' \ - -e 's/@''GNULIB_FLOORL''@/$(GL_GNULIB_FLOORL)/g' \ - -e 's/@''GNULIB_FMA''@/$(GL_GNULIB_FMA)/g' \ - -e 's/@''GNULIB_FMAF''@/$(GL_GNULIB_FMAF)/g' \ - -e 's/@''GNULIB_FMAL''@/$(GL_GNULIB_FMAL)/g' \ - -e 's/@''GNULIB_FMOD''@/$(GL_GNULIB_FMOD)/g' \ - -e 's/@''GNULIB_FMODF''@/$(GL_GNULIB_FMODF)/g' \ - -e 's/@''GNULIB_FMODL''@/$(GL_GNULIB_FMODL)/g' \ - -e 's/@''GNULIB_FREXPF''@/$(GL_GNULIB_FREXPF)/g' \ - -e 's/@''GNULIB_FREXP''@/$(GL_GNULIB_FREXP)/g' \ - -e 's/@''GNULIB_FREXPL''@/$(GL_GNULIB_FREXPL)/g' \ - -e 's/@''GNULIB_HYPOT''@/$(GL_GNULIB_HYPOT)/g' \ - -e 's/@''GNULIB_HYPOTF''@/$(GL_GNULIB_HYPOTF)/g' \ - -e 's/@''GNULIB_HYPOTL''@/$(GL_GNULIB_HYPOTL)/g' \ - < $(srcdir)/math.in.h | \ - sed -e 's/@''GNULIB_ILOGB''@/$(GL_GNULIB_ILOGB)/g' \ - -e 's/@''GNULIB_ILOGBF''@/$(GL_GNULIB_ILOGBF)/g' \ - -e 's/@''GNULIB_ILOGBL''@/$(GL_GNULIB_ILOGBL)/g' \ - -e 's/@''GNULIB_ISFINITE''@/$(GL_GNULIB_ISFINITE)/g' \ - -e 's/@''GNULIB_ISINF''@/$(GL_GNULIB_ISINF)/g' \ - -e 's/@''GNULIB_ISNAN''@/$(GL_GNULIB_ISNAN)/g' \ - -e 's/@''GNULIB_ISNANF''@/$(GL_GNULIB_ISNANF)/g' \ - -e 's/@''GNULIB_ISNAND''@/$(GL_GNULIB_ISNAND)/g' \ - -e 's/@''GNULIB_ISNANL''@/$(GL_GNULIB_ISNANL)/g' \ - -e 's/@''GNULIB_LDEXPF''@/$(GL_GNULIB_LDEXPF)/g' \ - -e 's/@''GNULIB_LDEXPL''@/$(GL_GNULIB_LDEXPL)/g' \ - -e 's/@''GNULIB_LOG''@/$(GL_GNULIB_LOG)/g' \ - -e 's/@''GNULIB_LOGF''@/$(GL_GNULIB_LOGF)/g' \ - -e 's/@''GNULIB_LOGL''@/$(GL_GNULIB_LOGL)/g' \ - -e 's/@''GNULIB_LOG10''@/$(GL_GNULIB_LOG10)/g' \ - -e 's/@''GNULIB_LOG10F''@/$(GL_GNULIB_LOG10F)/g' \ - -e 's/@''GNULIB_LOG10L''@/$(GL_GNULIB_LOG10L)/g' \ - -e 's/@''GNULIB_LOG1P''@/$(GL_GNULIB_LOG1P)/g' \ - -e 's/@''GNULIB_LOG1PF''@/$(GL_GNULIB_LOG1PF)/g' \ - -e 's/@''GNULIB_LOG1PL''@/$(GL_GNULIB_LOG1PL)/g' \ - -e 's/@''GNULIB_LOG2''@/$(GL_GNULIB_LOG2)/g' \ - -e 's/@''GNULIB_LOG2F''@/$(GL_GNULIB_LOG2F)/g' \ - -e 's/@''GNULIB_LOG2L''@/$(GL_GNULIB_LOG2L)/g' \ - -e 's/@''GNULIB_LOGB''@/$(GL_GNULIB_LOGB)/g' \ - -e 's/@''GNULIB_LOGBF''@/$(GL_GNULIB_LOGBF)/g' \ - -e 's/@''GNULIB_LOGBL''@/$(GL_GNULIB_LOGBL)/g' \ - -e 's/@''GNULIB_MODF''@/$(GL_GNULIB_MODF)/g' \ - -e 's/@''GNULIB_MODFF''@/$(GL_GNULIB_MODFF)/g' \ - -e 's/@''GNULIB_MODFL''@/$(GL_GNULIB_MODFL)/g' \ - -e 's/@''GNULIB_POWF''@/$(GL_GNULIB_POWF)/g' \ - -e 's/@''GNULIB_REMAINDER''@/$(GL_GNULIB_REMAINDER)/g' \ - -e 's/@''GNULIB_REMAINDERF''@/$(GL_GNULIB_REMAINDERF)/g' \ - -e 's/@''GNULIB_REMAINDERL''@/$(GL_GNULIB_REMAINDERL)/g' \ - -e 's/@''GNULIB_RINT''@/$(GL_GNULIB_RINT)/g' \ - -e 's/@''GNULIB_RINTF''@/$(GL_GNULIB_RINTF)/g' \ - -e 's/@''GNULIB_RINTL''@/$(GL_GNULIB_RINTL)/g' \ - -e 's/@''GNULIB_ROUND''@/$(GL_GNULIB_ROUND)/g' \ - -e 's/@''GNULIB_ROUNDF''@/$(GL_GNULIB_ROUNDF)/g' \ - -e 's/@''GNULIB_ROUNDL''@/$(GL_GNULIB_ROUNDL)/g' \ - -e 's/@''GNULIB_SIGNBIT''@/$(GL_GNULIB_SIGNBIT)/g' \ - -e 's/@''GNULIB_SINF''@/$(GL_GNULIB_SINF)/g' \ - -e 's/@''GNULIB_SINL''@/$(GL_GNULIB_SINL)/g' \ - -e 's/@''GNULIB_SINHF''@/$(GL_GNULIB_SINHF)/g' \ - -e 's/@''GNULIB_SQRTF''@/$(GL_GNULIB_SQRTF)/g' \ - -e 's/@''GNULIB_SQRTL''@/$(GL_GNULIB_SQRTL)/g' \ - -e 's/@''GNULIB_TANF''@/$(GL_GNULIB_TANF)/g' \ - -e 's/@''GNULIB_TANL''@/$(GL_GNULIB_TANL)/g' \ - -e 's/@''GNULIB_TANHF''@/$(GL_GNULIB_TANHF)/g' \ - -e 's/@''GNULIB_TRUNC''@/$(GL_GNULIB_TRUNC)/g' \ - -e 's/@''GNULIB_TRUNCF''@/$(GL_GNULIB_TRUNCF)/g' \ - -e 's/@''GNULIB_TRUNCL''@/$(GL_GNULIB_TRUNCL)/g' \ - -e 's/@''GNULIB_MDA_J0''@/$(GL_GNULIB_MDA_J0)/g' \ - -e 's/@''GNULIB_MDA_J1''@/$(GL_GNULIB_MDA_J1)/g' \ - -e 's/@''GNULIB_MDA_JN''@/$(GL_GNULIB_MDA_JN)/g' \ - -e 's/@''GNULIB_MDA_Y0''@/$(GL_GNULIB_MDA_Y0)/g' \ - -e 's/@''GNULIB_MDA_Y1''@/$(GL_GNULIB_MDA_Y1)/g' \ - -e 's/@''GNULIB_MDA_YN''@/$(GL_GNULIB_MDA_YN)/g' \ - | \ - sed -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \ - -e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \ - -e 's|@''HAVE_ASINF''@|$(HAVE_ASINF)|g' \ - -e 's|@''HAVE_ASINL''@|$(HAVE_ASINL)|g' \ - -e 's|@''HAVE_ATANF''@|$(HAVE_ATANF)|g' \ - -e 's|@''HAVE_ATANL''@|$(HAVE_ATANL)|g' \ - -e 's|@''HAVE_ATAN2F''@|$(HAVE_ATAN2F)|g' \ - -e 's|@''HAVE_CBRT''@|$(HAVE_CBRT)|g' \ - -e 's|@''HAVE_CBRTF''@|$(HAVE_CBRTF)|g' \ - -e 's|@''HAVE_CBRTL''@|$(HAVE_CBRTL)|g' \ - -e 's|@''HAVE_COPYSIGN''@|$(HAVE_COPYSIGN)|g' \ - -e 's|@''HAVE_COPYSIGNL''@|$(HAVE_COPYSIGNL)|g' \ - -e 's|@''HAVE_COSF''@|$(HAVE_COSF)|g' \ - -e 's|@''HAVE_COSL''@|$(HAVE_COSL)|g' \ - -e 's|@''HAVE_COSHF''@|$(HAVE_COSHF)|g' \ - -e 's|@''HAVE_EXPF''@|$(HAVE_EXPF)|g' \ - -e 's|@''HAVE_EXPL''@|$(HAVE_EXPL)|g' \ - -e 's|@''HAVE_EXPM1''@|$(HAVE_EXPM1)|g' \ - -e 's|@''HAVE_EXPM1F''@|$(HAVE_EXPM1F)|g' \ - -e 's|@''HAVE_FABSF''@|$(HAVE_FABSF)|g' \ - -e 's|@''HAVE_FABSL''@|$(HAVE_FABSL)|g' \ - -e 's|@''HAVE_FMA''@|$(HAVE_FMA)|g' \ - -e 's|@''HAVE_FMAF''@|$(HAVE_FMAF)|g' \ - -e 's|@''HAVE_FMAL''@|$(HAVE_FMAL)|g' \ - -e 's|@''HAVE_FMODF''@|$(HAVE_FMODF)|g' \ - -e 's|@''HAVE_FMODL''@|$(HAVE_FMODL)|g' \ - -e 's|@''HAVE_FREXPF''@|$(HAVE_FREXPF)|g' \ - -e 's|@''HAVE_HYPOTF''@|$(HAVE_HYPOTF)|g' \ - -e 's|@''HAVE_HYPOTL''@|$(HAVE_HYPOTL)|g' \ - -e 's|@''HAVE_ILOGB''@|$(HAVE_ILOGB)|g' \ - -e 's|@''HAVE_ILOGBF''@|$(HAVE_ILOGBF)|g' \ - -e 's|@''HAVE_ILOGBL''@|$(HAVE_ILOGBL)|g' \ - -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \ - -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \ - -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \ - -e 's|@''HAVE_LDEXPF''@|$(HAVE_LDEXPF)|g' \ - -e 's|@''HAVE_LOGF''@|$(HAVE_LOGF)|g' \ - -e 's|@''HAVE_LOGL''@|$(HAVE_LOGL)|g' \ - -e 's|@''HAVE_LOG10F''@|$(HAVE_LOG10F)|g' \ - -e 's|@''HAVE_LOG10L''@|$(HAVE_LOG10L)|g' \ - -e 's|@''HAVE_LOG1P''@|$(HAVE_LOG1P)|g' \ - -e 's|@''HAVE_LOG1PF''@|$(HAVE_LOG1PF)|g' \ - -e 's|@''HAVE_LOG1PL''@|$(HAVE_LOG1PL)|g' \ - -e 's|@''HAVE_LOGBF''@|$(HAVE_LOGBF)|g' \ - -e 's|@''HAVE_LOGBL''@|$(HAVE_LOGBL)|g' \ - -e 's|@''HAVE_MODFF''@|$(HAVE_MODFF)|g' \ - -e 's|@''HAVE_MODFL''@|$(HAVE_MODFL)|g' \ - -e 's|@''HAVE_POWF''@|$(HAVE_POWF)|g' \ - -e 's|@''HAVE_REMAINDER''@|$(HAVE_REMAINDER)|g' \ - -e 's|@''HAVE_REMAINDERF''@|$(HAVE_REMAINDERF)|g' \ - -e 's|@''HAVE_RINT''@|$(HAVE_RINT)|g' \ - -e 's|@''HAVE_RINTL''@|$(HAVE_RINTL)|g' \ - -e 's|@''HAVE_SINF''@|$(HAVE_SINF)|g' \ - -e 's|@''HAVE_SINL''@|$(HAVE_SINL)|g' \ - -e 's|@''HAVE_SINHF''@|$(HAVE_SINHF)|g' \ - -e 's|@''HAVE_SQRTF''@|$(HAVE_SQRTF)|g' \ - -e 's|@''HAVE_SQRTL''@|$(HAVE_SQRTL)|g' \ - -e 's|@''HAVE_TANF''@|$(HAVE_TANF)|g' \ - -e 's|@''HAVE_TANL''@|$(HAVE_TANL)|g' \ - -e 's|@''HAVE_TANHF''@|$(HAVE_TANHF)|g' \ - -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \ - -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \ - -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \ - -e 's|@''HAVE_DECL_CBRTF''@|$(HAVE_DECL_CBRTF)|g' \ - -e 's|@''HAVE_DECL_CBRTL''@|$(HAVE_DECL_CBRTL)|g' \ - -e 's|@''HAVE_DECL_CEILF''@|$(HAVE_DECL_CEILF)|g' \ - -e 's|@''HAVE_DECL_CEILL''@|$(HAVE_DECL_CEILL)|g' \ - -e 's|@''HAVE_DECL_COPYSIGNF''@|$(HAVE_DECL_COPYSIGNF)|g' \ - -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \ - -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \ - -e 's|@''HAVE_DECL_EXP2''@|$(HAVE_DECL_EXP2)|g' \ - -e 's|@''HAVE_DECL_EXP2F''@|$(HAVE_DECL_EXP2F)|g' \ - -e 's|@''HAVE_DECL_EXP2L''@|$(HAVE_DECL_EXP2L)|g' \ - -e 's|@''HAVE_DECL_EXPM1L''@|$(HAVE_DECL_EXPM1L)|g' \ - -e 's|@''HAVE_DECL_FLOORF''@|$(HAVE_DECL_FLOORF)|g' \ - -e 's|@''HAVE_DECL_FLOORL''@|$(HAVE_DECL_FLOORL)|g' \ - -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \ - -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \ - -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \ - -e 's|@''HAVE_DECL_LOG10L''@|$(HAVE_DECL_LOG10L)|g' \ - -e 's|@''HAVE_DECL_LOG2''@|$(HAVE_DECL_LOG2)|g' \ - -e 's|@''HAVE_DECL_LOG2F''@|$(HAVE_DECL_LOG2F)|g' \ - -e 's|@''HAVE_DECL_LOG2L''@|$(HAVE_DECL_LOG2L)|g' \ - -e 's|@''HAVE_DECL_LOGB''@|$(HAVE_DECL_LOGB)|g' \ - -e 's|@''HAVE_DECL_REMAINDER''@|$(HAVE_DECL_REMAINDER)|g' \ - -e 's|@''HAVE_DECL_REMAINDERL''@|$(HAVE_DECL_REMAINDERL)|g' \ - -e 's|@''HAVE_DECL_RINTF''@|$(HAVE_DECL_RINTF)|g' \ - -e 's|@''HAVE_DECL_ROUND''@|$(HAVE_DECL_ROUND)|g' \ - -e 's|@''HAVE_DECL_ROUNDF''@|$(HAVE_DECL_ROUNDF)|g' \ - -e 's|@''HAVE_DECL_ROUNDL''@|$(HAVE_DECL_ROUNDL)|g' \ - -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \ - -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \ - -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \ - -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \ - -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ - -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \ - | \ - sed -e 's|@''REPLACE_ACOSF''@|$(REPLACE_ACOSF)|g' \ - -e 's|@''REPLACE_ASINF''@|$(REPLACE_ASINF)|g' \ - -e 's|@''REPLACE_ATANF''@|$(REPLACE_ATANF)|g' \ - -e 's|@''REPLACE_ATAN2F''@|$(REPLACE_ATAN2F)|g' \ - -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \ - -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \ - -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \ - -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ - -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ - -e 's|@''REPLACE_COSF''@|$(REPLACE_COSF)|g' \ - -e 's|@''REPLACE_COSHF''@|$(REPLACE_COSHF)|g' \ - -e 's|@''REPLACE_EXPF''@|$(REPLACE_EXPF)|g' \ - -e 's|@''REPLACE_EXPL''@|$(REPLACE_EXPL)|g' \ - -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \ - -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \ - -e 's|@''REPLACE_EXPM1L''@|$(REPLACE_EXPM1L)|g' \ - -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \ - -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \ - -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \ - -e 's|@''REPLACE_FLOOR''@|$(REPLACE_FLOOR)|g' \ - -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \ - -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \ - -e 's|@''REPLACE_FMA''@|$(REPLACE_FMA)|g' \ - -e 's|@''REPLACE_FMAF''@|$(REPLACE_FMAF)|g' \ - -e 's|@''REPLACE_FMAL''@|$(REPLACE_FMAL)|g' \ - -e 's|@''REPLACE_FMOD''@|$(REPLACE_FMOD)|g' \ - -e 's|@''REPLACE_FMODF''@|$(REPLACE_FMODF)|g' \ - -e 's|@''REPLACE_FMODL''@|$(REPLACE_FMODL)|g' \ - -e 's|@''REPLACE_FREXPF''@|$(REPLACE_FREXPF)|g' \ - -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \ - -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \ - -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \ - -e 's|@''REPLACE_HYPOT''@|$(REPLACE_HYPOT)|g' \ - -e 's|@''REPLACE_HYPOTF''@|$(REPLACE_HYPOTF)|g' \ - -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \ - -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \ - -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \ - -e 's|@''REPLACE_ILOGBL''@|$(REPLACE_ILOGBL)|g' \ - -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ - -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ - -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ - -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ - -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \ - -e 's|@''REPLACE_LOG''@|$(REPLACE_LOG)|g' \ - -e 's|@''REPLACE_LOGF''@|$(REPLACE_LOGF)|g' \ - -e 's|@''REPLACE_LOGL''@|$(REPLACE_LOGL)|g' \ - -e 's|@''REPLACE_LOG10''@|$(REPLACE_LOG10)|g' \ - -e 's|@''REPLACE_LOG10F''@|$(REPLACE_LOG10F)|g' \ - -e 's|@''REPLACE_LOG10L''@|$(REPLACE_LOG10L)|g' \ - -e 's|@''REPLACE_LOG1P''@|$(REPLACE_LOG1P)|g' \ - -e 's|@''REPLACE_LOG1PF''@|$(REPLACE_LOG1PF)|g' \ - -e 's|@''REPLACE_LOG1PL''@|$(REPLACE_LOG1PL)|g' \ - -e 's|@''REPLACE_LOG2''@|$(REPLACE_LOG2)|g' \ - -e 's|@''REPLACE_LOG2F''@|$(REPLACE_LOG2F)|g' \ - -e 's|@''REPLACE_LOG2L''@|$(REPLACE_LOG2L)|g' \ - -e 's|@''REPLACE_LOGB''@|$(REPLACE_LOGB)|g' \ - -e 's|@''REPLACE_LOGBF''@|$(REPLACE_LOGBF)|g' \ - -e 's|@''REPLACE_LOGBL''@|$(REPLACE_LOGBL)|g' \ - -e 's|@''REPLACE_MODF''@|$(REPLACE_MODF)|g' \ - -e 's|@''REPLACE_MODFF''@|$(REPLACE_MODFF)|g' \ - -e 's|@''REPLACE_MODFL''@|$(REPLACE_MODFL)|g' \ - -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \ - -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \ - -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \ - -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \ - -e 's|@''REPLACE_RINTL''@|$(REPLACE_RINTL)|g' \ - -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ - -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ - -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ - -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ - -e 's|@''REPLACE_SIGNBIT_USING_BUILTINS''@|$(REPLACE_SIGNBIT_USING_BUILTINS)|g' \ - -e 's|@''REPLACE_SINF''@|$(REPLACE_SINF)|g' \ - -e 's|@''REPLACE_SINHF''@|$(REPLACE_SINHF)|g' \ - -e 's|@''REPLACE_SQRTF''@|$(REPLACE_SQRTF)|g' \ - -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \ - -e 's|@''REPLACE_TANF''@|$(REPLACE_TANF)|g' \ - -e 's|@''REPLACE_TANHF''@|$(REPLACE_TANHF)|g' \ - -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \ - -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \ - -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - > $@-t - $(AM_V_at)mv $@-t $@ -MOSTLYCLEANFILES += math.h math.h-t - -EXTRA_DIST += math.in.h - -endif -## end gnulib module math - ## begin gnulib module memmem-simple ifeq (,$(OMIT_GNULIB_MODULE_memmem-simple)) @@ -3490,39 +2770,6 @@ libgnu_a_SOURCES += pipe2.c endif ## end gnulib module pipe2 -## begin gnulib module printf-frexp -ifeq (,$(OMIT_GNULIB_MODULE_printf-frexp)) - -libgnu_a_SOURCES += printf-frexp.c - -EXTRA_DIST += printf-frexp.h - -endif -## end gnulib module printf-frexp - -## begin gnulib module printf-frexpl -ifeq (,$(OMIT_GNULIB_MODULE_printf-frexpl)) - -libgnu_a_SOURCES += printf-frexpl.c - -EXTRA_DIST += printf-frexp.c printf-frexpl.h - -EXTRA_libgnu_a_SOURCES += printf-frexp.c - -endif -## end gnulib module printf-frexpl - -## begin gnulib module printf-posix -ifeq (,$(OMIT_GNULIB_MODULE_printf-posix)) - - -EXTRA_DIST += printf.c - -EXTRA_libgnu_a_SOURCES += printf.c - -endif -## end gnulib module printf-posix - ## begin gnulib module pselect ifeq (,$(OMIT_GNULIB_MODULE_pselect)) @@ -3704,28 +2951,6 @@ EXTRA_DIST += signal.in.h endif ## end gnulib module signal-h -## begin gnulib module signbit -ifeq (,$(OMIT_GNULIB_MODULE_signbit)) - -ifneq (,$(GL_COND_OBJ_SIGNBIT3_CONDITION)) -libgnu_a_SOURCES += signbitf.c signbitd.c signbitl.c -endif - -EXTRA_DIST += float+.h - -endif -## end gnulib module signbit - -## begin gnulib module size_max -ifeq (,$(OMIT_GNULIB_MODULE_size_max)) - -ifneq (,$(gl_GNULIB_ENABLED_size_max_CONDITION)) -libgnu_a_SOURCES += size_max.h - -endif -endif -## end gnulib module size_max - ## begin gnulib module snippet/_Noreturn ifeq (,$(OMIT_GNULIB_MODULE_snippet/_Noreturn)) @@ -3970,8 +3195,9 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) -e 's/@''GNULIB_MDA_GETW''@/$(GL_GNULIB_MDA_GETW)/g' \ -e 's/@''GNULIB_MDA_PUTW''@/$(GL_GNULIB_MDA_PUTW)/g' \ -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GL_GNULIB_MDA_TEMPNAM)/g' \ - < $(srcdir)/stdio.in.h | \ - sed -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \ + < $(srcdir)/stdio.in.h > $@-t1 + $(AM_V_at)sed \ + -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \ -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ @@ -3990,6 +3216,8 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ + < $@-t1 > $@-t2 + $(AM_V_at)sed \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ @@ -4027,9 +3255,10 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - > $@-t - $(AM_V_at)mv $@-t $@ -MOSTLYCLEANFILES += stdio.h stdio.h-t + < $@-t2 > $@-t3 + $(AM_V_at)rm -f $@-t1 $@-t2 + $(AM_V_at)mv $@-t3 $@ +MOSTLYCLEANFILES += stdio.h stdio.h-t1 stdio.h-t2 stdio.h-t3 ifneq (,$(GL_COND_OBJ_STDIO_READ_CONDITION)) libgnu_a_SOURCES += stdio-read.c @@ -4108,8 +3337,9 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ -e 's/@''GNULIB_MDA_GCVT''@/$(GL_GNULIB_MDA_GCVT)/g' \ -e 's/@''GNULIB_MDA_MKTEMP''@/$(GL_GNULIB_MDA_MKTEMP)/g' \ -e 's/@''GNULIB_MDA_PUTENV''@/$(GL_GNULIB_MDA_PUTENV)/g' \ - < $(srcdir)/stdlib.in.h | \ - sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ + < $(srcdir)/stdlib.in.h > $@-t1 + $(AM_V_at)sed \ + -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ -e 's|@''HAVE_ALIGNED_ALLOC''@|$(HAVE_ALIGNED_ALLOC)|g' \ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ @@ -4154,6 +3384,8 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ + < $@-t1 > $@-t2 + $(AM_V_at)sed \ -e 's|@''REPLACE__EXIT''@|$(REPLACE__EXIT)|g' \ -e 's|@''REPLACE_ALIGNED_ALLOC''@|$(REPLACE_ALIGNED_ALLOC)|g' \ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_GNU''@|$(REPLACE_CALLOC_FOR_CALLOC_GNU)|g' \ @@ -4198,9 +3430,10 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ -e '/definition of _Noreturn/r $(_NORETURN_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - > $@-t - $(AM_V_at)mv $@-t $@ -MOSTLYCLEANFILES += stdlib.h stdlib.h-t + < $@-t2 > $@-t3 + $(AM_V_at)rm -f $@-t1 $@-t2 + $(AM_V_at)mv $@-t3 $@ +MOSTLYCLEANFILES += stdlib.h stdlib.h-t1 stdlib.h-t2 stdlib.h-t3 EXTRA_DIST += stdlib.in.h @@ -4286,8 +3519,9 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H -e 's/@''GNULIB_MDA_MEMCCPY''@/$(GL_GNULIB_MDA_MEMCCPY)/g' \ -e 's/@''GNULIB_MDA_STRDUP''@/$(GL_GNULIB_MDA_STRDUP)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ - < $(srcdir)/string.in.h | \ - sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ + < $(srcdir)/string.in.h > $@-t1 + $(AM_V_at)sed \ + -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ @@ -4335,9 +3569,10 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - > $@-t - $(AM_V_at)mv $@-t $@ -MOSTLYCLEANFILES += string.h string.h-t + < $@-t1 > $@-t2 + $(AM_V_at)rm -f $@-t1 + $(AM_V_at)mv $@-t2 $@ +MOSTLYCLEANFILES += string.h string.h-t1 string.h-t2 EXTRA_DIST += string.in.h @@ -4774,6 +4009,8 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H -e 's/@''GNULIB_FDATASYNC''@/$(GL_GNULIB_FDATASYNC)/g' \ -e 's/@''GNULIB_FSYNC''@/$(GL_GNULIB_FSYNC)/g' \ -e 's/@''GNULIB_FTRUNCATE''@/$(GL_GNULIB_FTRUNCATE)/g' \ + < $(srcdir)/unistd.in.h > $@-t1 + $(AM_V_at)sed \ -e 's/@''GNULIB_GETCWD''@/$(GL_GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GL_GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GL_GNULIB_GETDTABLESIZE)/g' \ @@ -4835,8 +4072,9 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H -e 's/@''GNULIB_MDA_SWAB''@/$(GL_GNULIB_MDA_SWAB)/g' \ -e 's/@''GNULIB_MDA_UNLINK''@/$(GL_GNULIB_MDA_UNLINK)/g' \ -e 's/@''GNULIB_MDA_WRITE''@/$(GL_GNULIB_MDA_WRITE)/g' \ - < $(srcdir)/unistd.in.h | \ - sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ + < $@-t1 > $@-t2 + $(AM_V_at)sed \ + -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ -e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ @@ -4883,8 +4121,9 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ - | \ - sed -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \ + < $@-t2 > $@-t3 + $(AM_V_at)sed \ + -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \ -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_COPY_FILE_RANGE''@|$(REPLACE_COPY_FILE_RANGE)|g' \ @@ -4939,9 +4178,10 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - > $@-t - $(AM_V_at)mv $@-t $@ -MOSTLYCLEANFILES += unistd.h unistd.h-t + < $@-t3 > $@-t4 + $(AM_V_at)rm -f $@-t1 $@-t2 $@-t3 + $(AM_V_at)mv $@-t4 $@ +MOSTLYCLEANFILES += unistd.h unistd.h-t1 unistd.h-t2 unistd.h-t3 unistd.h-t4 EXTRA_DIST += unistd.in.h @@ -4992,30 +4232,6 @@ EXTRA_libgnu_a_SOURCES += at-func.c endif ## end gnulib module utimensat -## begin gnulib module vasnprintf -ifeq (,$(OMIT_GNULIB_MODULE_vasnprintf)) - -ifneq (,$(gl_GNULIB_ENABLED_vasnprintf_CONDITION)) - -endif -EXTRA_DIST += asnprintf.c float+.h printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h - -EXTRA_libgnu_a_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c - -endif -## end gnulib module vasnprintf - -## begin gnulib module vasprintf -ifeq (,$(OMIT_GNULIB_MODULE_vasprintf)) - - -EXTRA_DIST += asprintf.c vasprintf.c - -EXTRA_libgnu_a_SOURCES += asprintf.c vasprintf.c - -endif -## end gnulib module vasprintf - ## begin gnulib module verify ifeq (,$(OMIT_GNULIB_MODULE_verify)) @@ -5025,19 +4241,6 @@ EXTRA_DIST += verify.h endif ## end gnulib module verify -## begin gnulib module vfprintf-posix -ifeq (,$(OMIT_GNULIB_MODULE_vfprintf-posix)) - -ifneq (,$(gl_GNULIB_ENABLED_ed5616be3593d355b981ffab56b9f37b_CONDITION)) - -endif -EXTRA_DIST += vfprintf.c - -EXTRA_libgnu_a_SOURCES += vfprintf.c - -endif -## end gnulib module vfprintf-posix - ## begin gnulib module vla ifeq (,$(OMIT_GNULIB_MODULE_vla)) @@ -5058,16 +4261,6 @@ EXTRA_DIST += xalloc-oversized.h endif ## end gnulib module xalloc-oversized -## begin gnulib module xsize -ifeq (,$(OMIT_GNULIB_MODULE_xsize)) - -ifneq (,$(gl_GNULIB_ENABLED_xsize_CONDITION)) -libgnu_a_SOURCES += xsize.h xsize.c - -endif -endif -## end gnulib module xsize - mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ diff --git a/lib/isnan.c b/lib/isnan.c deleted file mode 100644 index 39e193b9606..00000000000 --- a/lib/isnan.c +++ /dev/null @@ -1,190 +0,0 @@ -/* Test for NaN that does not need libm. - Copyright (C) 2007-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -/* Specification. */ -#ifdef USE_LONG_DOUBLE -/* Specification found in math.h or isnanl-nolibm.h. */ -extern int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST; -#elif ! defined USE_FLOAT -/* Specification found in math.h or isnand-nolibm.h. */ -extern int rpl_isnand (double x); -#else /* defined USE_FLOAT */ -/* Specification found in math.h or isnanf-nolibm.h. */ -extern int rpl_isnanf (float x); -#endif - -#include -#include - -#include "float+.h" - -#ifdef USE_LONG_DOUBLE -# define FUNC rpl_isnanl -# define DOUBLE long double -# define MAX_EXP LDBL_MAX_EXP -# define MIN_EXP LDBL_MIN_EXP -# if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT -# define KNOWN_EXPBIT0_LOCATION -# define EXPBIT0_WORD LDBL_EXPBIT0_WORD -# define EXPBIT0_BIT LDBL_EXPBIT0_BIT -# endif -# define SIZE SIZEOF_LDBL -# define L_(literal) literal##L -#elif ! defined USE_FLOAT -# define FUNC rpl_isnand -# define DOUBLE double -# define MAX_EXP DBL_MAX_EXP -# define MIN_EXP DBL_MIN_EXP -# if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT -# define KNOWN_EXPBIT0_LOCATION -# define EXPBIT0_WORD DBL_EXPBIT0_WORD -# define EXPBIT0_BIT DBL_EXPBIT0_BIT -# endif -# define SIZE SIZEOF_DBL -# define L_(literal) literal -#else /* defined USE_FLOAT */ -# define FUNC rpl_isnanf -# define DOUBLE float -# define MAX_EXP FLT_MAX_EXP -# define MIN_EXP FLT_MIN_EXP -# if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT -# define KNOWN_EXPBIT0_LOCATION -# define EXPBIT0_WORD FLT_EXPBIT0_WORD -# define EXPBIT0_BIT FLT_EXPBIT0_BIT -# endif -# define SIZE SIZEOF_FLT -# define L_(literal) literal##f -#endif - -#define EXP_MASK ((MAX_EXP - MIN_EXP) | 7) - -#define NWORDS \ - ((sizeof (DOUBLE) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -typedef union { DOUBLE value; unsigned int word[NWORDS]; } memory_double; - -/* Most hosts nowadays use IEEE floating point, so they use IEC 60559 - representations, have infinities and NaNs, and do not trap on - exceptions. Define IEEE_FLOATING_POINT if this host is one of the - typical ones. The C23 macro __STDC_IEC_60559_BFP__ macro (or its cousin, - the now-obsolescent C11 macro __STDC_IEC_559__) is close to what is - wanted here, but is not quite right because this file does not require - all the features of C23 Annex F (and works even with pre-C11 platforms, - for that matter). */ - -#define IEEE_FLOATING_POINT (FLT_RADIX == 2 && FLT_MANT_DIG == 24 \ - && FLT_MIN_EXP == -125 && FLT_MAX_EXP == 128) - -int -FUNC (DOUBLE x) -{ -#if defined KNOWN_EXPBIT0_LOCATION && IEEE_FLOATING_POINT -# if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE - /* Special CPU dependent code is needed to treat bit patterns outside the - IEEE 754 specification (such as Pseudo-NaNs, Pseudo-Infinities, - Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals) as NaNs. - These bit patterns are: - - exponent = 0x0001..0x7FFF, mantissa bit 63 = 0, - - exponent = 0x0000, mantissa bit 63 = 1. - The NaN bit pattern is: - - exponent = 0x7FFF, mantissa >= 0x8000000000000001. */ - memory_double m; - unsigned int exponent; - - m.value = x; - exponent = (m.word[EXPBIT0_WORD] >> EXPBIT0_BIT) & EXP_MASK; -# ifdef WORDS_BIGENDIAN - /* Big endian: EXPBIT0_WORD = 0, EXPBIT0_BIT = 16. */ - if (exponent == 0) - return 1 & (m.word[0] >> 15); - else if (exponent == EXP_MASK) - return (((m.word[0] ^ 0x8000U) << 16) | m.word[1] | (m.word[2] >> 16)) != 0; - else - return 1 & ~(m.word[0] >> 15); -# else - /* Little endian: EXPBIT0_WORD = 2, EXPBIT0_BIT = 0. */ - if (exponent == 0) - return (m.word[1] >> 31); - else if (exponent == EXP_MASK) - return ((m.word[1] ^ 0x80000000U) | m.word[0]) != 0; - else - return (m.word[1] >> 31) ^ 1; -# endif -# else - /* Be careful to not do any floating-point operation on x, such as x == x, - because x may be a signaling NaN. */ -# if defined __SUNPRO_C || defined __ICC || defined _MSC_VER \ - || defined __DECC || defined __TINYC__ \ - || (defined __sgi && !defined __GNUC__) - /* The Sun C 5.0, Intel ICC 10.0, Microsoft Visual C/C++ 9.0, Compaq (ex-DEC) - 6.4, and TinyCC compilers don't recognize the initializers as constant - expressions. The Compaq compiler also fails when constant-folding - 0.0 / 0.0 even when constant-folding is not required. The Microsoft - Visual C/C++ compiler also fails when constant-folding 1.0 / 0.0 even - when constant-folding is not required. The SGI MIPSpro C compiler - complains about "floating-point operation result is out of range". */ - static DOUBLE zero = L_(0.0); - memory_double nan; - DOUBLE plus_inf = L_(1.0) / zero; - DOUBLE minus_inf = -L_(1.0) / zero; - nan.value = zero / zero; -# else - static memory_double nan = { L_(0.0) / L_(0.0) }; - static DOUBLE plus_inf = L_(1.0) / L_(0.0); - static DOUBLE minus_inf = -L_(1.0) / L_(0.0); -# endif - { - memory_double m; - - /* A NaN can be recognized through its exponent. But exclude +Infinity and - -Infinity, which have the same exponent. */ - m.value = x; - if (((m.word[EXPBIT0_WORD] ^ nan.word[EXPBIT0_WORD]) - & (EXP_MASK << EXPBIT0_BIT)) - == 0) - return (memcmp (&m.value, &plus_inf, SIZE) != 0 - && memcmp (&m.value, &minus_inf, SIZE) != 0); - else - return 0; - } -# endif -#else - /* The configuration did not find sufficient information, or does - not use IEEE floating point. Give up about the signaling NaNs; - handle only the quiet NaNs. */ - if (x == x) - { -# if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE - /* Detect any special bit patterns that pass ==; see comment above. */ - memory_double m1; - memory_double m2; - - memset (&m1.value, 0, SIZE); - memset (&m2.value, 0, SIZE); - m1.value = x; - m2.value = x + (x ? 0.0L : -0.0L); - if (memcmp (&m1.value, &m2.value, SIZE) != 0) - return 1; -# endif - return 0; - } - else - return 1; -#endif -} diff --git a/lib/isnand-nolibm.h b/lib/isnand-nolibm.h deleted file mode 100644 index bb5a38b39f0..00000000000 --- a/lib/isnand-nolibm.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Test for NaN that does not need libm. - Copyright (C) 2007-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* This file uses HAVE_ISNAND_IN_LIBC. */ -#if !_GL_CONFIG_H_INCLUDED - #error "Please include config.h first." -#endif - -#if HAVE_ISNAND_IN_LIBC -/* Get declaration of isnan macro. */ -# include -# if (__GNUC__ >= 4) || (__clang_major__ >= 4) - /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. */ -# undef isnand -# define isnand(x) __builtin_isnan ((double)(x)) -# else -# undef isnand -# define isnand(x) isnan ((double)(x)) -# endif -#else -/* Test whether X is a NaN. */ -# undef isnand -# define isnand rpl_isnand -extern int isnand (double x); -#endif diff --git a/lib/isnand.c b/lib/isnand.c deleted file mode 100644 index e14d2e6fb29..00000000000 --- a/lib/isnand.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Test for NaN that does not need libm. - Copyright (C) 2008-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2008. */ - -#include "isnan.c" diff --git a/lib/isnanf-nolibm.h b/lib/isnanf-nolibm.h deleted file mode 100644 index f4bcba143e6..00000000000 --- a/lib/isnanf-nolibm.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Test for NaN that does not need libm. - Copyright (C) 2007-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* This file uses HAVE_ISNANF_IN_LIBC. */ -#if !_GL_CONFIG_H_INCLUDED - #error "Please include config.h first." -#endif - -#if HAVE_ISNANF_IN_LIBC -/* Get declaration of isnan macro or (older) isnanf function. */ -# include -# if (__GNUC__ >= 4) || (__clang_major__ >= 4) - /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. - GCC >= 4.0 also provides __builtin_isnanf, but clang doesn't. */ -# undef isnanf -# define isnanf(x) __builtin_isnan ((float)(x)) -# elif defined isnan -# undef isnanf -# define isnanf(x) isnan ((float)(x)) -# else - /* Get declaration of isnanf(), if not declared in . */ -# if defined __sgi - /* We can't include , because it conflicts with our definition of - isnand. Therefore declare isnanf separately. */ -extern int isnanf (float x); -# endif -# endif -#else -/* Test whether X is a NaN. */ -# undef isnanf -# define isnanf rpl_isnanf -extern int isnanf (float x); -#endif diff --git a/lib/isnanf.c b/lib/isnanf.c deleted file mode 100644 index 55252ca6d6e..00000000000 --- a/lib/isnanf.c +++ /dev/null @@ -1,20 +0,0 @@ -/* Test for NaN that does not need libm. - Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#define USE_FLOAT -#include "isnan.c" diff --git a/lib/isnanl-nolibm.h b/lib/isnanl-nolibm.h deleted file mode 100644 index 8becc5b409e..00000000000 --- a/lib/isnanl-nolibm.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Test for NaN that does not need libm. - Copyright (C) 2007-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* This file uses HAVE_ISNANL_IN_LIBC. */ -#if !_GL_CONFIG_H_INCLUDED - #error "Please include config.h first." -#endif - -#if HAVE_ISNANL_IN_LIBC -/* Get declaration of isnan macro or (older) isnanl function. */ -# include -# if (__GNUC__ >= 4) || (__clang_major__ >= 4) - /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. - GCC >= 4.0 also provides __builtin_isnanl, but clang doesn't. */ -# undef isnanl -# define isnanl(x) __builtin_isnan ((long double)(x)) -# elif defined isnan -# undef isnanl -# define isnanl(x) isnan ((long double)(x)) -# endif -#else -/* Test whether X is a NaN. */ -# undef isnanl -# define isnanl rpl_isnanl -extern int isnanl (long double x); -#endif diff --git a/lib/isnanl.c b/lib/isnanl.c deleted file mode 100644 index 286f245097e..00000000000 --- a/lib/isnanl.c +++ /dev/null @@ -1,20 +0,0 @@ -/* Test for NaN that does not need libm. - Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#define USE_LONG_DOUBLE -#include "isnan.c" diff --git a/lib/itold.c b/lib/itold.c deleted file mode 100644 index 0ef4464eead..00000000000 --- a/lib/itold.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Replacement for 'int' to 'long double' conversion routine. - Copyright (C) 2011-2023 Free Software Foundation, Inc. - Written by Bruno Haible , 2011. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include - -void -_Qp_itoq (long double *result, int a) -{ - /* Convert from 'int' to 'double', then from 'double' to 'long double'. */ - *result = (double) a; -} diff --git a/lib/math.c b/lib/math.c deleted file mode 100644 index 67cabbcf8f2..00000000000 --- a/lib/math.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Inline functions for . - - Copyright (C) 2012-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -#define _GL_MATH_INLINE _GL_EXTERN_INLINE -#include "math.h" -typedef int dummy; diff --git a/lib/math.in.h b/lib/math.in.h deleted file mode 100644 index f841a1356e4..00000000000 --- a/lib/math.in.h +++ /dev/null @@ -1,2743 +0,0 @@ -/* A GNU-like . - - Copyright (C) 2002-2003, 2007-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* On Android, in C++ mode, when /usr/include/c++/v1/math.h is being included - and /usr/include/math.h has not yet been included, skip this file, since it - would lead to many syntax errors. */ -#if !(defined __ANDROID__ && defined _LIBCPP_MATH_H && !defined INFINITY) - -#ifndef _@GUARD_PREFIX@_MATH_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if defined _GL_INCLUDING_MATH_H -/* Special invocation convention: - - On FreeBSD 12.2 we have a sequence of nested includes - -> -> -> -> - -> -> -> -> - In this situation, the functions are not yet declared, therefore we cannot - provide the C++ aliases. */ - -#@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ - -#else -/* Normal invocation convention. */ - -/* The include_next requires a split double-inclusion guard. */ -#define _GL_INCLUDING_MATH_H -#@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ -#undef _GL_INCLUDING_MATH_H - -#ifndef _@GUARD_PREFIX@_MATH_H -#define _@GUARD_PREFIX@_MATH_H - -/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_CONST, - GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ -#if !_GL_CONFIG_H_INCLUDED - #error "Please include config.h first." -#endif - -/* On OpenVMS, NAN, INFINITY, and HUGEVAL macros are defined in . */ -#if defined __VMS && ! defined NAN -# include -#endif - -_GL_INLINE_HEADER_BEGIN -#ifndef _GL_MATH_INLINE -# define _GL_MATH_INLINE _GL_INLINE -#endif - -/* The __attribute__ feature is available in gcc versions 2.5 and later. - The attribute __const__ was added in gcc 2.95. */ -#ifndef _GL_ATTRIBUTE_CONST -# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) || defined __clang__ -# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) -# else -# define _GL_ATTRIBUTE_CONST /* empty */ -# endif -#endif - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - -#ifdef __cplusplus -/* Helper macros to define type-generic function FUNC as overloaded functions, - rather than as macros like in C. POSIX declares these with an argument of - real-floating (that is, one of float, double, or long double). */ -# define _GL_MATH_CXX_REAL_FLOATING_DECL_1(func) \ -static inline int \ -_gl_cxx_ ## func ## f (float f) \ -{ \ - return func (f); \ -} \ -static inline int \ -_gl_cxx_ ## func ## d (double d) \ -{ \ - return func (d); \ -} \ -static inline int \ -_gl_cxx_ ## func ## l (long double l) \ -{ \ - return func (l); \ -} -# define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func,rpl_func,rettype) \ -_GL_BEGIN_NAMESPACE \ -inline rettype \ -rpl_func (float f) \ -{ \ - return _gl_cxx_ ## func ## f (f); \ -} \ -inline rettype \ -rpl_func (double d) \ -{ \ - return _gl_cxx_ ## func ## d (d); \ -} \ -inline rettype \ -rpl_func (long double l) \ -{ \ - return _gl_cxx_ ## func ## l (l); \ -} \ -_GL_END_NAMESPACE -#endif - -/* Helper macros to define a portability warning for the - classification macro FUNC called with VALUE. POSIX declares the - classification macros with an argument of real-floating (that is, - one of float, double, or long double). */ -#define _GL_WARN_REAL_FLOATING_DECL(func) \ -_GL_MATH_INLINE int \ -_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ - "use gnulib module " #func " for portability") \ -rpl_ ## func ## f (float f) \ -{ \ - return func (f); \ -} \ -_GL_MATH_INLINE int \ -_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ - "use gnulib module " #func " for portability") \ -rpl_ ## func ## d (double d) \ -{ \ - return func (d); \ -} \ -_GL_MATH_INLINE int \ -_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ - "use gnulib module " #func " for portability") \ -rpl_ ## func ## l (long double l) \ -{ \ - return func (l); \ -} -#define _GL_WARN_REAL_FLOATING_IMPL(func, value) \ - (sizeof (value) == sizeof (float) ? rpl_ ## func ## f (value) \ - : sizeof (value) == sizeof (double) ? rpl_ ## func ## d (value) \ - : rpl_ ## func ## l (value)) - - -#if @REPLACE_ITOLD@ -/* Pull in a function that fixes the 'int' to 'long double' conversion - of glibc 2.7. */ -_GL_EXTERN_C void _Qp_itoq (long double *, int); -static void (*_gl_math_fix_itold) (long double *, int) = _Qp_itoq; -#endif - - -/* POSIX allows platforms that don't support NAN. But all major - machines in the past 15 years have supported something close to - IEEE NaN, so we define this unconditionally. We also must define - it on platforms like Solaris 10, where NAN is present but defined - as a function pointer rather than a floating point constant. */ -#if !defined NAN || @REPLACE_NAN@ -# if !GNULIB_defined_NAN -# undef NAN - /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler - choke on the expression 0.0 / 0.0. */ -# if defined __DECC || defined _MSC_VER -_GL_MATH_INLINE float -_NaN () -{ - static float zero = 0.0f; - return zero / zero; -} -# define NAN (_NaN()) -# else -# define NAN (0.0f / 0.0f) -# endif -# define GNULIB_defined_NAN 1 -# endif -#endif - -/* Solaris 10 defines HUGE_VAL, but as a function pointer rather - than a floating point constant. */ -#if @REPLACE_HUGE_VAL@ -# undef HUGE_VALF -# define HUGE_VALF (1.0f / 0.0f) -# undef HUGE_VAL -# define HUGE_VAL (1.0 / 0.0) -# undef HUGE_VALL -# define HUGE_VALL (1.0L / 0.0L) -#endif - -/* HUGE_VALF is a 'float' Infinity. */ -#ifndef HUGE_VALF -# if defined _MSC_VER -/* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f. */ -# define HUGE_VALF (1e25f * 1e25f) -# else -# define HUGE_VALF (1.0f / 0.0f) -# endif -#endif - -/* HUGE_VAL is a 'double' Infinity. */ -#ifndef HUGE_VAL -# if defined _MSC_VER -/* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0. */ -# define HUGE_VAL (1e250 * 1e250) -# else -# define HUGE_VAL (1.0 / 0.0) -# endif -#endif - -/* HUGE_VALL is a 'long double' Infinity. */ -#ifndef HUGE_VALL -# if defined _MSC_VER -/* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L. */ -# define HUGE_VALL (1e250L * 1e250L) -# else -# define HUGE_VALL (1.0L / 0.0L) -# endif -#endif - - -#if defined FP_ILOGB0 && defined FP_ILOGBNAN - /* Ensure FP_ILOGB0 and FP_ILOGBNAN are correct. */ -# if defined __HAIKU__ - /* Haiku: match what ilogb() does */ -# undef FP_ILOGB0 -# undef FP_ILOGBNAN -# define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ -# define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ -# endif -#else - /* Ensure FP_ILOGB0 and FP_ILOGBNAN are defined. */ -# if defined __NetBSD__ || defined __sgi - /* NetBSD, IRIX 6.5: match what ilogb() does */ -# define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ -# define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ -# elif defined _AIX - /* AIX 5.1: match what ilogb() does in AIX >= 5.2 */ -# define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ -# define FP_ILOGBNAN 2147483647 /* INT_MAX */ -# elif defined __sun - /* Solaris 9: match what ilogb() does */ -# define FP_ILOGB0 (- 2147483647) /* - INT_MAX */ -# define FP_ILOGBNAN 2147483647 /* INT_MAX */ -# else - /* Gnulib defined values. */ -# define FP_ILOGB0 (- 2147483647) /* - INT_MAX */ -# define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ -# endif -#endif - - -#if @GNULIB_ACOSF@ -# if @REPLACE_ACOSF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef acosf -# define acosf rpl_acosf -# endif -_GL_FUNCDECL_RPL (acosf, float, (float x)); -_GL_CXXALIAS_RPL (acosf, float, (float x)); -# else -# if !@HAVE_ACOSF@ -# undef acosf -_GL_FUNCDECL_SYS (acosf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (acosf, float, (float x)); -# endif -_GL_CXXALIASWARN (acosf); -#elif defined GNULIB_POSIXCHECK -# undef acosf -# if HAVE_RAW_DECL_ACOSF -_GL_WARN_ON_USE (acosf, "acosf is unportable - " - "use gnulib module acosf for portability"); -# endif -#endif - -#if @GNULIB_ACOSL@ -# if !@HAVE_ACOSL@ || !@HAVE_DECL_ACOSL@ -# undef acosl -_GL_FUNCDECL_SYS (acosl, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (acosl, long double, (long double x)); -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (acosl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef acosl -# if HAVE_RAW_DECL_ACOSL -_GL_WARN_ON_USE (acosl, "acosl is unportable - " - "use gnulib module acosl for portability"); -# endif -#endif - - -#if @GNULIB_ASINF@ -# if @REPLACE_ASINF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef asinf -# define asinf rpl_asinf -# endif -_GL_FUNCDECL_RPL (asinf, float, (float x)); -_GL_CXXALIAS_RPL (asinf, float, (float x)); -# else -# if !@HAVE_ASINF@ -# undef asinf -_GL_FUNCDECL_SYS (asinf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (asinf, float, (float x)); -# endif -_GL_CXXALIASWARN (asinf); -#elif defined GNULIB_POSIXCHECK -# undef asinf -# if HAVE_RAW_DECL_ASINF -_GL_WARN_ON_USE (asinf, "asinf is unportable - " - "use gnulib module asinf for portability"); -# endif -#endif - -#if @GNULIB_ASINL@ -# if !@HAVE_ASINL@ || !@HAVE_DECL_ASINL@ -# undef asinl -_GL_FUNCDECL_SYS (asinl, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (asinl, long double, (long double x)); -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (asinl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef asinl -# if HAVE_RAW_DECL_ASINL -_GL_WARN_ON_USE (asinl, "asinl is unportable - " - "use gnulib module asinl for portability"); -# endif -#endif - - -#if @GNULIB_ATANF@ -# if @REPLACE_ATANF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef atanf -# define atanf rpl_atanf -# endif -_GL_FUNCDECL_RPL (atanf, float, (float x)); -_GL_CXXALIAS_RPL (atanf, float, (float x)); -# else -# if !@HAVE_ATANF@ -# undef atanf -_GL_FUNCDECL_SYS (atanf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (atanf, float, (float x)); -# endif -_GL_CXXALIASWARN (atanf); -#elif defined GNULIB_POSIXCHECK -# undef atanf -# if HAVE_RAW_DECL_ATANF -_GL_WARN_ON_USE (atanf, "atanf is unportable - " - "use gnulib module atanf for portability"); -# endif -#endif - -#if @GNULIB_ATANL@ -# if !@HAVE_ATANL@ || !@HAVE_DECL_ATANL@ -# undef atanl -_GL_FUNCDECL_SYS (atanl, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (atanl, long double, (long double x)); -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (atanl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef atanl -# if HAVE_RAW_DECL_ATANL -_GL_WARN_ON_USE (atanl, "atanl is unportable - " - "use gnulib module atanl for portability"); -# endif -#endif - - -#if @GNULIB_ATAN2F@ -# if @REPLACE_ATAN2F@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef atan2f -# define atan2f rpl_atan2f -# endif -_GL_FUNCDECL_RPL (atan2f, float, (float y, float x)); -_GL_CXXALIAS_RPL (atan2f, float, (float y, float x)); -# else -# if !@HAVE_ATAN2F@ -# undef atan2f -_GL_FUNCDECL_SYS (atan2f, float, (float y, float x)); -# endif -_GL_CXXALIAS_SYS (atan2f, float, (float y, float x)); -# endif -_GL_CXXALIASWARN (atan2f); -#elif defined GNULIB_POSIXCHECK -# undef atan2f -# if HAVE_RAW_DECL_ATAN2F -_GL_WARN_ON_USE (atan2f, "atan2f is unportable - " - "use gnulib module atan2f for portability"); -# endif -#endif - - -#if @GNULIB_CBRTF@ -# if @REPLACE_CBRTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef cbrtf -# define cbrtf rpl_cbrtf -# endif -_GL_FUNCDECL_RPL (cbrtf, float, (float x)); -_GL_CXXALIAS_RPL (cbrtf, float, (float x)); -# else -# if !@HAVE_DECL_CBRTF@ -_GL_FUNCDECL_SYS (cbrtf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (cbrtf, float, (float x)); -# endif -_GL_CXXALIASWARN (cbrtf); -#elif defined GNULIB_POSIXCHECK -# undef cbrtf -# if HAVE_RAW_DECL_CBRTF -_GL_WARN_ON_USE (cbrtf, "cbrtf is unportable - " - "use gnulib module cbrtf for portability"); -# endif -#endif - -#if @GNULIB_CBRT@ -# if !@HAVE_CBRT@ -_GL_FUNCDECL_SYS (cbrt, double, (double x)); -# endif -_GL_CXXALIAS_SYS (cbrt, double, (double x)); -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (cbrt, double, (double x)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef cbrt -# if HAVE_RAW_DECL_CBRT -_GL_WARN_ON_USE (cbrt, "cbrt is unportable - " - "use gnulib module cbrt for portability"); -# endif -#endif - -#if @GNULIB_CBRTL@ -# if @REPLACE_CBRTL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef cbrtl -# define cbrtl rpl_cbrtl -# endif -_GL_FUNCDECL_RPL (cbrtl, long double, (long double x)); -_GL_CXXALIAS_RPL (cbrtl, long double, (long double x)); -# else -# if !@HAVE_DECL_CBRTL@ -_GL_FUNCDECL_SYS (cbrtl, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (cbrtl, long double, (long double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (cbrtl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef cbrtl -# if HAVE_RAW_DECL_CBRTL -_GL_WARN_ON_USE (cbrtl, "cbrtl is unportable - " - "use gnulib module cbrtl for portability"); -# endif -#endif - - -#if @GNULIB_CEILF@ -# if @REPLACE_CEILF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ceilf -# define ceilf rpl_ceilf -# endif -_GL_FUNCDECL_RPL (ceilf, float, (float x)); -_GL_CXXALIAS_RPL (ceilf, float, (float x)); -# else -# if !@HAVE_DECL_CEILF@ -# undef ceilf -_GL_FUNCDECL_SYS (ceilf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (ceilf, float, (float x)); -# endif -_GL_CXXALIASWARN (ceilf); -#elif defined GNULIB_POSIXCHECK -# undef ceilf -# if HAVE_RAW_DECL_CEILF -_GL_WARN_ON_USE (ceilf, "ceilf is unportable - " - "use gnulib module ceilf for portability"); -# endif -#endif - -#if @GNULIB_CEIL@ -# if @REPLACE_CEIL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ceil -# define ceil rpl_ceil -# endif -_GL_FUNCDECL_RPL (ceil, double, (double x)); -_GL_CXXALIAS_RPL (ceil, double, (double x)); -# else -_GL_CXXALIAS_SYS (ceil, double, (double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (ceil, double, (double x)); -# endif -#endif - -#if @GNULIB_CEILL@ -# if @REPLACE_CEILL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ceill -# define ceill rpl_ceill -# endif -_GL_FUNCDECL_RPL (ceill, long double, (long double x)); -_GL_CXXALIAS_RPL (ceill, long double, (long double x)); -# else -# if !@HAVE_DECL_CEILL@ -# undef ceill -_GL_FUNCDECL_SYS (ceill, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (ceill, long double, (long double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (ceill); -# endif -#elif defined GNULIB_POSIXCHECK -# undef ceill -# if HAVE_RAW_DECL_CEILL -_GL_WARN_ON_USE (ceill, "ceill is unportable - " - "use gnulib module ceill for portability"); -# endif -#endif - - -#if @GNULIB_COPYSIGNF@ -# if !@HAVE_DECL_COPYSIGNF@ -# undef copysignf -_GL_FUNCDECL_SYS (copysignf, float, (float x, float y)); -# endif -_GL_CXXALIAS_SYS (copysignf, float, (float x, float y)); -_GL_CXXALIASWARN (copysignf); -#elif defined GNULIB_POSIXCHECK -# undef copysignf -# if HAVE_RAW_DECL_COPYSIGNF -_GL_WARN_ON_USE (copysignf, "copysignf is unportable - " - "use gnulib module copysignf for portability"); -# endif -#endif - -#if @GNULIB_COPYSIGN@ -# if !@HAVE_COPYSIGN@ -_GL_FUNCDECL_SYS (copysign, double, (double x, double y)); -# endif -_GL_CXXALIAS_SYS (copysign, double, (double x, double y)); -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (copysign, double, (double x, double y)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef copysign -# if HAVE_RAW_DECL_COPYSIGN -_GL_WARN_ON_USE (copysign, "copysign is unportable - " - "use gnulib module copysign for portability"); -# endif -#endif - -#if @GNULIB_COPYSIGNL@ -# if !@HAVE_COPYSIGNL@ -_GL_FUNCDECL_SYS (copysignl, long double, (long double x, long double y)); -# endif -_GL_CXXALIAS_SYS (copysignl, long double, (long double x, long double y)); -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (copysignl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef copysignl -# if HAVE_RAW_DECL_COPYSIGNL -_GL_WARN_ON_USE (copysign, "copysignl is unportable - " - "use gnulib module copysignl for portability"); -# endif -#endif - - -#if @GNULIB_COSF@ -# if @REPLACE_COSF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef cosf -# define cosf rpl_cosf -# endif -_GL_FUNCDECL_RPL (cosf, float, (float x)); -_GL_CXXALIAS_RPL (cosf, float, (float x)); -# else -# if !@HAVE_COSF@ -# undef cosf -_GL_FUNCDECL_SYS (cosf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (cosf, float, (float x)); -# endif -_GL_CXXALIASWARN (cosf); -#elif defined GNULIB_POSIXCHECK -# undef cosf -# if HAVE_RAW_DECL_COSF -_GL_WARN_ON_USE (cosf, "cosf is unportable - " - "use gnulib module cosf for portability"); -# endif -#endif - -#if @GNULIB_COSL@ -# if !@HAVE_COSL@ || !@HAVE_DECL_COSL@ -# undef cosl -_GL_FUNCDECL_SYS (cosl, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (cosl, long double, (long double x)); -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (cosl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef cosl -# if HAVE_RAW_DECL_COSL -_GL_WARN_ON_USE (cosl, "cosl is unportable - " - "use gnulib module cosl for portability"); -# endif -#endif - - -#if @GNULIB_COSHF@ -# if @REPLACE_COSHF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef coshf -# define coshf rpl_coshf -# endif -_GL_FUNCDECL_RPL (coshf, float, (float x)); -_GL_CXXALIAS_RPL (coshf, float, (float x)); -# else -# if !@HAVE_COSHF@ -# undef coshf -_GL_FUNCDECL_SYS (coshf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (coshf, float, (float x)); -# endif -_GL_CXXALIASWARN (coshf); -#elif defined GNULIB_POSIXCHECK -# undef coshf -# if HAVE_RAW_DECL_COSHF -_GL_WARN_ON_USE (coshf, "coshf is unportable - " - "use gnulib module coshf for portability"); -# endif -#endif - - -#if @GNULIB_EXPF@ -# if @REPLACE_EXPF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef expf -# define expf rpl_expf -# endif -_GL_FUNCDECL_RPL (expf, float, (float x)); -_GL_CXXALIAS_RPL (expf, float, (float x)); -# else -# if !@HAVE_EXPF@ -# undef expf -_GL_FUNCDECL_SYS (expf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (expf, float, (float x)); -# endif -_GL_CXXALIASWARN (expf); -#elif defined GNULIB_POSIXCHECK -# undef expf -# if HAVE_RAW_DECL_EXPF -_GL_WARN_ON_USE (expf, "expf is unportable - " - "use gnulib module expf for portability"); -# endif -#endif - -#if @GNULIB_EXPL@ -# if @REPLACE_EXPL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef expl -# define expl rpl_expl -# endif -_GL_FUNCDECL_RPL (expl, long double, (long double x)); -_GL_CXXALIAS_RPL (expl, long double, (long double x)); -# else -# if !@HAVE_EXPL@ || !@HAVE_DECL_EXPL@ -# undef expl -_GL_FUNCDECL_SYS (expl, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (expl, long double, (long double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (expl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef expl -# if HAVE_RAW_DECL_EXPL -_GL_WARN_ON_USE (expl, "expl is unportable - " - "use gnulib module expl for portability"); -# endif -#endif - - -#if @GNULIB_EXP2F@ -# if !@HAVE_DECL_EXP2F@ -_GL_FUNCDECL_SYS (exp2f, float, (float x)); -# endif -_GL_CXXALIAS_SYS (exp2f, float, (float x)); -_GL_CXXALIASWARN (exp2f); -#elif defined GNULIB_POSIXCHECK -# undef exp2f -# if HAVE_RAW_DECL_EXP2F -_GL_WARN_ON_USE (exp2f, "exp2f is unportable - " - "use gnulib module exp2f for portability"); -# endif -#endif - -#if @GNULIB_EXP2@ -# if @REPLACE_EXP2@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef exp2 -# define exp2 rpl_exp2 -# endif -_GL_FUNCDECL_RPL (exp2, double, (double x)); -_GL_CXXALIAS_RPL (exp2, double, (double x)); -# else -# if !@HAVE_DECL_EXP2@ -_GL_FUNCDECL_SYS (exp2, double, (double x)); -# endif -_GL_CXXALIAS_SYS (exp2, double, (double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (exp2, double, (double x)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef exp2 -# if HAVE_RAW_DECL_EXP2 -_GL_WARN_ON_USE (exp2, "exp2 is unportable - " - "use gnulib module exp2 for portability"); -# endif -#endif - -#if @GNULIB_EXP2L@ -# if @REPLACE_EXP2L@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef exp2l -# define exp2l rpl_exp2l -# endif -_GL_FUNCDECL_RPL (exp2l, long double, (long double x)); -_GL_CXXALIAS_RPL (exp2l, long double, (long double x)); -# else -# if !@HAVE_DECL_EXP2L@ -# undef exp2l -_GL_FUNCDECL_SYS (exp2l, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (exp2l, long double, (long double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (exp2l); -# endif -#elif defined GNULIB_POSIXCHECK -# undef exp2l -# if HAVE_RAW_DECL_EXP2L -_GL_WARN_ON_USE (exp2l, "exp2l is unportable - " - "use gnulib module exp2l for portability"); -# endif -#endif - - -#if @GNULIB_EXPM1F@ -# if @REPLACE_EXPM1F@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef expm1f -# define expm1f rpl_expm1f -# endif -_GL_FUNCDECL_RPL (expm1f, float, (float x)); -_GL_CXXALIAS_RPL (expm1f, float, (float x)); -# else -# if !@HAVE_EXPM1F@ -_GL_FUNCDECL_SYS (expm1f, float, (float x)); -# endif -_GL_CXXALIAS_SYS (expm1f, float, (float x)); -# endif -_GL_CXXALIASWARN (expm1f); -#elif defined GNULIB_POSIXCHECK -# undef expm1f -# if HAVE_RAW_DECL_EXPM1F -_GL_WARN_ON_USE (expm1f, "expm1f is unportable - " - "use gnulib module expm1f for portability"); -# endif -#endif - -#if @GNULIB_EXPM1@ -# if @REPLACE_EXPM1@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef expm1 -# define expm1 rpl_expm1 -# endif -_GL_FUNCDECL_RPL (expm1, double, (double x)); -_GL_CXXALIAS_RPL (expm1, double, (double x)); -# else -# if !@HAVE_EXPM1@ -_GL_FUNCDECL_SYS (expm1, double, (double x)); -# endif -_GL_CXXALIAS_SYS (expm1, double, (double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (expm1, double, (double x)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef expm1 -# if HAVE_RAW_DECL_EXPM1 -_GL_WARN_ON_USE (expm1, "expm1 is unportable - " - "use gnulib module expm1 for portability"); -# endif -#endif - -#if @GNULIB_EXPM1L@ -# if @REPLACE_EXPM1L@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef expm1l -# define expm1l rpl_expm1l -# endif -_GL_FUNCDECL_RPL (expm1l, long double, (long double x)); -_GL_CXXALIAS_RPL (expm1l, long double, (long double x)); -# else -# if !@HAVE_DECL_EXPM1L@ -# undef expm1l -# if !(defined __cplusplus && defined _AIX) -_GL_FUNCDECL_SYS (expm1l, long double, (long double x)); -# endif -# endif -_GL_CXXALIAS_SYS (expm1l, long double, (long double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (expm1l); -# endif -#elif defined GNULIB_POSIXCHECK -# undef expm1l -# if HAVE_RAW_DECL_EXPM1L -_GL_WARN_ON_USE (expm1l, "expm1l is unportable - " - "use gnulib module expm1l for portability"); -# endif -#endif - - -#if @GNULIB_FABSF@ -# if !@HAVE_FABSF@ -# undef fabsf -_GL_FUNCDECL_SYS (fabsf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (fabsf, float, (float x)); -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (fabsf); -# endif -#elif defined GNULIB_POSIXCHECK -# undef fabsf -# if HAVE_RAW_DECL_FABSF -_GL_WARN_ON_USE (fabsf, "fabsf is unportable - " - "use gnulib module fabsf for portability"); -# endif -#endif - -#if @GNULIB_FABSL@ -# if @REPLACE_FABSL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fabsl -# define fabsl rpl_fabsl -# endif -_GL_FUNCDECL_RPL (fabsl, long double, (long double x)); -_GL_CXXALIAS_RPL (fabsl, long double, (long double x)); -# else -# if !@HAVE_FABSL@ -# undef fabsl -_GL_FUNCDECL_SYS (fabsl, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (fabsl, long double, (long double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (fabsl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef fabsl -# if HAVE_RAW_DECL_FABSL -_GL_WARN_ON_USE (fabsl, "fabsl is unportable - " - "use gnulib module fabsl for portability"); -# endif -#endif - - -#if @GNULIB_FLOORF@ -# if @REPLACE_FLOORF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef floorf -# define floorf rpl_floorf -# endif -_GL_FUNCDECL_RPL (floorf, float, (float x)); -_GL_CXXALIAS_RPL (floorf, float, (float x)); -# else -# if !@HAVE_DECL_FLOORF@ -# undef floorf -_GL_FUNCDECL_SYS (floorf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (floorf, float, (float x)); -# endif -_GL_CXXALIASWARN (floorf); -#elif defined GNULIB_POSIXCHECK -# undef floorf -# if HAVE_RAW_DECL_FLOORF -_GL_WARN_ON_USE (floorf, "floorf is unportable - " - "use gnulib module floorf for portability"); -# endif -#endif - -#if @GNULIB_FLOOR@ -# if @REPLACE_FLOOR@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef floor -# define floor rpl_floor -# endif -_GL_FUNCDECL_RPL (floor, double, (double x)); -_GL_CXXALIAS_RPL (floor, double, (double x)); -# else -_GL_CXXALIAS_SYS (floor, double, (double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (floor, double, (double x)); -# endif -#endif - -#if @GNULIB_FLOORL@ -# if @REPLACE_FLOORL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef floorl -# define floorl rpl_floorl -# endif -_GL_FUNCDECL_RPL (floorl, long double, (long double x)); -_GL_CXXALIAS_RPL (floorl, long double, (long double x)); -# else -# if !@HAVE_DECL_FLOORL@ -# undef floorl -_GL_FUNCDECL_SYS (floorl, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (floorl, long double, (long double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (floorl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef floorl -# if HAVE_RAW_DECL_FLOORL -_GL_WARN_ON_USE (floorl, "floorl is unportable - " - "use gnulib module floorl for portability"); -# endif -#endif - - -#if @GNULIB_FMAF@ -# if @REPLACE_FMAF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fmaf -# define fmaf rpl_fmaf -# endif -_GL_FUNCDECL_RPL (fmaf, float, (float x, float y, float z)); -_GL_CXXALIAS_RPL (fmaf, float, (float x, float y, float z)); -# else -# if !@HAVE_FMAF@ -# undef fmaf -_GL_FUNCDECL_SYS (fmaf, float, (float x, float y, float z)); -# endif -_GL_CXXALIAS_SYS (fmaf, float, (float x, float y, float z)); -# endif -_GL_CXXALIASWARN (fmaf); -#elif defined GNULIB_POSIXCHECK -# undef fmaf -# if HAVE_RAW_DECL_FMAF -_GL_WARN_ON_USE (fmaf, "fmaf is unportable - " - "use gnulib module fmaf for portability"); -# endif -#endif - -#if @GNULIB_FMA@ -# if @REPLACE_FMA@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fma -# define fma rpl_fma -# endif -_GL_FUNCDECL_RPL (fma, double, (double x, double y, double z)); -_GL_CXXALIAS_RPL (fma, double, (double x, double y, double z)); -# else -# if !@HAVE_FMA@ -# undef fma -_GL_FUNCDECL_SYS (fma, double, (double x, double y, double z)); -# endif -_GL_CXXALIAS_SYS (fma, double, (double x, double y, double z)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (fma, double, (double x, double y, double z)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef fma -# if HAVE_RAW_DECL_FMA -_GL_WARN_ON_USE (fma, "fma is unportable - " - "use gnulib module fma for portability"); -# endif -#endif - -#if @GNULIB_FMAL@ -# if @REPLACE_FMAL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fmal -# define fmal rpl_fmal -# endif -_GL_FUNCDECL_RPL (fmal, long double, - (long double x, long double y, long double z)); -_GL_CXXALIAS_RPL (fmal, long double, - (long double x, long double y, long double z)); -# else -# if !@HAVE_FMAL@ -# undef fmal -# if !(defined __cplusplus && defined _AIX) -_GL_FUNCDECL_SYS (fmal, long double, - (long double x, long double y, long double z)); -# endif -# endif -_GL_CXXALIAS_SYS (fmal, long double, - (long double x, long double y, long double z)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (fmal); -# endif -#elif defined GNULIB_POSIXCHECK -# undef fmal -# if HAVE_RAW_DECL_FMAL -_GL_WARN_ON_USE (fmal, "fmal is unportable - " - "use gnulib module fmal for portability"); -# endif -#endif - - -#if @GNULIB_FMODF@ -# if @REPLACE_FMODF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fmodf -# define fmodf rpl_fmodf -# endif -_GL_FUNCDECL_RPL (fmodf, float, (float x, float y)); -_GL_CXXALIAS_RPL (fmodf, float, (float x, float y)); -# else -# if !@HAVE_FMODF@ -# undef fmodf -_GL_FUNCDECL_SYS (fmodf, float, (float x, float y)); -# endif -_GL_CXXALIAS_SYS (fmodf, float, (float x, float y)); -# endif -_GL_CXXALIASWARN (fmodf); -#elif defined GNULIB_POSIXCHECK -# undef fmodf -# if HAVE_RAW_DECL_FMODF -_GL_WARN_ON_USE (fmodf, "fmodf is unportable - " - "use gnulib module fmodf for portability"); -# endif -#endif - -#if @GNULIB_FMOD@ -# if @REPLACE_FMOD@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fmod -# define fmod rpl_fmod -# endif -_GL_FUNCDECL_RPL (fmod, double, (double x, double y)); -_GL_CXXALIAS_RPL (fmod, double, (double x, double y)); -# else -_GL_CXXALIAS_SYS (fmod, double, (double x, double y)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (fmod, double, (double x, double y)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef fmod -# if HAVE_RAW_DECL_FMOD -_GL_WARN_ON_USE (fmod, "fmod has portability problems - " - "use gnulib module fmod for portability"); -# endif -#endif - -#if @GNULIB_FMODL@ -# if @REPLACE_FMODL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fmodl -# define fmodl rpl_fmodl -# endif -_GL_FUNCDECL_RPL (fmodl, long double, (long double x, long double y)); -_GL_CXXALIAS_RPL (fmodl, long double, (long double x, long double y)); -# else -# if !@HAVE_FMODL@ -# undef fmodl -_GL_FUNCDECL_SYS (fmodl, long double, (long double x, long double y)); -# endif -_GL_CXXALIAS_SYS (fmodl, long double, (long double x, long double y)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (fmodl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef fmodl -# if HAVE_RAW_DECL_FMODL -_GL_WARN_ON_USE (fmodl, "fmodl is unportable - " - "use gnulib module fmodl for portability"); -# endif -#endif - - -/* Write x as - x = mantissa * 2^exp - where - If x finite and nonzero: 0.5 <= |mantissa| < 1.0. - If x is zero: mantissa = x, exp = 0. - If x is infinite or NaN: mantissa = x, exp unspecified. - Store exp in *EXPPTR and return mantissa. */ -#if @GNULIB_FREXPF@ -# if @REPLACE_FREXPF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef frexpf -# define frexpf rpl_frexpf -# endif -_GL_FUNCDECL_RPL (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (frexpf, float, (float x, int *expptr)); -# else -# if !@HAVE_FREXPF@ -# undef frexpf -_GL_FUNCDECL_SYS (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (frexpf, float, (float x, int *expptr)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (frexpf); -# endif -#elif defined GNULIB_POSIXCHECK -# undef frexpf -# if HAVE_RAW_DECL_FREXPF -_GL_WARN_ON_USE (frexpf, "frexpf is unportable - " - "use gnulib module frexpf for portability"); -# endif -#endif - -/* Write x as - x = mantissa * 2^exp - where - If x finite and nonzero: 0.5 <= |mantissa| < 1.0. - If x is zero: mantissa = x, exp = 0. - If x is infinite or NaN: mantissa = x, exp unspecified. - Store exp in *EXPPTR and return mantissa. */ -#if @GNULIB_FREXP@ -# if @REPLACE_FREXP@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef frexp -# define frexp rpl_frexp -# endif -_GL_FUNCDECL_RPL (frexp, double, (double x, int *expptr) _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (frexp, double, (double x, int *expptr)); -# else -_GL_CXXALIAS_SYS (frexp, double, (double x, int *expptr)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (frexp, double, (double x, int *expptr)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef frexp -/* Assume frexp is always declared. */ -_GL_WARN_ON_USE (frexp, "frexp is unportable - " - "use gnulib module frexp for portability"); -#endif - -/* Write x as - x = mantissa * 2^exp - where - If x finite and nonzero: 0.5 <= |mantissa| < 1.0. - If x is zero: mantissa = x, exp = 0. - If x is infinite or NaN: mantissa = x, exp unspecified. - Store exp in *EXPPTR and return mantissa. */ -#if @GNULIB_FREXPL@ && @REPLACE_FREXPL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef frexpl -# define frexpl rpl_frexpl -# endif -_GL_FUNCDECL_RPL (frexpl, long double, - (long double x, int *expptr) _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (frexpl, long double, (long double x, int *expptr)); -#else -# if !@HAVE_DECL_FREXPL@ -_GL_FUNCDECL_SYS (frexpl, long double, - (long double x, int *expptr) _GL_ARG_NONNULL ((2))); -# endif -# if @GNULIB_FREXPL@ -_GL_CXXALIAS_SYS (frexpl, long double, (long double x, int *expptr)); -# endif -#endif -#if @GNULIB_FREXPL@ && !(@REPLACE_FREXPL@ && !@HAVE_DECL_FREXPL@) -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (frexpl); -# endif -#endif -#if !@GNULIB_FREXPL@ && defined GNULIB_POSIXCHECK -# undef frexpl -# if HAVE_RAW_DECL_FREXPL -_GL_WARN_ON_USE (frexpl, "frexpl is unportable - " - "use gnulib module frexpl for portability"); -# endif -#endif - - -/* Return sqrt(x^2+y^2). */ -#if @GNULIB_HYPOTF@ -# if @REPLACE_HYPOTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef hypotf -# define hypotf rpl_hypotf -# endif -_GL_FUNCDECL_RPL (hypotf, float, (float x, float y)); -_GL_CXXALIAS_RPL (hypotf, float, (float x, float y)); -# else -# if !@HAVE_HYPOTF@ -_GL_FUNCDECL_SYS (hypotf, float, (float x, float y)); -# endif -_GL_CXXALIAS_SYS (hypotf, float, (float x, float y)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (hypotf); -# endif -#elif defined GNULIB_POSIXCHECK -# undef hypotf -# if HAVE_RAW_DECL_HYPOTF -_GL_WARN_ON_USE (hypotf, "hypotf is unportable - " - "use gnulib module hypotf for portability"); -# endif -#endif - -/* Return sqrt(x^2+y^2). */ -#if @GNULIB_HYPOT@ -# if @REPLACE_HYPOT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef hypot -# define hypot rpl_hypot -# endif -_GL_FUNCDECL_RPL (hypot, double, (double x, double y)); -_GL_CXXALIAS_RPL (hypot, double, (double x, double y)); -# else -_GL_CXXALIAS_SYS (hypot, double, (double x, double y)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (hypot, double, (double x, double y)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef hypot -# if HAVE_RAW_DECL_HYPOT -_GL_WARN_ON_USE (hypotf, "hypot has portability problems - " - "use gnulib module hypot for portability"); -# endif -#endif - -/* Return sqrt(x^2+y^2). */ -#if @GNULIB_HYPOTL@ -# if @REPLACE_HYPOTL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef hypotl -# define hypotl rpl_hypotl -# endif -_GL_FUNCDECL_RPL (hypotl, long double, (long double x, long double y)); -_GL_CXXALIAS_RPL (hypotl, long double, (long double x, long double y)); -# else -# if !@HAVE_HYPOTL@ -_GL_FUNCDECL_SYS (hypotl, long double, (long double x, long double y)); -# endif -_GL_CXXALIAS_SYS (hypotl, long double, (long double x, long double y)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (hypotl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef hypotl -# if HAVE_RAW_DECL_HYPOTL -_GL_WARN_ON_USE (hypotl, "hypotl is unportable - " - "use gnulib module hypotl for portability"); -# endif -#endif - - -#if @GNULIB_ILOGBF@ -# if @REPLACE_ILOGBF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ilogbf -# define ilogbf rpl_ilogbf -# endif -_GL_FUNCDECL_RPL (ilogbf, int, (float x)); -_GL_CXXALIAS_RPL (ilogbf, int, (float x)); -# else -# if !@HAVE_ILOGBF@ -_GL_FUNCDECL_SYS (ilogbf, int, (float x)); -# endif -_GL_CXXALIAS_SYS (ilogbf, int, (float x)); -# endif -_GL_CXXALIASWARN (ilogbf); -#elif defined GNULIB_POSIXCHECK -# undef ilogbf -# if HAVE_RAW_DECL_ILOGBF -_GL_WARN_ON_USE (ilogbf, "ilogbf is unportable - " - "use gnulib module ilogbf for portability"); -# endif -#endif - -#if @GNULIB_ILOGB@ -# if @REPLACE_ILOGB@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ilogb -# define ilogb rpl_ilogb -# endif -_GL_FUNCDECL_RPL (ilogb, int, (double x)); -_GL_CXXALIAS_RPL (ilogb, int, (double x)); -# else -# if !@HAVE_ILOGB@ -_GL_FUNCDECL_SYS (ilogb, int, (double x)); -# endif -_GL_CXXALIAS_SYS (ilogb, int, (double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (ilogb, int, (double x)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef ilogb -# if HAVE_RAW_DECL_ILOGB -_GL_WARN_ON_USE (ilogb, "ilogb is unportable - " - "use gnulib module ilogb for portability"); -# endif -#endif - -#if @GNULIB_ILOGBL@ -# if @REPLACE_ILOGBL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ilogbl -# define ilogbl rpl_ilogbl -# endif -_GL_FUNCDECL_RPL (ilogbl, int, (long double x)); -_GL_CXXALIAS_RPL (ilogbl, int, (long double x)); -# else -# if !@HAVE_ILOGBL@ -# undef ilogbl -_GL_FUNCDECL_SYS (ilogbl, int, (long double x)); -# endif -_GL_CXXALIAS_SYS (ilogbl, int, (long double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (ilogbl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef ilogbl -# if HAVE_RAW_DECL_ILOGBL -_GL_WARN_ON_USE (ilogbl, "ilogbl is unportable - " - "use gnulib module ilogbl for portability"); -# endif -#endif - - -#if @GNULIB_MDA_J0@ -/* On native Windows, map 'j0' to '_j0', so that -loldnames is not - required. In C++ with GNULIB_NAMESPACE, avoid differences between - platforms by defining GNULIB_NAMESPACE::j0 always. */ -# if defined _WIN32 && !defined __CYGWIN__ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef j0 -# define j0 _j0 -# endif -_GL_CXXALIAS_MDA (j0, double, (double x)); -# else -_GL_CXXALIAS_SYS (j0, double, (double x)); -# endif -_GL_CXXALIASWARN (j0); -#endif - -#if @GNULIB_MDA_J1@ -/* On native Windows, map 'j1' to '_j1', so that -loldnames is not - required. In C++ with GNULIB_NAMESPACE, avoid differences between - platforms by defining GNULIB_NAMESPACE::j1 always. */ -# if defined _WIN32 && !defined __CYGWIN__ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef j1 -# define j1 _j1 -# endif -_GL_CXXALIAS_MDA (j1, double, (double x)); -# else -_GL_CXXALIAS_SYS (j1, double, (double x)); -# endif -_GL_CXXALIASWARN (j1); -#endif - -#if @GNULIB_MDA_JN@ -/* On native Windows, map 'jn' to '_jn', so that -loldnames is not - required. In C++ with GNULIB_NAMESPACE, avoid differences between - platforms by defining GNULIB_NAMESPACE::jn always. */ -# if defined _WIN32 && !defined __CYGWIN__ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef jn -# define jn _jn -# endif -_GL_CXXALIAS_MDA (jn, double, (int n, double x)); -# else -_GL_CXXALIAS_SYS (jn, double, (int n, double x)); -# endif -_GL_CXXALIASWARN (jn); -#endif - - -/* Return x * 2^exp. */ -#if @GNULIB_LDEXPF@ -# if !@HAVE_LDEXPF@ -# undef ldexpf -_GL_FUNCDECL_SYS (ldexpf, float, (float x, int exp)); -# endif -_GL_CXXALIAS_SYS (ldexpf, float, (float x, int exp)); -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (ldexpf); -# endif -#elif defined GNULIB_POSIXCHECK -# undef ldexpf -# if HAVE_RAW_DECL_LDEXPF -_GL_WARN_ON_USE (ldexpf, "ldexpf is unportable - " - "use gnulib module ldexpf for portability"); -# endif -#endif - -/* Return x * 2^exp. */ -#if @GNULIB_LDEXPL@ && @REPLACE_LDEXPL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ldexpl -# define ldexpl rpl_ldexpl -# endif -_GL_FUNCDECL_RPL (ldexpl, long double, (long double x, int exp)); -_GL_CXXALIAS_RPL (ldexpl, long double, (long double x, int exp)); -#else -# if !@HAVE_DECL_LDEXPL@ -_GL_FUNCDECL_SYS (ldexpl, long double, (long double x, int exp)); -# endif -# if @GNULIB_LDEXPL@ -_GL_CXXALIAS_SYS (ldexpl, long double, (long double x, int exp)); -# endif -#endif -#if @GNULIB_LDEXPL@ -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (ldexpl); -# endif -#endif -#if !@GNULIB_LDEXPL@ && defined GNULIB_POSIXCHECK -# undef ldexpl -# if HAVE_RAW_DECL_LDEXPL -_GL_WARN_ON_USE (ldexpl, "ldexpl is unportable - " - "use gnulib module ldexpl for portability"); -# endif -#endif - - -#if @GNULIB_LOGF@ -# if @REPLACE_LOGF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef logf -# define logf rpl_logf -# endif -_GL_FUNCDECL_RPL (logf, float, (float x)); -_GL_CXXALIAS_RPL (logf, float, (float x)); -# else -# if !@HAVE_LOGF@ -# undef logf -_GL_FUNCDECL_SYS (logf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (logf, float, (float x)); -# endif -_GL_CXXALIASWARN (logf); -#elif defined GNULIB_POSIXCHECK -# undef logf -# if HAVE_RAW_DECL_LOGF -_GL_WARN_ON_USE (logf, "logf is unportable - " - "use gnulib module logf for portability"); -# endif -#endif - -#if @GNULIB_LOG@ -# if @REPLACE_LOG@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef log -# define log rpl_log -# endif -_GL_FUNCDECL_RPL (log, double, (double x)); -_GL_CXXALIAS_RPL (log, double, (double x)); -# else -_GL_CXXALIAS_SYS (log, double, (double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (log, double, (double x)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef log -# if HAVE_RAW_DECL_LOG -_GL_WARN_ON_USE (log, "log has portability problems - " - "use gnulib module log for portability"); -# endif -#endif - -#if @GNULIB_LOGL@ -# if @REPLACE_LOGL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef logl -# define logl rpl_logl -# endif -_GL_FUNCDECL_RPL (logl, long double, (long double x)); -_GL_CXXALIAS_RPL (logl, long double, (long double x)); -# else -# if !@HAVE_LOGL@ || !@HAVE_DECL_LOGL@ -# undef logl -_GL_FUNCDECL_SYS (logl, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (logl, long double, (long double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (logl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef logl -# if HAVE_RAW_DECL_LOGL -_GL_WARN_ON_USE (logl, "logl is unportable - " - "use gnulib module logl for portability"); -# endif -#endif - - -#if @GNULIB_LOG10F@ -# if @REPLACE_LOG10F@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef log10f -# define log10f rpl_log10f -# endif -_GL_FUNCDECL_RPL (log10f, float, (float x)); -_GL_CXXALIAS_RPL (log10f, float, (float x)); -# else -# if !@HAVE_LOG10F@ -# undef log10f -_GL_FUNCDECL_SYS (log10f, float, (float x)); -# endif -_GL_CXXALIAS_SYS (log10f, float, (float x)); -# endif -_GL_CXXALIASWARN (log10f); -#elif defined GNULIB_POSIXCHECK -# undef log10f -# if HAVE_RAW_DECL_LOG10F -_GL_WARN_ON_USE (log10f, "log10f is unportable - " - "use gnulib module log10f for portability"); -# endif -#endif - -#if @GNULIB_LOG10@ -# if @REPLACE_LOG10@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef log10 -# define log10 rpl_log10 -# endif -_GL_FUNCDECL_RPL (log10, double, (double x)); -_GL_CXXALIAS_RPL (log10, double, (double x)); -# else -_GL_CXXALIAS_SYS (log10, double, (double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (log10, double, (double x)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef log10 -# if HAVE_RAW_DECL_LOG10 -_GL_WARN_ON_USE (log10, "log10 has portability problems - " - "use gnulib module log10 for portability"); -# endif -#endif - -#if @GNULIB_LOG10L@ -# if @REPLACE_LOG10L@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef log10l -# define log10l rpl_log10l -# endif -_GL_FUNCDECL_RPL (log10l, long double, (long double x)); -_GL_CXXALIAS_RPL (log10l, long double, (long double x)); -# else -# if !@HAVE_LOG10L@ || !@HAVE_DECL_LOG10L@ -# undef log10l -_GL_FUNCDECL_SYS (log10l, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (log10l, long double, (long double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (log10l); -# endif -#elif defined GNULIB_POSIXCHECK -# undef log10l -# if HAVE_RAW_DECL_LOG10L -_GL_WARN_ON_USE (log10l, "log10l is unportable - " - "use gnulib module log10l for portability"); -# endif -#endif - - -#if @GNULIB_LOG1PF@ -# if @REPLACE_LOG1PF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef log1pf -# define log1pf rpl_log1pf -# endif -_GL_FUNCDECL_RPL (log1pf, float, (float x)); -_GL_CXXALIAS_RPL (log1pf, float, (float x)); -# else -# if !@HAVE_LOG1PF@ -_GL_FUNCDECL_SYS (log1pf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (log1pf, float, (float x)); -# endif -_GL_CXXALIASWARN (log1pf); -#elif defined GNULIB_POSIXCHECK -# undef log1pf -# if HAVE_RAW_DECL_LOG1PF -_GL_WARN_ON_USE (log1pf, "log1pf is unportable - " - "use gnulib module log1pf for portability"); -# endif -#endif - -#if @GNULIB_LOG1P@ -# if @REPLACE_LOG1P@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef log1p -# define log1p rpl_log1p -# endif -_GL_FUNCDECL_RPL (log1p, double, (double x)); -_GL_CXXALIAS_RPL (log1p, double, (double x)); -# else -# if !@HAVE_LOG1P@ -_GL_FUNCDECL_SYS (log1p, double, (double x)); -# endif -_GL_CXXALIAS_SYS (log1p, double, (double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (log1p, double, (double x)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef log1p -# if HAVE_RAW_DECL_LOG1P -_GL_WARN_ON_USE (log1p, "log1p has portability problems - " - "use gnulib module log1p for portability"); -# endif -#endif - -#if @GNULIB_LOG1PL@ -# if @REPLACE_LOG1PL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef log1pl -# define log1pl rpl_log1pl -# endif -_GL_FUNCDECL_RPL (log1pl, long double, (long double x)); -_GL_CXXALIAS_RPL (log1pl, long double, (long double x)); -# else -# if !@HAVE_LOG1PL@ -_GL_FUNCDECL_SYS (log1pl, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (log1pl, long double, (long double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (log1pl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef log1pl -# if HAVE_RAW_DECL_LOG1PL -_GL_WARN_ON_USE (log1pl, "log1pl has portability problems - " - "use gnulib module log1pl for portability"); -# endif -#endif - - -#if @GNULIB_LOG2F@ -# if @REPLACE_LOG2F@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef log2f -# define log2f rpl_log2f -# endif -_GL_FUNCDECL_RPL (log2f, float, (float x)); -_GL_CXXALIAS_RPL (log2f, float, (float x)); -# else -# if !@HAVE_DECL_LOG2F@ -# undef log2f -_GL_FUNCDECL_SYS (log2f, float, (float x)); -# endif -_GL_CXXALIAS_SYS (log2f, float, (float x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (log2f); -# endif -#elif defined GNULIB_POSIXCHECK -# undef log2f -# if HAVE_RAW_DECL_LOG2F -_GL_WARN_ON_USE (log2f, "log2f is unportable - " - "use gnulib module log2f for portability"); -# endif -#endif - -#if @GNULIB_LOG2@ -# if @REPLACE_LOG2@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef log2 -# define log2 rpl_log2 -# endif -_GL_FUNCDECL_RPL (log2, double, (double x)); -_GL_CXXALIAS_RPL (log2, double, (double x)); -# else -# if !@HAVE_DECL_LOG2@ -# undef log2 -_GL_FUNCDECL_SYS (log2, double, (double x)); -# endif -_GL_CXXALIAS_SYS (log2, double, (double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (log2, double, (double x)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef log2 -# if HAVE_RAW_DECL_LOG2 -_GL_WARN_ON_USE (log2, "log2 is unportable - " - "use gnulib module log2 for portability"); -# endif -#endif - -#if @GNULIB_LOG2L@ -# if @REPLACE_LOG2L@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef log2l -# define log2l rpl_log2l -# endif -_GL_FUNCDECL_RPL (log2l, long double, (long double x)); -_GL_CXXALIAS_RPL (log2l, long double, (long double x)); -# else -# if !@HAVE_DECL_LOG2L@ -_GL_FUNCDECL_SYS (log2l, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (log2l, long double, (long double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (log2l); -# endif -#elif defined GNULIB_POSIXCHECK -# undef log2l -# if HAVE_RAW_DECL_LOG2L -_GL_WARN_ON_USE (log2l, "log2l is unportable - " - "use gnulib module log2l for portability"); -# endif -#endif - - -#if @GNULIB_LOGBF@ -# if @REPLACE_LOGBF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef logbf -# define logbf rpl_logbf -# endif -_GL_FUNCDECL_RPL (logbf, float, (float x)); -_GL_CXXALIAS_RPL (logbf, float, (float x)); -# else -# if !@HAVE_LOGBF@ -_GL_FUNCDECL_SYS (logbf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (logbf, float, (float x)); -# endif -_GL_CXXALIASWARN (logbf); -#elif defined GNULIB_POSIXCHECK -# undef logbf -# if HAVE_RAW_DECL_LOGBF -_GL_WARN_ON_USE (logbf, "logbf is unportable - " - "use gnulib module logbf for portability"); -# endif -#endif - -#if @GNULIB_LOGB@ -# if @REPLACE_LOGB@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef logb -# define logb rpl_logb -# endif -_GL_FUNCDECL_RPL (logb, double, (double x)); -_GL_CXXALIAS_RPL (logb, double, (double x)); -# else -# if !@HAVE_DECL_LOGB@ -_GL_FUNCDECL_SYS (logb, double, (double x)); -# endif -_GL_CXXALIAS_SYS (logb, double, (double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (logb, double, (double x)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef logb -# if HAVE_RAW_DECL_LOGB -_GL_WARN_ON_USE (logb, "logb is unportable - " - "use gnulib module logb for portability"); -# endif -#endif - -#if @GNULIB_LOGBL@ -# if @REPLACE_LOGBL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef logbl -# define logbl rpl_logbl -# endif -_GL_FUNCDECL_RPL (logbl, long double, (long double x)); -_GL_CXXALIAS_RPL (logbl, long double, (long double x)); -# else -# if !@HAVE_LOGBL@ -_GL_FUNCDECL_SYS (logbl, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (logbl, long double, (long double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (logbl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef logbl -# if HAVE_RAW_DECL_LOGBL -_GL_WARN_ON_USE (logbl, "logbl is unportable - " - "use gnulib module logbl for portability"); -# endif -#endif - - -#if @GNULIB_MODFF@ -# if @REPLACE_MODFF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef modff -# define modff rpl_modff -# endif -_GL_FUNCDECL_RPL (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (modff, float, (float x, float *iptr)); -# else -# if !@HAVE_MODFF@ -# undef modff -_GL_FUNCDECL_SYS (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (modff, float, (float x, float *iptr)); -# endif -_GL_CXXALIASWARN (modff); -#elif defined GNULIB_POSIXCHECK -# undef modff -# if HAVE_RAW_DECL_MODFF -_GL_WARN_ON_USE (modff, "modff is unportable - " - "use gnulib module modff for portability"); -# endif -#endif - -#if @GNULIB_MODF@ -# if @REPLACE_MODF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef modf -# define modf rpl_modf -# endif -_GL_FUNCDECL_RPL (modf, double, (double x, double *iptr) _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (modf, double, (double x, double *iptr)); -# else -_GL_CXXALIAS_SYS (modf, double, (double x, double *iptr)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (modf, double, (double x, double *iptr)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef modf -# if HAVE_RAW_DECL_MODF -_GL_WARN_ON_USE (modf, "modf has portability problems - " - "use gnulib module modf for portability"); -# endif -#endif - -#if @GNULIB_MODFL@ -# if @REPLACE_MODFL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef modfl -# define modfl rpl_modfl -# endif -_GL_FUNCDECL_RPL (modfl, long double, (long double x, long double *iptr) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (modfl, long double, (long double x, long double *iptr)); -# else -# if !@HAVE_MODFL@ -# undef modfl -_GL_FUNCDECL_SYS (modfl, long double, (long double x, long double *iptr) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (modfl, long double, (long double x, long double *iptr)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (modfl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef modfl -# if HAVE_RAW_DECL_MODFL -_GL_WARN_ON_USE (modfl, "modfl is unportable - " - "use gnulib module modfl for portability"); -# endif -#endif - - -#if @GNULIB_POWF@ -# if !@HAVE_POWF@ -# undef powf -_GL_FUNCDECL_SYS (powf, float, (float x, float y)); -# endif -_GL_CXXALIAS_SYS (powf, float, (float x, float y)); -_GL_CXXALIASWARN (powf); -#elif defined GNULIB_POSIXCHECK -# undef powf -# if HAVE_RAW_DECL_POWF -_GL_WARN_ON_USE (powf, "powf is unportable - " - "use gnulib module powf for portability"); -# endif -#endif - - -#if @GNULIB_REMAINDERF@ -# if @REPLACE_REMAINDERF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef remainderf -# define remainderf rpl_remainderf -# endif -_GL_FUNCDECL_RPL (remainderf, float, (float x, float y)); -_GL_CXXALIAS_RPL (remainderf, float, (float x, float y)); -# else -# if !@HAVE_REMAINDERF@ -_GL_FUNCDECL_SYS (remainderf, float, (float x, float y)); -# endif -_GL_CXXALIAS_SYS (remainderf, float, (float x, float y)); -# endif -_GL_CXXALIASWARN (remainderf); -#elif defined GNULIB_POSIXCHECK -# undef remainderf -# if HAVE_RAW_DECL_REMAINDERF -_GL_WARN_ON_USE (remainderf, "remainderf is unportable - " - "use gnulib module remainderf for portability"); -# endif -#endif - -#if @GNULIB_REMAINDER@ -# if @REPLACE_REMAINDER@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef remainder -# define remainder rpl_remainder -# endif -_GL_FUNCDECL_RPL (remainder, double, (double x, double y)); -_GL_CXXALIAS_RPL (remainder, double, (double x, double y)); -# else -# if !@HAVE_REMAINDER@ || !@HAVE_DECL_REMAINDER@ -_GL_FUNCDECL_SYS (remainder, double, (double x, double y)); -# endif -_GL_CXXALIAS_SYS (remainder, double, (double x, double y)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (remainder, double, (double x, double y)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef remainder -# if HAVE_RAW_DECL_REMAINDER -_GL_WARN_ON_USE (remainder, "remainder is unportable - " - "use gnulib module remainder for portability"); -# endif -#endif - -#if @GNULIB_REMAINDERL@ -# if @REPLACE_REMAINDERL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef remainderl -# define remainderl rpl_remainderl -# endif -_GL_FUNCDECL_RPL (remainderl, long double, (long double x, long double y)); -_GL_CXXALIAS_RPL (remainderl, long double, (long double x, long double y)); -# else -# if !@HAVE_DECL_REMAINDERL@ -# undef remainderl -# if !(defined __cplusplus && defined _AIX) -_GL_FUNCDECL_SYS (remainderl, long double, (long double x, long double y)); -# endif -# endif -_GL_CXXALIAS_SYS (remainderl, long double, (long double x, long double y)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (remainderl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef remainderl -# if HAVE_RAW_DECL_REMAINDERL -_GL_WARN_ON_USE (remainderl, "remainderl is unportable - " - "use gnulib module remainderl for portability"); -# endif -#endif - - -#if @GNULIB_RINTF@ -# if !@HAVE_DECL_RINTF@ -_GL_FUNCDECL_SYS (rintf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (rintf, float, (float x)); -_GL_CXXALIASWARN (rintf); -#elif defined GNULIB_POSIXCHECK -# undef rintf -# if HAVE_RAW_DECL_RINTF -_GL_WARN_ON_USE (rintf, "rintf is unportable - " - "use gnulib module rintf for portability"); -# endif -#endif - -#if @GNULIB_RINT@ -# if !@HAVE_RINT@ -_GL_FUNCDECL_SYS (rint, double, (double x)); -# endif -_GL_CXXALIAS_SYS (rint, double, (double x)); -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (rint, double, (double x)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef rint -# if HAVE_RAW_DECL_RINT -_GL_WARN_ON_USE (rint, "rint is unportable - " - "use gnulib module rint for portability"); -# endif -#endif - -#if @GNULIB_RINTL@ -# if @REPLACE_RINTL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef rintl -# define rintl rpl_rintl -# endif -_GL_FUNCDECL_RPL (rintl, long double, (long double x)); -_GL_CXXALIAS_RPL (rintl, long double, (long double x)); -# else -# if !@HAVE_RINTL@ -_GL_FUNCDECL_SYS (rintl, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (rintl, long double, (long double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (rintl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef rintl -# if HAVE_RAW_DECL_RINTL -_GL_WARN_ON_USE (rintl, "rintl is unportable - " - "use gnulib module rintl for portability"); -# endif -#endif - - -#if @GNULIB_ROUNDF@ -# if @REPLACE_ROUNDF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef roundf -# define roundf rpl_roundf -# endif -_GL_FUNCDECL_RPL (roundf, float, (float x)); -_GL_CXXALIAS_RPL (roundf, float, (float x)); -# else -# if !@HAVE_DECL_ROUNDF@ -_GL_FUNCDECL_SYS (roundf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (roundf, float, (float x)); -# endif -_GL_CXXALIASWARN (roundf); -#elif defined GNULIB_POSIXCHECK -# undef roundf -# if HAVE_RAW_DECL_ROUNDF -_GL_WARN_ON_USE (roundf, "roundf is unportable - " - "use gnulib module roundf for portability"); -# endif -#endif - -#if @GNULIB_ROUND@ -# if @REPLACE_ROUND@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef round -# define round rpl_round -# endif -_GL_FUNCDECL_RPL (round, double, (double x)); -_GL_CXXALIAS_RPL (round, double, (double x)); -# else -# if !@HAVE_DECL_ROUND@ -_GL_FUNCDECL_SYS (round, double, (double x)); -# endif -_GL_CXXALIAS_SYS (round, double, (double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (round, double, (double x)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef round -# if HAVE_RAW_DECL_ROUND -_GL_WARN_ON_USE (round, "round is unportable - " - "use gnulib module round for portability"); -# endif -#endif - -#if @GNULIB_ROUNDL@ -# if @REPLACE_ROUNDL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef roundl -# define roundl rpl_roundl -# endif -_GL_FUNCDECL_RPL (roundl, long double, (long double x)); -_GL_CXXALIAS_RPL (roundl, long double, (long double x)); -# else -# if !@HAVE_DECL_ROUNDL@ -# undef roundl -# if !(defined __cplusplus && defined _AIX) -_GL_FUNCDECL_SYS (roundl, long double, (long double x)); -# endif -# endif -_GL_CXXALIAS_SYS (roundl, long double, (long double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (roundl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef roundl -# if HAVE_RAW_DECL_ROUNDL -_GL_WARN_ON_USE (roundl, "roundl is unportable - " - "use gnulib module roundl for portability"); -# endif -#endif - - -#if @GNULIB_SINF@ -# if @REPLACE_SINF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef sinf -# define sinf rpl_sinf -# endif -_GL_FUNCDECL_RPL (sinf, float, (float x)); -_GL_CXXALIAS_RPL (sinf, float, (float x)); -# else -# if !@HAVE_SINF@ -# undef sinf -_GL_FUNCDECL_SYS (sinf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (sinf, float, (float x)); -# endif -_GL_CXXALIASWARN (sinf); -#elif defined GNULIB_POSIXCHECK -# undef sinf -# if HAVE_RAW_DECL_SINF -_GL_WARN_ON_USE (sinf, "sinf is unportable - " - "use gnulib module sinf for portability"); -# endif -#endif - -#if @GNULIB_SINL@ -# if !@HAVE_SINL@ || !@HAVE_DECL_SINL@ -# undef sinl -_GL_FUNCDECL_SYS (sinl, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (sinl, long double, (long double x)); -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (sinl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef sinl -# if HAVE_RAW_DECL_SINL -_GL_WARN_ON_USE (sinl, "sinl is unportable - " - "use gnulib module sinl for portability"); -# endif -#endif - - -#if @GNULIB_SINHF@ -# if @REPLACE_SINHF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef sinhf -# define sinhf rpl_sinhf -# endif -_GL_FUNCDECL_RPL (sinhf, float, (float x)); -_GL_CXXALIAS_RPL (sinhf, float, (float x)); -# else -# if !@HAVE_SINHF@ -# undef sinhf -_GL_FUNCDECL_SYS (sinhf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (sinhf, float, (float x)); -# endif -_GL_CXXALIASWARN (sinhf); -#elif defined GNULIB_POSIXCHECK -# undef sinhf -# if HAVE_RAW_DECL_SINHF -_GL_WARN_ON_USE (sinhf, "sinhf is unportable - " - "use gnulib module sinhf for portability"); -# endif -#endif - - -#if @GNULIB_SQRTF@ -# if @REPLACE_SQRTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef sqrtf -# define sqrtf rpl_sqrtf -# endif -_GL_FUNCDECL_RPL (sqrtf, float, (float x)); -_GL_CXXALIAS_RPL (sqrtf, float, (float x)); -# else -# if !@HAVE_SQRTF@ -# undef sqrtf -_GL_FUNCDECL_SYS (sqrtf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (sqrtf, float, (float x)); -# endif -_GL_CXXALIASWARN (sqrtf); -#elif defined GNULIB_POSIXCHECK -# undef sqrtf -# if HAVE_RAW_DECL_SQRTF -_GL_WARN_ON_USE (sqrtf, "sqrtf is unportable - " - "use gnulib module sqrtf for portability"); -# endif -#endif - -#if @GNULIB_SQRTL@ -# if @REPLACE_SQRTL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef sqrtl -# define sqrtl rpl_sqrtl -# endif -_GL_FUNCDECL_RPL (sqrtl, long double, (long double x)); -_GL_CXXALIAS_RPL (sqrtl, long double, (long double x)); -# else -# if !@HAVE_SQRTL@ || !@HAVE_DECL_SQRTL@ -# undef sqrtl -_GL_FUNCDECL_SYS (sqrtl, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (sqrtl, long double, (long double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (sqrtl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef sqrtl -# if HAVE_RAW_DECL_SQRTL -_GL_WARN_ON_USE (sqrtl, "sqrtl is unportable - " - "use gnulib module sqrtl for portability"); -# endif -#endif - - -#if @GNULIB_TANF@ -# if @REPLACE_TANF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef tanf -# define tanf rpl_tanf -# endif -_GL_FUNCDECL_RPL (tanf, float, (float x)); -_GL_CXXALIAS_RPL (tanf, float, (float x)); -# else -# if !@HAVE_TANF@ -# undef tanf -_GL_FUNCDECL_SYS (tanf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (tanf, float, (float x)); -# endif -_GL_CXXALIASWARN (tanf); -#elif defined GNULIB_POSIXCHECK -# undef tanf -# if HAVE_RAW_DECL_TANF -_GL_WARN_ON_USE (tanf, "tanf is unportable - " - "use gnulib module tanf for portability"); -# endif -#endif - -#if @GNULIB_TANL@ -# if !@HAVE_TANL@ || !@HAVE_DECL_TANL@ -# undef tanl -_GL_FUNCDECL_SYS (tanl, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (tanl, long double, (long double x)); -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (tanl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef tanl -# if HAVE_RAW_DECL_TANL -_GL_WARN_ON_USE (tanl, "tanl is unportable - " - "use gnulib module tanl for portability"); -# endif -#endif - - -#if @GNULIB_TANHF@ -# if @REPLACE_TANHF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef tanhf -# define tanhf rpl_tanhf -# endif -_GL_FUNCDECL_RPL (tanhf, float, (float x)); -_GL_CXXALIAS_RPL (tanhf, float, (float x)); -# else -# if !@HAVE_TANHF@ -# undef tanhf -_GL_FUNCDECL_SYS (tanhf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (tanhf, float, (float x)); -# endif -_GL_CXXALIASWARN (tanhf); -#elif defined GNULIB_POSIXCHECK -# undef tanhf -# if HAVE_RAW_DECL_TANHF -_GL_WARN_ON_USE (tanhf, "tanhf is unportable - " - "use gnulib module tanhf for portability"); -# endif -#endif - - -#if @GNULIB_TRUNCF@ -# if @REPLACE_TRUNCF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef truncf -# define truncf rpl_truncf -# endif -_GL_FUNCDECL_RPL (truncf, float, (float x)); -_GL_CXXALIAS_RPL (truncf, float, (float x)); -# else -# if !@HAVE_DECL_TRUNCF@ -_GL_FUNCDECL_SYS (truncf, float, (float x)); -# endif -_GL_CXXALIAS_SYS (truncf, float, (float x)); -# endif -_GL_CXXALIASWARN (truncf); -#elif defined GNULIB_POSIXCHECK -# undef truncf -# if HAVE_RAW_DECL_TRUNCF -_GL_WARN_ON_USE (truncf, "truncf is unportable - " - "use gnulib module truncf for portability"); -# endif -#endif - -#if @GNULIB_TRUNC@ -# if @REPLACE_TRUNC@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef trunc -# define trunc rpl_trunc -# endif -_GL_FUNCDECL_RPL (trunc, double, (double x)); -_GL_CXXALIAS_RPL (trunc, double, (double x)); -# else -# if !@HAVE_DECL_TRUNC@ -_GL_FUNCDECL_SYS (trunc, double, (double x)); -# endif -_GL_CXXALIAS_SYS (trunc, double, (double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN1 (trunc, double, (double x)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef trunc -# if HAVE_RAW_DECL_TRUNC -_GL_WARN_ON_USE (trunc, "trunc is unportable - " - "use gnulib module trunc for portability"); -# endif -#endif - -#if @GNULIB_TRUNCL@ -# if @REPLACE_TRUNCL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef truncl -# define truncl rpl_truncl -# endif -_GL_FUNCDECL_RPL (truncl, long double, (long double x)); -_GL_CXXALIAS_RPL (truncl, long double, (long double x)); -# else -# if !@HAVE_DECL_TRUNCL@ -_GL_FUNCDECL_SYS (truncl, long double, (long double x)); -# endif -_GL_CXXALIAS_SYS (truncl, long double, (long double x)); -# endif -# if __GLIBC__ >= 2 -_GL_CXXALIASWARN (truncl); -# endif -#elif defined GNULIB_POSIXCHECK -# undef truncl -# if HAVE_RAW_DECL_TRUNCL -_GL_WARN_ON_USE (truncl, "truncl is unportable - " - "use gnulib module truncl for portability"); -# endif -#endif - - -#if @GNULIB_MDA_Y0@ -/* On native Windows, map 'y0' to '_y0', so that -loldnames is not - required. In C++ with GNULIB_NAMESPACE, avoid differences between - platforms by defining GNULIB_NAMESPACE::y0 always. */ -# if defined _WIN32 && !defined __CYGWIN__ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef y0 -# define y0 _y0 -# endif -_GL_CXXALIAS_MDA (y0, double, (double x)); -# else -_GL_CXXALIAS_SYS (y0, double, (double x)); -# endif -_GL_CXXALIASWARN (y0); -#endif - -#if @GNULIB_MDA_Y1@ -/* On native Windows, map 'y1' to '_y1', so that -loldnames is not - required. In C++ with GNULIB_NAMESPACE, avoid differences between - platforms by defining GNULIB_NAMESPACE::y1 always. */ -# if defined _WIN32 && !defined __CYGWIN__ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef y1 -# define y1 _y1 -# endif -_GL_CXXALIAS_MDA (y1, double, (double x)); -# else -_GL_CXXALIAS_SYS (y1, double, (double x)); -# endif -_GL_CXXALIASWARN (y1); -#endif - -#if @GNULIB_MDA_YN@ -/* On native Windows, map 'yn' to '_yn', so that -loldnames is not - required. In C++ with GNULIB_NAMESPACE, avoid differences between - platforms by defining GNULIB_NAMESPACE::yn always. */ -# if defined _WIN32 && !defined __CYGWIN__ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef yn -# define yn _yn -# endif -_GL_CXXALIAS_MDA (yn, double, (int n, double x)); -# else -_GL_CXXALIAS_SYS (yn, double, (int n, double x)); -# endif -_GL_CXXALIASWARN (yn); -#endif - - -/* Definitions of function-like macros come here, after the function - declarations. */ - - -#if @GNULIB_ISFINITE@ -# if @REPLACE_ISFINITE@ -_GL_EXTERN_C int gl_isfinitef (float x); -_GL_EXTERN_C int gl_isfinited (double x); -_GL_EXTERN_C int gl_isfinitel (long double x); -# undef isfinite -# define isfinite(x) \ - (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \ - sizeof (x) == sizeof (double) ? gl_isfinited (x) : \ - gl_isfinitef (x)) -# endif -# ifdef __cplusplus -# if defined isfinite || defined GNULIB_NAMESPACE -_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite) -# undef isfinite -# if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || defined _AIX || (defined _WIN32 && !defined __CYGWIN__))) - /* This platform's possibly defines isfinite through a set of inline - functions. */ -_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, rpl_isfinite, bool) -# define isfinite rpl_isfinite -# define GNULIB_NAMESPACE_LACKS_ISFINITE 1 -# else -_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, isfinite, bool) -# endif -# endif -# endif -#elif defined GNULIB_POSIXCHECK -# if defined isfinite -_GL_WARN_REAL_FLOATING_DECL (isfinite); -# undef isfinite -# define isfinite(x) _GL_WARN_REAL_FLOATING_IMPL (isfinite, x) -# endif -#endif - - -#if @GNULIB_ISINF@ -# if @REPLACE_ISINF@ -_GL_EXTERN_C int gl_isinff (float x); -_GL_EXTERN_C int gl_isinfd (double x); -_GL_EXTERN_C int gl_isinfl (long double x); -# undef isinf -# define isinf(x) \ - (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \ - sizeof (x) == sizeof (double) ? gl_isinfd (x) : \ - gl_isinff (x)) -# endif -# ifdef __cplusplus -# if defined isinf || defined GNULIB_NAMESPACE -_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf) -# undef isinf -# if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || (defined _WIN32 && !defined __CYGWIN__))) - /* This platform's possibly defines isinf through a set of inline - functions. */ -_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, rpl_isinf, bool) -# define isinf rpl_isinf -# define GNULIB_NAMESPACE_LACKS_ISINF 1 -# else -_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, isinf, bool) -# endif -# endif -# endif -#elif defined GNULIB_POSIXCHECK -# if defined isinf -_GL_WARN_REAL_FLOATING_DECL (isinf); -# undef isinf -# define isinf(x) _GL_WARN_REAL_FLOATING_IMPL (isinf, x) -# endif -#endif - - -#if @GNULIB_ISNANF@ -/* Test for NaN for 'float' numbers. */ -# if @HAVE_ISNANF@ -/* The original included above provides a declaration of isnan macro - or (older) isnanf function. */ -# if (__GNUC__ >= 4) || (__clang_major__ >= 4) - /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. - GCC >= 4.0 also provides __builtin_isnanf, but clang doesn't. */ -# undef isnanf -# define isnanf(x) __builtin_isnan ((float)(x)) -# elif defined isnan -# undef isnanf -# define isnanf(x) isnan ((float)(x)) -# endif -# else -/* Test whether X is a NaN. */ -# undef isnanf -# define isnanf rpl_isnanf -_GL_EXTERN_C int isnanf (float x); -# endif -#endif - -#if @GNULIB_ISNAND@ -/* Test for NaN for 'double' numbers. - This function is a gnulib extension, unlike isnan() which applied only - to 'double' numbers earlier but now is a type-generic macro. */ -# if @HAVE_ISNAND@ -/* The original included above provides a declaration of isnan - macro. */ -# if (__GNUC__ >= 4) || (__clang_major__ >= 4) - /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. */ -# undef isnand -# define isnand(x) __builtin_isnan ((double)(x)) -# else -# undef isnand -# define isnand(x) isnan ((double)(x)) -# endif -# else -/* Test whether X is a NaN. */ -# undef isnand -# define isnand rpl_isnand -_GL_EXTERN_C int isnand (double x); -# endif -#endif - -#if @GNULIB_ISNANL@ -/* Test for NaN for 'long double' numbers. */ -# if @HAVE_ISNANL@ -/* The original included above provides a declaration of isnan - macro or (older) isnanl function. */ -# if (__GNUC__ >= 4) || (__clang_major__ >= 4) - /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. - GCC >= 4.0 also provides __builtin_isnanl, but clang doesn't. */ -# undef isnanl -# define isnanl(x) __builtin_isnan ((long double)(x)) -# elif defined isnan -# undef isnanl -# define isnanl(x) isnan ((long double)(x)) -# endif -# else -/* Test whether X is a NaN. */ -# undef isnanl -# define isnanl rpl_isnanl -_GL_EXTERN_C int isnanl (long double x) _GL_ATTRIBUTE_CONST; -# endif -#endif - -/* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL! */ -#if @GNULIB_ISNAN@ -# if @REPLACE_ISNAN@ -/* We can't just use the isnanf macro (e.g.) as exposed by - isnanf.h (e.g.) here, because those may end up being macros - that recursively expand back to isnan. So use the gnulib - replacements for them directly. */ -# if @HAVE_ISNANF@ && (__GNUC__ >= 4) || (__clang_major__ >= 4) -# define gl_isnan_f(x) __builtin_isnan ((float)(x)) -# else -_GL_EXTERN_C int rpl_isnanf (float x); -# define gl_isnan_f(x) rpl_isnanf (x) -# endif -# if @HAVE_ISNAND@ && (__GNUC__ >= 4) || (__clang_major__ >= 4) -# define gl_isnan_d(x) __builtin_isnan ((double)(x)) -# else -_GL_EXTERN_C int rpl_isnand (double x); -# define gl_isnan_d(x) rpl_isnand (x) -# endif -# if @HAVE_ISNANL@ && (__GNUC__ >= 4) || (__clang_major__ >= 4) -# define gl_isnan_l(x) __builtin_isnan ((long double)(x)) -# else -_GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST; -# define gl_isnan_l(x) rpl_isnanl (x) -# endif -# undef isnan -# define isnan(x) \ - (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \ - sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \ - gl_isnan_f (x)) -# elif (__GNUC__ >= 4) || (__clang_major__ >= 4) -# undef isnan -# define isnan(x) \ - (sizeof (x) == sizeof (long double) ? __builtin_isnan ((long double)(x)) : \ - sizeof (x) == sizeof (double) ? __builtin_isnan ((double)(x)) : \ - __builtin_isnan ((float)(x))) -# endif -# ifdef __cplusplus -# if defined isnan || defined GNULIB_NAMESPACE -_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan) -# undef isnan -# if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__ && __clang_major__ != 12) || (defined __FreeBSD__ && (__clang_major__ < 7 || __clang_major__ >= 11)) || defined __OpenBSD__ || (defined _WIN32 && !defined __CYGWIN__))) - /* This platform's possibly defines isnan through a set of inline - functions. */ -_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, rpl_isnan, bool) -# define isnan rpl_isnan -# define GNULIB_NAMESPACE_LACKS_ISNAN 1 -# elif (defined __FreeBSD__ && __clang_major__ >= 14) - /* Neither of the two possible _GL_MATH_CXX_REAL_FLOATING_DECL_2 invocations - works. Inline functions are already present in /usr/include/c++/v1/math.h, - which comes from LLVM. */ -# define GNULIB_NAMESPACE_LACKS_ISNAN 1 -# else -_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, isnan, bool) -# endif -# endif -# else -/* Ensure isnan is a macro. */ -# ifndef isnan -# define isnan isnan -# endif -# endif -#elif defined GNULIB_POSIXCHECK -# if defined isnan -_GL_WARN_REAL_FLOATING_DECL (isnan); -# undef isnan -# define isnan(x) _GL_WARN_REAL_FLOATING_IMPL (isnan, x) -# endif -#endif - - -#if @GNULIB_SIGNBIT@ -# if (@REPLACE_SIGNBIT_USING_BUILTINS@ \ - && (!defined __cplusplus || __cplusplus < 201103)) -# undef signbit - /* GCC >= 4.0 and clang provide three built-ins for signbit. */ -# define signbit(x) \ - (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ - sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ - __builtin_signbitf (x)) -# endif -# if @REPLACE_SIGNBIT@ && !GNULIB_defined_signbit -# undef signbit -_GL_EXTERN_C int gl_signbitf (float arg); -_GL_EXTERN_C int gl_signbitd (double arg); -_GL_EXTERN_C int gl_signbitl (long double arg); -# if (__GNUC__ >= 2 || defined __clang__) && !defined __STRICT_ANSI__ -# define _GL_NUM_UINT_WORDS(type) \ - ((sizeof (type) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -# if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf -# define gl_signbitf_OPTIMIZED_MACRO -# define gl_signbitf(arg) \ - ({ union { float _value; \ - unsigned int _word[_GL_NUM_UINT_WORDS (float)]; \ - } _m; \ - _m._value = (arg); \ - (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; \ - }) -# endif -# if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd -# define gl_signbitd_OPTIMIZED_MACRO -# define gl_signbitd(arg) \ - ({ union { double _value; \ - unsigned int _word[_GL_NUM_UINT_WORDS (double)]; \ - } _m; \ - _m._value = (arg); \ - (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; \ - }) -# endif -# if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl -# define gl_signbitl_OPTIMIZED_MACRO -# define gl_signbitl(arg) \ - ({ union { long double _value; \ - unsigned int _word[_GL_NUM_UINT_WORDS (long double)]; \ - } _m; \ - _m._value = (arg); \ - (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; \ - }) -# endif -# endif -# define signbit(x) \ - (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \ - sizeof (x) == sizeof (double) ? gl_signbitd (x) : \ - gl_signbitf (x)) -# define GNULIB_defined_signbit 1 -# endif -# ifdef __cplusplus -# if defined signbit || defined GNULIB_NAMESPACE -_GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit) -# undef signbit -# if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || defined _AIX || (defined _WIN32 && !defined __CYGWIN__))) - /* This platform's possibly defines signbit through a set of inline - functions. */ -_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, rpl_signbit, bool) -# define signbit rpl_signbit -# define GNULIB_NAMESPACE_LACKS_SIGNBIT 1 -# else -_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, signbit, bool) -# endif -# endif -# endif -#elif defined GNULIB_POSIXCHECK -# if defined signbit -_GL_WARN_REAL_FLOATING_DECL (signbit); -# undef signbit -# define signbit(x) _GL_WARN_REAL_FLOATING_IMPL (signbit, x) -# endif -#endif - -_GL_INLINE_HEADER_END - -#endif /* _@GUARD_PREFIX@_MATH_H */ -#endif /* _GL_INCLUDING_MATH_H */ -#endif /* _@GUARD_PREFIX@_MATH_H */ -#endif diff --git a/lib/mini-gmp.c b/lib/mini-gmp.c index ea037b801dc..69a72bfd460 100644 --- a/lib/mini-gmp.c +++ b/lib/mini-gmp.c @@ -172,12 +172,19 @@ see https://www.gnu.org/licenses/. */ } \ } while (0) +/* If mp_limb_t is of size smaller than int, plain u*v implies + automatic promotion to *signed* int, and then multiply may overflow + and cause undefined behavior. Explicitly cast to unsigned int for + that case. */ +#define gmp_umullo_limb(u, v) \ + ((sizeof(mp_limb_t) >= sizeof(int)) ? (u)*(v) : (unsigned int)(u) * (v)) + #define gmp_udiv_qrnnd_preinv(q, r, nh, nl, d, di) \ do { \ mp_limb_t _qh, _ql, _r, _mask; \ gmp_umul_ppmm (_qh, _ql, (nh), (di)); \ gmp_add_ssaaaa (_qh, _ql, _qh, _ql, (nh) + 1, (nl)); \ - _r = (nl) - _qh * (d); \ + _r = (nl) - gmp_umullo_limb (_qh, (d)); \ _mask = -(mp_limb_t) (_r > _ql); /* both > and >= are OK */ \ _qh += _mask; \ _r += _mask & (d); \ @@ -198,7 +205,7 @@ see https://www.gnu.org/licenses/. */ gmp_add_ssaaaa ((q), _q0, (q), _q0, (n2), (n1)); \ \ /* Compute the two most significant limbs of n - q'd */ \ - (r1) = (n1) - (d1) * (q); \ + (r1) = (n1) - gmp_umullo_limb ((d1), (q)); \ gmp_sub_ddmmss ((r1), (r0), (r1), (n0), (d1), (d0)); \ gmp_umul_ppmm (_t1, _t0, (d0), (q)); \ gmp_sub_ddmmss ((r1), (r0), (r1), (r0), _t1, _t0); \ diff --git a/lib/printf-args.c b/lib/printf-args.c deleted file mode 100644 index b2b21aeec18..00000000000 --- a/lib/printf-args.c +++ /dev/null @@ -1,306 +0,0 @@ -/* Decomposed printf argument list. - Copyright (C) 1999, 2002-2003, 2005-2007, 2009-2023 Free Software - Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* This file can be parametrized with the following macros: - ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. - PRINTF_FETCHARGS Name of the function to be defined. - STATIC Set to 'static' to declare the function static. */ - -#ifndef PRINTF_FETCHARGS -# include -#endif - -/* Specification. */ -#ifndef PRINTF_FETCHARGS -# include "printf-args.h" -#endif - -/* Get INT_WIDTH. */ -#include - -#ifdef STATIC -STATIC -#endif -int -PRINTF_FETCHARGS (va_list args, arguments *a) -{ - size_t i; - argument *ap; - - for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++) - switch (ap->type) - { - case TYPE_SCHAR: - ap->a.a_schar = va_arg (args, /*signed char*/ int); - break; - case TYPE_UCHAR: - ap->a.a_uchar = va_arg (args, /*unsigned char*/ int); - break; - case TYPE_SHORT: - ap->a.a_short = va_arg (args, /*short*/ int); - break; - case TYPE_USHORT: - ap->a.a_ushort = va_arg (args, /*unsigned short*/ int); - break; - case TYPE_INT: - ap->a.a_int = va_arg (args, int); - break; - case TYPE_UINT: - ap->a.a_uint = va_arg (args, unsigned int); - break; - case TYPE_LONGINT: - ap->a.a_longint = va_arg (args, long int); - break; - case TYPE_ULONGINT: - ap->a.a_ulongint = va_arg (args, unsigned long int); - break; - case TYPE_LONGLONGINT: - ap->a.a_longlongint = va_arg (args, long long int); - break; - case TYPE_ULONGLONGINT: - ap->a.a_ulonglongint = va_arg (args, unsigned long long int); - break; - case TYPE_INT8_T: - #if INT8_WIDTH < INT_WIDTH - ap->a.a_int8_t = va_arg (args, /* int8_t */ int); - #else - ap->a.a_int8_t = va_arg (args, int8_t); - #endif - break; - case TYPE_UINT8_T: - #if UINT8_WIDTH < INT_WIDTH - ap->a.a_uint8_t = va_arg (args, /* uint8_t */ int); - #else - ap->a.a_uint8_t = va_arg (args, uint8_t); - #endif - break; - case TYPE_INT16_T: - #if INT16_WIDTH < INT_WIDTH - ap->a.a_int16_t = va_arg (args, /* int16_t */ int); - #else - ap->a.a_int16_t = va_arg (args, int16_t); - #endif - break; - case TYPE_UINT16_T: - #if UINT16_WIDTH < INT_WIDTH - ap->a.a_uint16_t = va_arg (args, /* uint16_t */ int); - #else - ap->a.a_uint16_t = va_arg (args, uint16_t); - #endif - break; - case TYPE_INT32_T: - #if INT32_WIDTH < INT_WIDTH - ap->a.a_int32_t = va_arg (args, /* int32_t */ int); - #else - ap->a.a_int32_t = va_arg (args, int32_t); - #endif - break; - case TYPE_UINT32_T: - #if UINT32_WIDTH < INT_WIDTH - ap->a.a_uint32_t = va_arg (args, /* uint32_t */ int); - #else - ap->a.a_uint32_t = va_arg (args, uint32_t); - #endif - break; - case TYPE_INT64_T: - ap->a.a_int64_t = va_arg (args, int64_t); - break; - case TYPE_UINT64_T: - ap->a.a_uint64_t = va_arg (args, uint64_t); - break; - case TYPE_INT_FAST8_T: - #if INT_FAST8_WIDTH < INT_WIDTH - ap->a.a_int_fast8_t = va_arg (args, /* int_fast8_t */ int); - #else - ap->a.a_int_fast8_t = va_arg (args, int_fast8_t); - #endif - break; - case TYPE_UINT_FAST8_T: - #if UINT_FAST8_WIDTH < INT_WIDTH - ap->a.a_uint_fast8_t = va_arg (args, /* uint_fast8_t */ int); - #else - ap->a.a_uint_fast8_t = va_arg (args, uint_fast8_t); - #endif - break; - case TYPE_INT_FAST16_T: - #if INT_FAST16_WIDTH < INT_WIDTH - ap->a.a_int_fast16_t = va_arg (args, /* int_fast16_t */ int); - #else - ap->a.a_int_fast16_t = va_arg (args, int_fast16_t); - #endif - break; - case TYPE_UINT_FAST16_T: - #if UINT_FAST16_WIDTH < INT_WIDTH - ap->a.a_uint_fast16_t = va_arg (args, /* uint_fast16_t */ int); - #else - ap->a.a_uint_fast16_t = va_arg (args, uint_fast16_t); - #endif - break; - case TYPE_INT_FAST32_T: - #if INT_FAST32_WIDTH < INT_WIDTH - ap->a.a_int_fast32_t = va_arg (args, /* int_fast32_t */ int); - #else - ap->a.a_int_fast32_t = va_arg (args, int_fast32_t); - #endif - break; - case TYPE_UINT_FAST32_T: - #if UINT_FAST32_WIDTH < INT_WIDTH - ap->a.a_uint_fast32_t = va_arg (args, /* uint_fast32_t */ int); - #else - ap->a.a_uint_fast32_t = va_arg (args, uint_fast32_t); - #endif - break; - case TYPE_INT_FAST64_T: - ap->a.a_int_fast64_t = va_arg (args, int_fast64_t); - break; - case TYPE_UINT_FAST64_T: - ap->a.a_uint_fast64_t = va_arg (args, uint_fast64_t); - break; - case TYPE_DOUBLE: - ap->a.a_double = va_arg (args, double); - break; - case TYPE_LONGDOUBLE: - ap->a.a_longdouble = va_arg (args, long double); - break; - case TYPE_CHAR: - ap->a.a_char = va_arg (args, int); - break; -#if HAVE_WINT_T - case TYPE_WIDE_CHAR: - /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by - default argument promotions", this is not the case in mingw32, - where wint_t is 'unsigned short'. */ - ap->a.a_wide_char = - (sizeof (wint_t) < sizeof (int) - ? (wint_t) va_arg (args, int) - : va_arg (args, wint_t)); - break; -#endif - case TYPE_STRING: - ap->a.a_string = va_arg (args, const char *); - /* A null pointer is an invalid argument for "%s", but in practice - it occurs quite frequently in printf statements that produce - debug output. Use a fallback in this case. */ - if (ap->a.a_string == NULL) - ap->a.a_string = "(NULL)"; - break; -#if HAVE_WCHAR_T - case TYPE_WIDE_STRING: - ap->a.a_wide_string = va_arg (args, const wchar_t *); - /* A null pointer is an invalid argument for "%ls", but in practice - it occurs quite frequently in printf statements that produce - debug output. Use a fallback in this case. */ - if (ap->a.a_wide_string == NULL) - { - static const wchar_t wide_null_string[] = - { - (wchar_t)'(', - (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L', - (wchar_t)')', - (wchar_t)0 - }; - ap->a.a_wide_string = wide_null_string; - } - break; -#endif - case TYPE_POINTER: - ap->a.a_pointer = va_arg (args, void *); - break; - case TYPE_COUNT_SCHAR_POINTER: - ap->a.a_count_schar_pointer = va_arg (args, signed char *); - break; - case TYPE_COUNT_SHORT_POINTER: - ap->a.a_count_short_pointer = va_arg (args, short *); - break; - case TYPE_COUNT_INT_POINTER: - ap->a.a_count_int_pointer = va_arg (args, int *); - break; - case TYPE_COUNT_LONGINT_POINTER: - ap->a.a_count_longint_pointer = va_arg (args, long int *); - break; - case TYPE_COUNT_LONGLONGINT_POINTER: - ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); - break; - case TYPE_COUNT_INT8_T_POINTER: - ap->a.a_count_int8_t_pointer = va_arg (args, int8_t *); - break; - case TYPE_COUNT_INT16_T_POINTER: - ap->a.a_count_int16_t_pointer = va_arg (args, int16_t *); - break; - case TYPE_COUNT_INT32_T_POINTER: - ap->a.a_count_int32_t_pointer = va_arg (args, int32_t *); - break; - case TYPE_COUNT_INT64_T_POINTER: - ap->a.a_count_int64_t_pointer = va_arg (args, int64_t *); - break; - case TYPE_COUNT_INT_FAST8_T_POINTER: - ap->a.a_count_int_fast8_t_pointer = va_arg (args, int_fast8_t *); - break; - case TYPE_COUNT_INT_FAST16_T_POINTER: - ap->a.a_count_int_fast16_t_pointer = va_arg (args, int_fast16_t *); - break; - case TYPE_COUNT_INT_FAST32_T_POINTER: - ap->a.a_count_int_fast32_t_pointer = va_arg (args, int_fast32_t *); - break; - case TYPE_COUNT_INT_FAST64_T_POINTER: - ap->a.a_count_int_fast64_t_pointer = va_arg (args, int_fast64_t *); - break; -#if ENABLE_UNISTDIO - /* The unistdio extensions. */ - case TYPE_U8_STRING: - ap->a.a_u8_string = va_arg (args, const uint8_t *); - /* A null pointer is an invalid argument for "%U", but in practice - it occurs quite frequently in printf statements that produce - debug output. Use a fallback in this case. */ - if (ap->a.a_u8_string == NULL) - { - static const uint8_t u8_null_string[] = - { '(', 'N', 'U', 'L', 'L', ')', 0 }; - ap->a.a_u8_string = u8_null_string; - } - break; - case TYPE_U16_STRING: - ap->a.a_u16_string = va_arg (args, const uint16_t *); - /* A null pointer is an invalid argument for "%lU", but in practice - it occurs quite frequently in printf statements that produce - debug output. Use a fallback in this case. */ - if (ap->a.a_u16_string == NULL) - { - static const uint16_t u16_null_string[] = - { '(', 'N', 'U', 'L', 'L', ')', 0 }; - ap->a.a_u16_string = u16_null_string; - } - break; - case TYPE_U32_STRING: - ap->a.a_u32_string = va_arg (args, const uint32_t *); - /* A null pointer is an invalid argument for "%llU", but in practice - it occurs quite frequently in printf statements that produce - debug output. Use a fallback in this case. */ - if (ap->a.a_u32_string == NULL) - { - static const uint32_t u32_null_string[] = - { '(', 'N', 'U', 'L', 'L', ')', 0 }; - ap->a.a_u32_string = u32_null_string; - } - break; -#endif - default: - /* Unknown type. */ - return -1; - } - return 0; -} diff --git a/lib/printf-args.h b/lib/printf-args.h deleted file mode 100644 index 11016102828..00000000000 --- a/lib/printf-args.h +++ /dev/null @@ -1,205 +0,0 @@ -/* Decomposed printf argument list. - Copyright (C) 1999, 2002-2003, 2006-2007, 2011-2023 Free Software - Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifndef _PRINTF_ARGS_H -#define _PRINTF_ARGS_H - -/* This file can be parametrized with the following macros: - ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. - PRINTF_FETCHARGS Name of the function to be declared. - STATIC Set to 'static' to declare the function static. */ - -/* Default parameters. */ -#ifndef PRINTF_FETCHARGS -# define PRINTF_FETCHARGS printf_fetchargs -#endif - -/* Get size_t. */ -#include - -/* Get wchar_t. */ -#if HAVE_WCHAR_T -# include -#endif - -/* Get wint_t. */ -#if HAVE_WINT_T -# include -#endif - -/* Get intN_t, uintN_t, intN_fast_t, uintN_fast_t. */ -#include - -/* Get va_list. */ -#include - - -/* Argument types */ -typedef enum -{ - TYPE_NONE, - TYPE_SCHAR, - TYPE_UCHAR, - TYPE_SHORT, - TYPE_USHORT, - TYPE_INT, - TYPE_UINT, - TYPE_LONGINT, - TYPE_ULONGINT, - TYPE_LONGLONGINT, - TYPE_ULONGLONGINT, - /* According to ISO C 23 § 7.23.6.1, "all exact-width integer types", - "all minimum-width integer types", and "all fastest minimum-width integer - types" defined in should be supported. But for portability - between platforms, we support only those with N = 8, 16, 32, 64. */ - TYPE_INT8_T, - TYPE_UINT8_T, - TYPE_INT16_T, - TYPE_UINT16_T, - TYPE_INT32_T, - TYPE_UINT32_T, - TYPE_INT64_T, - TYPE_UINT64_T, - TYPE_INT_FAST8_T, - TYPE_UINT_FAST8_T, - TYPE_INT_FAST16_T, - TYPE_UINT_FAST16_T, - TYPE_INT_FAST32_T, - TYPE_UINT_FAST32_T, - TYPE_INT_FAST64_T, - TYPE_UINT_FAST64_T, - TYPE_DOUBLE, - TYPE_LONGDOUBLE, - TYPE_CHAR, -#if HAVE_WINT_T - TYPE_WIDE_CHAR, -#endif - TYPE_STRING, -#if HAVE_WCHAR_T - TYPE_WIDE_STRING, -#endif - TYPE_POINTER, - TYPE_COUNT_SCHAR_POINTER, - TYPE_COUNT_SHORT_POINTER, - TYPE_COUNT_INT_POINTER, - TYPE_COUNT_LONGINT_POINTER, - TYPE_COUNT_LONGLONGINT_POINTER, - TYPE_COUNT_INT8_T_POINTER, - TYPE_COUNT_INT16_T_POINTER, - TYPE_COUNT_INT32_T_POINTER, - TYPE_COUNT_INT64_T_POINTER, - TYPE_COUNT_INT_FAST8_T_POINTER, - TYPE_COUNT_INT_FAST16_T_POINTER, - TYPE_COUNT_INT_FAST32_T_POINTER, - TYPE_COUNT_INT_FAST64_T_POINTER -#if ENABLE_UNISTDIO - /* The unistdio extensions. */ -, TYPE_U8_STRING -, TYPE_U16_STRING -, TYPE_U32_STRING -#endif -} arg_type; - -/* Polymorphic argument */ -typedef struct -{ - arg_type type; - union - { - signed char a_schar; - unsigned char a_uchar; - short a_short; - unsigned short a_ushort; - int a_int; - unsigned int a_uint; - long int a_longint; - unsigned long int a_ulongint; - long long int a_longlongint; - unsigned long long int a_ulonglongint; - int8_t a_int8_t; - uint8_t a_uint8_t; - int16_t a_int16_t; - uint16_t a_uint16_t; - int32_t a_int32_t; - uint32_t a_uint32_t; - int64_t a_int64_t; - uint64_t a_uint64_t; - int_fast8_t a_int_fast8_t; - uint_fast8_t a_uint_fast8_t; - int_fast16_t a_int_fast16_t; - uint_fast16_t a_uint_fast16_t; - int_fast32_t a_int_fast32_t; - uint_fast32_t a_uint_fast32_t; - int_fast64_t a_int_fast64_t; - uint_fast64_t a_uint_fast64_t; - float a_float; /* unused */ - double a_double; - long double a_longdouble; - int a_char; -#if HAVE_WINT_T - wint_t a_wide_char; -#endif - const char* a_string; -#if HAVE_WCHAR_T - const wchar_t* a_wide_string; -#endif - void* a_pointer; - signed char * a_count_schar_pointer; - short * a_count_short_pointer; - int * a_count_int_pointer; - long int * a_count_longint_pointer; - long long int * a_count_longlongint_pointer; - int8_t * a_count_int8_t_pointer; - int16_t * a_count_int16_t_pointer; - int32_t * a_count_int32_t_pointer; - int64_t * a_count_int64_t_pointer; - int_fast8_t * a_count_int_fast8_t_pointer; - int_fast16_t * a_count_int_fast16_t_pointer; - int_fast32_t * a_count_int_fast32_t_pointer; - int_fast64_t * a_count_int_fast64_t_pointer; -#if ENABLE_UNISTDIO - /* The unistdio extensions. */ - const uint8_t * a_u8_string; - const uint16_t * a_u16_string; - const uint32_t * a_u32_string; -#endif - } - a; -} -argument; - -/* Number of directly allocated arguments (no malloc() needed). */ -#define N_DIRECT_ALLOC_ARGUMENTS 7 - -typedef struct -{ - size_t count; - argument *arg; - argument direct_alloc_arg[N_DIRECT_ALLOC_ARGUMENTS]; -} -arguments; - - -/* Fetch the arguments, putting them into a. */ -#ifdef STATIC -STATIC -#else -extern -#endif -int PRINTF_FETCHARGS (va_list args, arguments *a); - -#endif /* _PRINTF_ARGS_H */ diff --git a/lib/printf-frexp.c b/lib/printf-frexp.c deleted file mode 100644 index 8252b0656cb..00000000000 --- a/lib/printf-frexp.c +++ /dev/null @@ -1,190 +0,0 @@ -/* Split a double into fraction and mantissa, for hexadecimal printf. - Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#if ! defined USE_LONG_DOUBLE -# include -#endif - -/* Specification. */ -#ifdef USE_LONG_DOUBLE -# include "printf-frexpl.h" -#else -# include "printf-frexp.h" -#endif - -#include -#include -#ifdef USE_LONG_DOUBLE -# include "fpucw.h" -#endif - -/* This file assumes FLT_RADIX = 2. If FLT_RADIX is a power of 2 greater - than 2, or not even a power of 2, some rounding errors can occur, so that - then the returned mantissa is only guaranteed to be <= 2.0, not < 2.0. */ - -#ifdef USE_LONG_DOUBLE -# define FUNC printf_frexpl -# define DOUBLE long double -# define MIN_EXP LDBL_MIN_EXP -# if HAVE_FREXPL_IN_LIBC && HAVE_LDEXPL_IN_LIBC -# define USE_FREXP_LDEXP -# define FREXP frexpl -# define LDEXP ldexpl -# endif -# define DECL_ROUNDING DECL_LONG_DOUBLE_ROUNDING -# define BEGIN_ROUNDING() BEGIN_LONG_DOUBLE_ROUNDING () -# define END_ROUNDING() END_LONG_DOUBLE_ROUNDING () -# define L_(literal) literal##L -#else -# define FUNC printf_frexp -# define DOUBLE double -# define MIN_EXP DBL_MIN_EXP -# if HAVE_FREXP_IN_LIBC && HAVE_LDEXP_IN_LIBC -# define USE_FREXP_LDEXP -# define FREXP frexp -# define LDEXP ldexp -# endif -# define DECL_ROUNDING -# define BEGIN_ROUNDING() -# define END_ROUNDING() -# define L_(literal) literal -#endif - -DOUBLE -FUNC (DOUBLE x, int *expptr) -{ - int exponent; - DECL_ROUNDING - - BEGIN_ROUNDING (); - -#ifdef USE_FREXP_LDEXP - /* frexp and ldexp are usually faster than the loop below. */ - x = FREXP (x, &exponent); - - x = x + x; - exponent -= 1; - - if (exponent < MIN_EXP - 1) - { - x = LDEXP (x, exponent - (MIN_EXP - 1)); - exponent = MIN_EXP - 1; - } -#else - { - /* Since the exponent is an 'int', it fits in 64 bits. Therefore the - loops are executed no more than 64 times. */ - DOUBLE pow2[64]; /* pow2[i] = 2^2^i */ - DOUBLE powh[64]; /* powh[i] = 2^-2^i */ - int i; - - exponent = 0; - if (x >= L_(1.0)) - { - /* A nonnegative exponent. */ - { - DOUBLE pow2_i; /* = pow2[i] */ - DOUBLE powh_i; /* = powh[i] */ - - /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, - x * 2^exponent = argument, x >= 1.0. */ - for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); - ; - i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) - { - if (x >= pow2_i) - { - exponent += (1 << i); - x *= powh_i; - } - else - break; - - pow2[i] = pow2_i; - powh[i] = powh_i; - } - } - /* Here 1.0 <= x < 2^2^i. */ - } - else - { - /* A negative exponent. */ - { - DOUBLE pow2_i; /* = pow2[i] */ - DOUBLE powh_i; /* = powh[i] */ - - /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, - x * 2^exponent = argument, x < 1.0, exponent >= MIN_EXP - 1. */ - for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); - ; - i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) - { - if (exponent - (1 << i) < MIN_EXP - 1) - break; - - exponent -= (1 << i); - x *= pow2_i; - if (x >= L_(1.0)) - break; - - pow2[i] = pow2_i; - powh[i] = powh_i; - } - } - /* Here either x < 1.0 and exponent - 2^i < MIN_EXP - 1 <= exponent, - or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ - - if (x < L_(1.0)) - /* Invariants: x * 2^exponent = argument, x < 1.0 and - exponent - 2^i < MIN_EXP - 1 <= exponent. */ - while (i > 0) - { - i--; - if (exponent - (1 << i) >= MIN_EXP - 1) - { - exponent -= (1 << i); - x *= pow2[i]; - if (x >= L_(1.0)) - break; - } - } - - /* Here either x < 1.0 and exponent = MIN_EXP - 1, - or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ - } - - /* Invariants: x * 2^exponent = argument, and - either x < 1.0 and exponent = MIN_EXP - 1, - or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ - while (i > 0) - { - i--; - if (x >= pow2[i]) - { - exponent += (1 << i); - x *= powh[i]; - } - } - /* Here either x < 1.0 and exponent = MIN_EXP - 1, - or 1.0 <= x < 2.0 and exponent >= MIN_EXP - 1. */ - } -#endif - - END_ROUNDING (); - - *expptr = exponent; - return x; -} diff --git a/lib/printf-frexp.h b/lib/printf-frexp.h deleted file mode 100644 index 7c3f9e585db..00000000000 --- a/lib/printf-frexp.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Split a double into fraction and mantissa, for hexadecimal printf. - Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* Write a finite, positive number x as - x = mantissa * 2^exp - where exp >= DBL_MIN_EXP - 1, - mantissa < 2.0, - if x is not a denormalized number then mantissa >= 1.0. - Store exp in *EXPPTR and return mantissa. */ -extern double printf_frexp (double x, int *expptr); diff --git a/lib/printf-frexpl.c b/lib/printf-frexpl.c deleted file mode 100644 index ba7b579b987..00000000000 --- a/lib/printf-frexpl.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Split a 'long double' into fraction and mantissa, for hexadecimal printf. - Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -#if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE - -/* Specification. */ -# include "printf-frexpl.h" - -# include "printf-frexp.h" - -long double -printf_frexpl (long double x, int *expptr) -{ - return printf_frexp (x, expptr); -} - -#else - -# define USE_LONG_DOUBLE -# include "printf-frexp.c" - -#endif diff --git a/lib/printf-frexpl.h b/lib/printf-frexpl.h deleted file mode 100644 index 827443ec579..00000000000 --- a/lib/printf-frexpl.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Split a 'long double' into fraction and mantissa, for hexadecimal printf. - Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* Write a finite, positive number x as - x = mantissa * 2^exp - where exp >= LDBL_MIN_EXP - 1, - mantissa < 2.0, - if x is not a denormalized number then mantissa >= 1.0. - Store exp in *EXPPTR and return mantissa. */ -extern long double printf_frexpl (long double x, int *expptr); diff --git a/lib/printf-parse.c b/lib/printf-parse.c deleted file mode 100644 index d3f2c3cb5d1..00000000000 --- a/lib/printf-parse.c +++ /dev/null @@ -1,714 +0,0 @@ -/* Formatted output to strings. - Copyright (C) 1999-2000, 2002-2003, 2006-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* This file can be parametrized with the following macros: - CHAR_T The element type of the format string. - CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters - in the format string are ASCII. - DIRECTIVE Structure denoting a format directive. - Depends on CHAR_T. - DIRECTIVES Structure denoting the set of format directives of a - format string. Depends on CHAR_T. - PRINTF_PARSE Function that parses a format string. - Depends on CHAR_T. - STATIC Set to 'static' to declare the function static. - ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */ - -#ifndef PRINTF_PARSE -# include -#endif - -/* Specification. */ -#ifndef PRINTF_PARSE -# include "printf-parse.h" -#endif - -/* Default parameters. */ -#ifndef PRINTF_PARSE -# define PRINTF_PARSE printf_parse -# define CHAR_T char -# define DIRECTIVE char_directive -# define DIRECTIVES char_directives -#endif - -/* Get size_t, NULL. */ -#include - -/* Get intmax_t. */ -#include - -/* malloc(), realloc(), free(). */ -#include - -/* memcpy(). */ -#include - -/* errno. */ -#include - -/* Checked size_t computations. */ -#include "xsize.h" - -#if CHAR_T_ONLY_ASCII -/* c_isascii(). */ -# include "c-ctype.h" -#endif - -#ifdef STATIC -STATIC -#endif -int -PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) -{ - const CHAR_T *cp = format; /* pointer into format */ - size_t arg_posn = 0; /* number of regular arguments consumed */ - size_t d_allocated; /* allocated elements of d->dir */ - size_t a_allocated; /* allocated elements of a->arg */ - size_t max_width_length = 0; - size_t max_precision_length = 0; - - d->count = 0; - d_allocated = N_DIRECT_ALLOC_DIRECTIVES; - d->dir = d->direct_alloc_dir; - - a->count = 0; - a_allocated = N_DIRECT_ALLOC_ARGUMENTS; - a->arg = a->direct_alloc_arg; - -#define REGISTER_ARG(_index_,_type_) \ - { \ - size_t n = (_index_); \ - if (n >= a_allocated) \ - { \ - size_t memory_size; \ - argument *memory; \ - \ - a_allocated = xtimes (a_allocated, 2); \ - if (a_allocated <= n) \ - a_allocated = xsum (n, 1); \ - memory_size = xtimes (a_allocated, sizeof (argument)); \ - if (size_overflow_p (memory_size)) \ - /* Overflow, would lead to out of memory. */ \ - goto out_of_memory; \ - memory = (argument *) (a->arg != a->direct_alloc_arg \ - ? realloc (a->arg, memory_size) \ - : malloc (memory_size)); \ - if (memory == NULL) \ - /* Out of memory. */ \ - goto out_of_memory; \ - if (a->arg == a->direct_alloc_arg) \ - memcpy (memory, a->arg, a->count * sizeof (argument)); \ - a->arg = memory; \ - } \ - while (a->count <= n) \ - a->arg[a->count++].type = TYPE_NONE; \ - if (a->arg[n].type == TYPE_NONE) \ - a->arg[n].type = (_type_); \ - else if (a->arg[n].type != (_type_)) \ - /* Ambiguous type for positional argument. */ \ - goto error; \ - } - - while (*cp != '\0') - { - CHAR_T c = *cp++; - if (c == '%') - { - size_t arg_index = ARG_NONE; - DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */ - - /* Initialize the next directive. */ - dp->dir_start = cp - 1; - dp->flags = 0; - dp->width_start = NULL; - dp->width_end = NULL; - dp->width_arg_index = ARG_NONE; - dp->precision_start = NULL; - dp->precision_end = NULL; - dp->precision_arg_index = ARG_NONE; - dp->arg_index = ARG_NONE; - - /* Test for positional argument. */ - if (*cp >= '0' && *cp <= '9') - { - const CHAR_T *np; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - ; - if (*np == '$') - { - size_t n = 0; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - n = xsum (xtimes (n, 10), *np - '0'); - if (n == 0) - /* Positional argument 0. */ - goto error; - if (size_overflow_p (n)) - /* n too large, would lead to out of memory later. */ - goto error; - arg_index = n - 1; - cp = np + 1; - } - } - - /* Read the flags. */ - for (;;) - { - if (*cp == '\'') - { - dp->flags |= FLAG_GROUP; - cp++; - } - else if (*cp == '-') - { - dp->flags |= FLAG_LEFT; - cp++; - } - else if (*cp == '+') - { - dp->flags |= FLAG_SHOWSIGN; - cp++; - } - else if (*cp == ' ') - { - dp->flags |= FLAG_SPACE; - cp++; - } - else if (*cp == '#') - { - dp->flags |= FLAG_ALT; - cp++; - } - else if (*cp == '0') - { - dp->flags |= FLAG_ZERO; - cp++; - } -#if __GLIBC__ >= 2 && !defined __UCLIBC__ - else if (*cp == 'I') - { - dp->flags |= FLAG_LOCALIZED; - cp++; - } -#endif - else - break; - } - - /* Parse the field width. */ - if (*cp == '*') - { - dp->width_start = cp; - cp++; - dp->width_end = cp; - if (max_width_length < 1) - max_width_length = 1; - - /* Test for positional argument. */ - if (*cp >= '0' && *cp <= '9') - { - const CHAR_T *np; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - ; - if (*np == '$') - { - size_t n = 0; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - n = xsum (xtimes (n, 10), *np - '0'); - if (n == 0) - /* Positional argument 0. */ - goto error; - if (size_overflow_p (n)) - /* n too large, would lead to out of memory later. */ - goto error; - dp->width_arg_index = n - 1; - cp = np + 1; - } - } - if (dp->width_arg_index == ARG_NONE) - { - dp->width_arg_index = arg_posn++; - if (dp->width_arg_index == ARG_NONE) - /* arg_posn wrapped around. */ - goto error; - } - REGISTER_ARG (dp->width_arg_index, TYPE_INT); - } - else if (*cp >= '0' && *cp <= '9') - { - size_t width_length; - - dp->width_start = cp; - for (; *cp >= '0' && *cp <= '9'; cp++) - ; - dp->width_end = cp; - width_length = dp->width_end - dp->width_start; - if (max_width_length < width_length) - max_width_length = width_length; - } - - /* Parse the precision. */ - if (*cp == '.') - { - cp++; - if (*cp == '*') - { - dp->precision_start = cp - 1; - cp++; - dp->precision_end = cp; - if (max_precision_length < 2) - max_precision_length = 2; - - /* Test for positional argument. */ - if (*cp >= '0' && *cp <= '9') - { - const CHAR_T *np; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - ; - if (*np == '$') - { - size_t n = 0; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - n = xsum (xtimes (n, 10), *np - '0'); - if (n == 0) - /* Positional argument 0. */ - goto error; - if (size_overflow_p (n)) - /* n too large, would lead to out of memory - later. */ - goto error; - dp->precision_arg_index = n - 1; - cp = np + 1; - } - } - if (dp->precision_arg_index == ARG_NONE) - { - dp->precision_arg_index = arg_posn++; - if (dp->precision_arg_index == ARG_NONE) - /* arg_posn wrapped around. */ - goto error; - } - REGISTER_ARG (dp->precision_arg_index, TYPE_INT); - } - else - { - size_t precision_length; - - dp->precision_start = cp - 1; - for (; *cp >= '0' && *cp <= '9'; cp++) - ; - dp->precision_end = cp; - precision_length = dp->precision_end - dp->precision_start; - if (max_precision_length < precision_length) - max_precision_length = precision_length; - } - } - - { - arg_type type; - - /* Parse argument type/size specifiers. */ - /* Relevant for the conversion characters d, i. */ - arg_type signed_type = TYPE_INT; - /* Relevant for the conversion characters b, o, u, x, X. */ - arg_type unsigned_type = TYPE_UINT; - /* Relevant for the conversion characters n. */ - arg_type pointer_type = TYPE_COUNT_INT_POINTER; - /* Relevant for the conversion characters a, A, e, E, f, F, g, G. */ - arg_type floatingpoint_type = TYPE_DOUBLE; - - if (*cp == 'h') - { - if (cp[1] == 'h') - { - signed_type = TYPE_SCHAR; - unsigned_type = TYPE_UCHAR; - pointer_type = TYPE_COUNT_SCHAR_POINTER; - cp += 2; - } - else - { - signed_type = TYPE_SHORT; - unsigned_type = TYPE_USHORT; - pointer_type = TYPE_COUNT_SHORT_POINTER; - cp++; - } - } - else if (*cp == 'l') - { - if (cp[1] == 'l') - { - signed_type = TYPE_LONGLONGINT; - unsigned_type = TYPE_ULONGLONGINT; - pointer_type = TYPE_COUNT_LONGLONGINT_POINTER; - /* For backward compatibility only. */ - floatingpoint_type = TYPE_LONGDOUBLE; - cp += 2; - } - else - { - signed_type = TYPE_LONGINT; - unsigned_type = TYPE_ULONGINT; - pointer_type = TYPE_COUNT_LONGINT_POINTER; - cp++; - } - } - else if (*cp == 'j') - { - if (sizeof (intmax_t) > sizeof (long)) - { - /* intmax_t = long long */ - signed_type = TYPE_LONGLONGINT; - unsigned_type = TYPE_ULONGLONGINT; - pointer_type = TYPE_COUNT_LONGLONGINT_POINTER; - /* For backward compatibility only. */ - floatingpoint_type = TYPE_LONGDOUBLE; - } - else if (sizeof (intmax_t) > sizeof (int)) - { - /* intmax_t = long */ - signed_type = TYPE_LONGINT; - unsigned_type = TYPE_ULONGINT; - pointer_type = TYPE_COUNT_LONGINT_POINTER; - } - cp++; - } - else if (*cp == 'z' || *cp == 'Z') - { - /* 'z' is standardized in ISO C 99, but glibc uses 'Z' - because the warning facility in gcc-2.95.2 understands - only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */ - if (sizeof (size_t) > sizeof (long)) - { - /* size_t = unsigned long long */ - signed_type = TYPE_LONGLONGINT; - unsigned_type = TYPE_ULONGLONGINT; - pointer_type = TYPE_COUNT_LONGLONGINT_POINTER; - /* For backward compatibility only. */ - floatingpoint_type = TYPE_LONGDOUBLE; - } - else if (sizeof (size_t) > sizeof (int)) - { - /* size_t = unsigned long */ - signed_type = TYPE_LONGINT; - unsigned_type = TYPE_ULONGINT; - pointer_type = TYPE_COUNT_LONGINT_POINTER; - } - cp++; - } - else if (*cp == 't') - { - if (sizeof (ptrdiff_t) > sizeof (long)) - { - /* ptrdiff_t = long long */ - signed_type = TYPE_LONGLONGINT; - unsigned_type = TYPE_ULONGLONGINT; - pointer_type = TYPE_COUNT_LONGLONGINT_POINTER; - /* For backward compatibility only. */ - floatingpoint_type = TYPE_LONGDOUBLE; - } - else if (sizeof (ptrdiff_t) > sizeof (int)) - { - /* ptrdiff_t = long */ - signed_type = TYPE_LONGINT; - unsigned_type = TYPE_ULONGINT; - pointer_type = TYPE_COUNT_LONGINT_POINTER; - } - cp++; - } - else if (*cp == 'w') - { - /* wN and wfN are standardized in ISO C 23. */ - if (cp[1] == 'f') - { - if (cp[2] == '8') - { - signed_type = TYPE_INT_FAST8_T; - unsigned_type = TYPE_UINT_FAST8_T; - pointer_type = TYPE_COUNT_INT_FAST8_T_POINTER; - cp += 3; - } - else if (cp[2] == '1' && cp[3] == '6') - { - signed_type = TYPE_INT_FAST16_T; - unsigned_type = TYPE_UINT_FAST16_T; - pointer_type = TYPE_COUNT_INT_FAST16_T_POINTER; - cp += 4; - } - else if (cp[2] == '3' && cp[3] == '2') - { - signed_type = TYPE_INT_FAST32_T; - unsigned_type = TYPE_UINT_FAST32_T; - pointer_type = TYPE_COUNT_INT_FAST32_T_POINTER; - cp += 4; - } - else if (cp[2] == '6' && cp[3] == '4') - { - signed_type = TYPE_INT_FAST64_T; - unsigned_type = TYPE_UINT_FAST64_T; - pointer_type = TYPE_COUNT_INT_FAST64_T_POINTER; - cp += 4; - } - } - else - { - if (cp[1] == '8') - { - signed_type = TYPE_INT8_T; - unsigned_type = TYPE_UINT8_T; - pointer_type = TYPE_COUNT_INT8_T_POINTER; - cp += 2; - } - else if (cp[1] == '1' && cp[2] == '6') - { - signed_type = TYPE_INT16_T; - unsigned_type = TYPE_UINT16_T; - pointer_type = TYPE_COUNT_INT16_T_POINTER; - cp += 3; - } - else if (cp[1] == '3' && cp[2] == '2') - { - signed_type = TYPE_INT32_T; - unsigned_type = TYPE_UINT32_T; - pointer_type = TYPE_COUNT_INT32_T_POINTER; - cp += 3; - } - else if (cp[1] == '6' && cp[2] == '4') - { - signed_type = TYPE_INT64_T; - unsigned_type = TYPE_UINT64_T; - pointer_type = TYPE_COUNT_INT64_T_POINTER; - cp += 3; - } - } - } - else if (*cp == 'L') - { - signed_type = TYPE_LONGLONGINT; - unsigned_type = TYPE_ULONGLONGINT; - pointer_type = TYPE_COUNT_LONGLONGINT_POINTER; - floatingpoint_type = TYPE_LONGDOUBLE; - cp++; - } -#if defined __APPLE__ && defined __MACH__ - /* On Mac OS X 10.3, PRIdMAX is defined as "qd". - We cannot change it to "lld" because PRIdMAX must also - be understood by the system's printf routines. */ - else if (*cp == 'q') - { - if (64 / 8 > sizeof (long)) - { - /* int64_t = long long */ - signed_type = TYPE_LONGLONGINT; - unsigned_type = TYPE_ULONGLONGINT; - pointer_type = TYPE_COUNT_LONGLONGINT_POINTER; - /* For backward compatibility only. */ - floatingpoint_type = TYPE_LONGDOUBLE; - } - else - { - /* int64_t = long */ - signed_type = TYPE_LONGINT; - unsigned_type = TYPE_ULONGINT; - pointer_type = TYPE_COUNT_LONGINT_POINTER; - } - cp++; - } -#endif -#if defined _WIN32 && ! defined __CYGWIN__ - /* On native Windows, PRIdMAX is defined as "I64d". - We cannot change it to "lld" because PRIdMAX must also - be understood by the system's printf routines. */ - else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4') - { - if (64 / 8 > sizeof (long)) - { - /* __int64_t = long long */ - signed_type = TYPE_LONGLONGINT; - unsigned_type = TYPE_ULONGLONGINT; - pointer_type = TYPE_COUNT_LONGLONGINT_POINTER; - /* For backward compatibility only. */ - floatingpoint_type = TYPE_LONGDOUBLE; - } - else - { - /* __int64_t = long */ - signed_type = TYPE_LONGINT; - unsigned_type = TYPE_ULONGINT; - pointer_type = TYPE_COUNT_LONGINT_POINTER; - } - cp++; - } -#endif - - /* Read the conversion character. */ - c = *cp++; - switch (c) - { - case 'd': case 'i': - type = signed_type; - break; - case 'b': case 'o': case 'u': case 'x': case 'X': - #if SUPPORT_GNU_PRINTF_DIRECTIVES \ - || (__GLIBC__ + (__GLIBC_MINOR__ >= 35) > 2) - case 'B': - #endif - type = unsigned_type; - break; - case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': - case 'a': case 'A': - type = floatingpoint_type; - break; - case 'c': - if (signed_type == TYPE_LONGINT - /* For backward compatibility only. */ - || signed_type == TYPE_LONGLONGINT) -#if HAVE_WINT_T - type = TYPE_WIDE_CHAR; -#else - goto error; -#endif - else - type = TYPE_CHAR; - break; -#if HAVE_WINT_T - case 'C': - type = TYPE_WIDE_CHAR; - c = 'c'; - break; -#endif - case 's': - if (signed_type == TYPE_LONGINT - /* For backward compatibility only. */ - || signed_type == TYPE_LONGLONGINT) -#if HAVE_WCHAR_T - type = TYPE_WIDE_STRING; -#else - goto error; -#endif - else - type = TYPE_STRING; - break; -#if HAVE_WCHAR_T - case 'S': - type = TYPE_WIDE_STRING; - c = 's'; - break; -#endif - case 'p': - type = TYPE_POINTER; - break; - case 'n': - type = pointer_type; - break; -#if ENABLE_UNISTDIO - /* The unistdio extensions. */ - case 'U': - if (signed_type == TYPE_LONGLONGINT) - type = TYPE_U32_STRING; - else if (signed_type == TYPE_LONGINT) - type = TYPE_U16_STRING; - else - type = TYPE_U8_STRING; - break; -#endif - case '%': - type = TYPE_NONE; - break; - default: - /* Unknown conversion character. */ - goto error; - } - - if (type != TYPE_NONE) - { - dp->arg_index = arg_index; - if (dp->arg_index == ARG_NONE) - { - dp->arg_index = arg_posn++; - if (dp->arg_index == ARG_NONE) - /* arg_posn wrapped around. */ - goto error; - } - REGISTER_ARG (dp->arg_index, type); - } - dp->conversion = c; - dp->dir_end = cp; - } - - d->count++; - if (d->count >= d_allocated) - { - size_t memory_size; - DIRECTIVE *memory; - - d_allocated = xtimes (d_allocated, 2); - memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); - if (size_overflow_p (memory_size)) - /* Overflow, would lead to out of memory. */ - goto out_of_memory; - memory = (DIRECTIVE *) (d->dir != d->direct_alloc_dir - ? realloc (d->dir, memory_size) - : malloc (memory_size)); - if (memory == NULL) - /* Out of memory. */ - goto out_of_memory; - if (d->dir == d->direct_alloc_dir) - memcpy (memory, d->dir, d->count * sizeof (DIRECTIVE)); - d->dir = memory; - } - } -#if CHAR_T_ONLY_ASCII - else if (!c_isascii (c)) - { - /* Non-ASCII character. Not supported. */ - goto error; - } -#endif - } - d->dir[d->count].dir_start = cp; - - d->max_width_length = max_width_length; - d->max_precision_length = max_precision_length; - return 0; - -error: - if (a->arg != a->direct_alloc_arg) - free (a->arg); - if (d->dir != d->direct_alloc_dir) - free (d->dir); - errno = EINVAL; - return -1; - -out_of_memory: - if (a->arg != a->direct_alloc_arg) - free (a->arg); - if (d->dir != d->direct_alloc_dir) - free (d->dir); - errno = ENOMEM; - return -1; -} - -#undef PRINTF_PARSE -#undef DIRECTIVES -#undef DIRECTIVE -#undef CHAR_T_ONLY_ASCII -#undef CHAR_T diff --git a/lib/printf-parse.h b/lib/printf-parse.h deleted file mode 100644 index 45febac1f04..00000000000 --- a/lib/printf-parse.h +++ /dev/null @@ -1,193 +0,0 @@ -/* Parse printf format string. - Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2023 Free Software - Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifndef _PRINTF_PARSE_H -#define _PRINTF_PARSE_H - -/* This file can be parametrized with the following macros: - ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. - STATIC Set to 'static' to declare the function static. */ - -#if HAVE_FEATURES_H -# include /* for __GLIBC__, __UCLIBC__ */ -#endif - -#include "printf-args.h" - - -/* Flags */ -#define FLAG_GROUP 1 /* ' flag */ -#define FLAG_LEFT 2 /* - flag */ -#define FLAG_SHOWSIGN 4 /* + flag */ -#define FLAG_SPACE 8 /* space flag */ -#define FLAG_ALT 16 /* # flag */ -#define FLAG_ZERO 32 -#if __GLIBC__ >= 2 && !defined __UCLIBC__ -# define FLAG_LOCALIZED 64 /* I flag, uses localized digits */ -#endif - -/* arg_index value indicating that no argument is consumed. */ -#define ARG_NONE (~(size_t)0) - -/* xxx_directive: A parsed directive. - xxx_directives: A parsed format string. */ - -/* Number of directly allocated directives (no malloc() needed). */ -#define N_DIRECT_ALLOC_DIRECTIVES 7 - -/* A parsed directive. */ -typedef struct -{ - const char* dir_start; - const char* dir_end; - int flags; - const char* width_start; - const char* width_end; - size_t width_arg_index; - const char* precision_start; - const char* precision_end; - size_t precision_arg_index; - char conversion; /* d i b B o u x X f F e E g G a A c s p n U % but not C S */ - size_t arg_index; -} -char_directive; - -/* A parsed format string. */ -typedef struct -{ - size_t count; - char_directive *dir; - size_t max_width_length; - size_t max_precision_length; - char_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; -} -char_directives; - -#if ENABLE_UNISTDIO - -/* A parsed directive. */ -typedef struct -{ - const uint8_t* dir_start; - const uint8_t* dir_end; - int flags; - const uint8_t* width_start; - const uint8_t* width_end; - size_t width_arg_index; - const uint8_t* precision_start; - const uint8_t* precision_end; - size_t precision_arg_index; - uint8_t conversion; /* d i b B o u x X f F e E g G a A c s p n U % but not C S */ - size_t arg_index; -} -u8_directive; - -/* A parsed format string. */ -typedef struct -{ - size_t count; - u8_directive *dir; - size_t max_width_length; - size_t max_precision_length; - u8_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; -} -u8_directives; - -/* A parsed directive. */ -typedef struct -{ - const uint16_t* dir_start; - const uint16_t* dir_end; - int flags; - const uint16_t* width_start; - const uint16_t* width_end; - size_t width_arg_index; - const uint16_t* precision_start; - const uint16_t* precision_end; - size_t precision_arg_index; - uint16_t conversion; /* d i b B o u x X f F e E g G a A c s p n U % but not C S */ - size_t arg_index; -} -u16_directive; - -/* A parsed format string. */ -typedef struct -{ - size_t count; - u16_directive *dir; - size_t max_width_length; - size_t max_precision_length; - u16_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; -} -u16_directives; - -/* A parsed directive. */ -typedef struct -{ - const uint32_t* dir_start; - const uint32_t* dir_end; - int flags; - const uint32_t* width_start; - const uint32_t* width_end; - size_t width_arg_index; - const uint32_t* precision_start; - const uint32_t* precision_end; - size_t precision_arg_index; - uint32_t conversion; /* d i b B o u x X f F e E g G a A c s p n U % but not C S */ - size_t arg_index; -} -u32_directive; - -/* A parsed format string. */ -typedef struct -{ - size_t count; - u32_directive *dir; - size_t max_width_length; - size_t max_precision_length; - u32_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; -} -u32_directives; - -#endif - - -/* Parses the format string. Fills in the number N of directives, and fills - in directives[0], ..., directives[N-1], and sets directives[N].dir_start - to the end of the format string. Also fills in the arg_type fields of the - arguments and the needed count of arguments. */ -#if ENABLE_UNISTDIO -extern int - ulc_printf_parse (const char *format, char_directives *d, arguments *a); -extern int - u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a); -extern int - u16_printf_parse (const uint16_t *format, u16_directives *d, - arguments *a); -extern int - u32_printf_parse (const uint32_t *format, u32_directives *d, - arguments *a); -#else -# ifdef STATIC -STATIC -# else -extern -# endif -int printf_parse (const char *format, char_directives *d, arguments *a); -#endif - -#endif /* _PRINTF_PARSE_H */ diff --git a/lib/printf.c b/lib/printf.c deleted file mode 100644 index 00483271292..00000000000 --- a/lib/printf.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Formatted output to a stream. - Copyright (C) 2007, 2010-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -/* Specification. */ -#include - -#include - -/* Print formatted output to standard output. - Return string length of formatted string. On error, return a negative - value. */ -int -printf (const char *format, ...) -{ - int retval; - va_list args; - - va_start (args, format); - retval = vfprintf (stdout, format, args); - va_end (args); - - return retval; -} diff --git a/lib/signbitd.c b/lib/signbitd.c deleted file mode 100644 index 706ea394414..00000000000 --- a/lib/signbitd.c +++ /dev/null @@ -1,64 +0,0 @@ -/* signbit() macro: Determine the sign bit of a floating-point number. - Copyright (C) 2007-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include - -#include -#include "isnand-nolibm.h" -#include "float+.h" - -#ifdef gl_signbitd_OPTIMIZED_MACRO -# undef gl_signbitd -#endif - -int -gl_signbitd (double arg) -{ -#if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT - /* The use of a union to extract the bits of the representation of a - 'long double' is safe in practice, despite of the "aliasing rules" of - C99, because the GCC docs say - "Even with '-fstrict-aliasing', type-punning is allowed, provided the - memory is accessed through the union type." - and similarly for other compilers. */ -# define NWORDS \ - ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) - union { double value; unsigned int word[NWORDS]; } m; - m.value = arg; - return (m.word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; -#elif HAVE_COPYSIGN_IN_LIBC - return copysign (1.0, arg) < 0; -#else - /* This does not do the right thing for NaN, but this is irrelevant for - most use cases. */ - if (isnand (arg)) - return 0; - if (arg < 0.0) - return 1; - else if (arg == 0.0) - { - /* Distinguish 0.0 and -0.0. */ - static double plus_zero = 0.0; - double arg_mem = arg; - return (memcmp (&plus_zero, &arg_mem, SIZEOF_DBL) != 0); - } - else - return 0; -#endif -} diff --git a/lib/signbitf.c b/lib/signbitf.c deleted file mode 100644 index c25bb64a0d2..00000000000 --- a/lib/signbitf.c +++ /dev/null @@ -1,64 +0,0 @@ -/* signbit() macro: Determine the sign bit of a floating-point number. - Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include - -#include -#include "isnanf-nolibm.h" -#include "float+.h" - -#ifdef gl_signbitf_OPTIMIZED_MACRO -# undef gl_signbitf -#endif - -int -gl_signbitf (float arg) -{ -#if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT - /* The use of a union to extract the bits of the representation of a - 'long double' is safe in practice, despite of the "aliasing rules" of - C99, because the GCC docs say - "Even with '-fstrict-aliasing', type-punning is allowed, provided the - memory is accessed through the union type." - and similarly for other compilers. */ -# define NWORDS \ - ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) - union { float value; unsigned int word[NWORDS]; } m; - m.value = arg; - return (m.word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; -#elif HAVE_COPYSIGNF_IN_LIBC - return copysignf (1.0f, arg) < 0; -#else - /* This does not do the right thing for NaN, but this is irrelevant for - most use cases. */ - if (isnanf (arg)) - return 0; - if (arg < 0.0f) - return 1; - else if (arg == 0.0f) - { - /* Distinguish 0.0f and -0.0f. */ - static float plus_zero = 0.0f; - float arg_mem = arg; - return (memcmp (&plus_zero, &arg_mem, SIZEOF_FLT) != 0); - } - else - return 0; -#endif -} diff --git a/lib/signbitl.c b/lib/signbitl.c deleted file mode 100644 index 9d459caf879..00000000000 --- a/lib/signbitl.c +++ /dev/null @@ -1,64 +0,0 @@ -/* signbit() macro: Determine the sign bit of a floating-point number. - Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include - -#include -#include "isnanl-nolibm.h" -#include "float+.h" - -#ifdef gl_signbitl_OPTIMIZED_MACRO -# undef gl_signbitl -#endif - -int -gl_signbitl (long double arg) -{ -#if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT - /* The use of a union to extract the bits of the representation of a - 'long double' is safe in practice, despite of the "aliasing rules" of - C99, because the GCC docs say - "Even with '-fstrict-aliasing', type-punning is allowed, provided the - memory is accessed through the union type." - and similarly for other compilers. */ -# define NWORDS \ - ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) - union { long double value; unsigned int word[NWORDS]; } m; - m.value = arg; - return (m.word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; -#elif HAVE_COPYSIGNL_IN_LIBC - return copysignl (1.0L, arg) < 0; -#else - /* This does not do the right thing for NaN, but this is irrelevant for - most use cases. */ - if (isnanl (arg)) - return 0; - if (arg < 0.0L) - return 1; - else if (arg == 0.0L) - { - /* Distinguish 0.0L and -0.0L. */ - static long double plus_zero = 0.0L; - long double arg_mem = arg; - return (memcmp (&plus_zero, &arg_mem, SIZEOF_LDBL) != 0); - } - else - return 0; -#endif -} diff --git a/lib/size_max.h b/lib/size_max.h deleted file mode 100644 index 2cfd31a59b8..00000000000 --- a/lib/size_max.h +++ /dev/null @@ -1,35 +0,0 @@ -/* size_max.h -- declare SIZE_MAX through system headers - Copyright (C) 2005-2006, 2009-2023 Free Software Foundation, Inc. - Written by Simon Josefsson. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifndef GNULIB_SIZE_MAX_H -#define GNULIB_SIZE_MAX_H - -/* This file uses HAVE_STDINT_H. */ -#if !_GL_CONFIG_H_INCLUDED - #error "Please include config.h first." -#endif - -/* Get SIZE_MAX declaration on systems like Solaris 7/8/9. */ -# include -/* Get SIZE_MAX declaration on systems like glibc 2. */ -# if HAVE_STDINT_H -# include -# endif -/* On systems where these include files don't define it, SIZE_MAX is defined - in config.h. */ - -#endif /* GNULIB_SIZE_MAX_H */ diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c deleted file mode 100644 index 9ad31b2a084..00000000000 --- a/lib/vasnprintf.c +++ /dev/null @@ -1,6963 +0,0 @@ -/* vsprintf with automatic memory allocation. - Copyright (C) 1999, 2002-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* This file can be parametrized with the following macros: - VASNPRINTF The name of the function being defined. - FCHAR_T The element type of the format string. - DCHAR_T The element type of the destination (result) string. - FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters - in the format string are ASCII. MUST be set if - FCHAR_T and DCHAR_T are not the same type. - DIRECTIVE Structure denoting a format directive. - Depends on FCHAR_T. - DIRECTIVES Structure denoting the set of format directives of a - format string. Depends on FCHAR_T. - PRINTF_PARSE Function that parses a format string. - Depends on FCHAR_T. - DCHAR_CPY memcpy like function for DCHAR_T[] arrays. - DCHAR_SET memset like function for DCHAR_T[] arrays. - DCHAR_MBSNLEN mbsnlen like function for DCHAR_T[] arrays. - SNPRINTF The system's snprintf (or similar) function. - This may be either snprintf or swprintf. - TCHAR_T The element type of the argument and result string - of the said SNPRINTF function. This may be either - char or wchar_t. The code exploits that - sizeof (TCHAR_T) | sizeof (DCHAR_T) and - alignof (TCHAR_T) <= alignof (DCHAR_T). - DCHAR_IS_TCHAR Set to 1 if DCHAR_T and TCHAR_T are the same type. - DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[]. - DCHAR_IS_UINT8_T Set to 1 if DCHAR_T is uint8_t. - DCHAR_IS_UINT16_T Set to 1 if DCHAR_T is uint16_t. - DCHAR_IS_UINT32_T Set to 1 if DCHAR_T is uint32_t. - ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. - ENABLE_WCHAR_FALLBACK Set to 1 to avoid EILSEQ during conversion of wide - characters (wchar_t) and wide character strings - (wchar_t[]) to multibyte sequences. The fallback is the - hexadecimal escape syntax (\unnnn or \Unnnnnnnn) or, - if wchar_t is not Unicode encoded, \wnnnn or \Wnnnnnnnn. - */ - -/* Tell glibc's to provide a prototype for snprintf(). - This must come before because may include - , and once has been included, it's too late. */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -#endif - -#ifndef VASNPRINTF -# include -#endif - -/* As of GCC 11.2.1, gcc -Wanalyzer-too-complex reports that main's - use of CHECK macros expands to code that is too complicated for gcc - -fanalyzer. Suppress the resulting bogus warnings. */ -#if 10 <= __GNUC__ -# pragma GCC diagnostic ignored "-Wanalyzer-null-argument" -#endif - -#include - -/* Specification. */ -#ifndef VASNPRINTF -# if WIDE_CHAR_VERSION -# include "vasnwprintf.h" -# else -# include "vasnprintf.h" -# endif -#endif - -#include /* localeconv() */ -#include /* snprintf(), sprintf() */ -#include /* abort(), malloc(), realloc(), free() */ -#include /* memcpy(), strlen() */ -#include /* mbstate_t, mbrtowc(), mbrlen(), wcrtomb() */ -#include /* errno */ -#include /* CHAR_BIT, INT_WIDTH, LONG_WIDTH */ -#include /* DBL_MAX_EXP, LDBL_MAX_EXP */ -#if HAVE_NL_LANGINFO -# include -#endif -#ifndef VASNPRINTF -# if WIDE_CHAR_VERSION -# include "wprintf-parse.h" -# else -# include "printf-parse.h" -# endif -#endif - -/* Checked size_t computations. */ -#include "xsize.h" - -#include "attribute.h" - -#if NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE || (NEED_WPRINTF_DIRECTIVE_LA && WIDE_CHAR_VERSION) -# include -# include "float+.h" -#endif - -#if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE -# include -# include "isnand-nolibm.h" -#endif - -#if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || (NEED_WPRINTF_DIRECTIVE_LA && WIDE_CHAR_VERSION) -# include -# include "isnanl-nolibm.h" -# include "fpucw.h" -#endif - -#if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE -# include -# include "isnand-nolibm.h" -# include "printf-frexp.h" -#endif - -#if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || (NEED_WPRINTF_DIRECTIVE_LA && WIDE_CHAR_VERSION) -# include -# include "isnanl-nolibm.h" -# include "printf-frexpl.h" -# include "fpucw.h" -#endif - -/* Default parameters. */ -#ifndef VASNPRINTF -# if WIDE_CHAR_VERSION -# define VASNPRINTF vasnwprintf -# define FCHAR_T wchar_t -# define DCHAR_T wchar_t -# define DIRECTIVE wchar_t_directive -# define DIRECTIVES wchar_t_directives -# define PRINTF_PARSE wprintf_parse -# define DCHAR_CPY wmemcpy -# define DCHAR_SET wmemset -# else -# define VASNPRINTF vasnprintf -# define FCHAR_T char -# define DCHAR_T char -# define TCHAR_T char -# define DCHAR_IS_TCHAR 1 -# define DIRECTIVE char_directive -# define DIRECTIVES char_directives -# define PRINTF_PARSE printf_parse -# define DCHAR_CPY memcpy -# define DCHAR_SET memset -# endif -#endif -#if WIDE_CHAR_VERSION - /* DCHAR_T is wchar_t. */ -# if HAVE_DECL__SNWPRINTF || (HAVE_SWPRINTF && HAVE_WORKING_SWPRINTF) -# define TCHAR_T wchar_t -# define DCHAR_IS_TCHAR 1 -# define USE_SNPRINTF 1 -# if HAVE_DECL__SNWPRINTF - /* On Windows, the function swprintf() has a different signature than - on Unix; we use the function _snwprintf() or - on mingw - snwprintf() - instead. The mingw function snwprintf() has fewer bugs than the - MSVCRT function _snwprintf(), so prefer that. */ -# if defined __MINGW32__ -# define SNPRINTF snwprintf -# else -# define SNPRINTF _snwprintf -# define USE_MSVC__SNPRINTF 1 -# endif -# else - /* Unix. */ -# define SNPRINTF swprintf -# endif -# else - /* Old platforms such as NetBSD 3.0, OpenBSD 3.8, HP-UX 11.00, IRIX 6.5. */ -# define TCHAR_T char -# endif -#endif -#if !WIDE_CHAR_VERSION || !DCHAR_IS_TCHAR - /* TCHAR_T is char. */ - /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'. - But don't use it on BeOS, since BeOS snprintf produces no output if the - size argument is >= 0x3000000. - Also don't use it on Linux libc5, since there snprintf with size = 1 - writes any output without bounds, like sprintf. */ -# if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1) -# define USE_SNPRINTF 1 -# else -# define USE_SNPRINTF 0 -# endif -# if HAVE_DECL__SNPRINTF - /* Windows. The mingw function snprintf() has fewer bugs than the MSVCRT - function _snprintf(), so prefer that. */ -# if defined __MINGW32__ -# define SNPRINTF snprintf - /* Here we need to call the native snprintf, not rpl_snprintf. */ -# undef snprintf -# else - /* MSVC versions < 14 did not have snprintf, only _snprintf. */ -# define SNPRINTF _snprintf -# define USE_MSVC__SNPRINTF 1 -# endif -# else - /* Unix. */ -# define SNPRINTF snprintf - /* Here we need to call the native snprintf, not rpl_snprintf. */ -# undef snprintf -# endif -#endif -/* Here we need to call the native sprintf, not rpl_sprintf. */ -#undef sprintf - -/* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized" - warnings in this file. Use -Dlint to suppress them. */ -#if defined GCC_LINT || defined lint -# define IF_LINT(Code) Code -#else -# define IF_LINT(Code) /* empty */ -#endif - -/* Avoid some warnings from "gcc -Wshadow". - This file doesn't use the exp() and remainder() functions. */ -#undef exp -#define exp expo -#undef remainder -#define remainder rem - -#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && !WIDE_CHAR_VERSION -# if (HAVE_STRNLEN && !defined _AIX) -# define local_strnlen strnlen -# else -# ifndef local_strnlen_defined -# define local_strnlen_defined 1 -static size_t -local_strnlen (const char *string, size_t maxlen) -{ - const char *end = memchr (string, '\0', maxlen); - return end ? (size_t) (end - string) : maxlen; -} -# endif -# endif -#endif - -#if (((!USE_SNPRINTF || WIDE_CHAR_VERSION || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_WPRINTF_DIRECTIVE_LC) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_DIRECTIVE_LS) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T -# if HAVE_WCSLEN -# define local_wcslen wcslen -# else - /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid - a dependency towards this library, here is a local substitute. - Define this substitute only once, even if this file is included - twice in the same compilation unit. */ -# ifndef local_wcslen_defined -# define local_wcslen_defined 1 -static size_t -local_wcslen (const wchar_t *s) -{ - const wchar_t *ptr; - - for (ptr = s; *ptr != (wchar_t) 0; ptr++) - ; - return ptr - s; -} -# endif -# endif -#endif - -#if (!USE_SNPRINTF || (WIDE_CHAR_VERSION && DCHAR_IS_TCHAR) || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && HAVE_WCHAR_T && WIDE_CHAR_VERSION -# if HAVE_WCSNLEN && HAVE_DECL_WCSNLEN -# define local_wcsnlen wcsnlen -# else -# ifndef local_wcsnlen_defined -# define local_wcsnlen_defined 1 -static size_t -local_wcsnlen (const wchar_t *s, size_t maxlen) -{ - const wchar_t *ptr; - - for (ptr = s; maxlen > 0 && *ptr != (wchar_t) 0; ptr++, maxlen--) - ; - return ptr - s; -} -# endif -# endif -#endif - -#if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_DIRECTIVE_LS || ENABLE_WCHAR_FALLBACK) && HAVE_WCHAR_T) || ((NEED_PRINTF_DIRECTIVE_LC || ENABLE_WCHAR_FALLBACK) && HAVE_WINT_T)) && !WIDE_CHAR_VERSION -# if ENABLE_WCHAR_FALLBACK -static size_t -wctomb_fallback (char *s, wchar_t wc) -{ - static char hex[16] = "0123456789ABCDEF"; - - s[0] = '\\'; - if (sizeof (wchar_t) > 2 && wc > 0xffff) - { -# if __STDC_ISO_10646__ || (__GLIBC__ >= 2) || (defined _WIN32 || defined __CYGWIN__) - s[1] = 'U'; -# else - s[1] = 'W'; -# endif - s[2] = hex[(wc & 0xf0000000U) >> 28]; - s[3] = hex[(wc & 0xf000000U) >> 24]; - s[4] = hex[(wc & 0xf00000U) >> 20]; - s[5] = hex[(wc & 0xf0000U) >> 16]; - s[6] = hex[(wc & 0xf000U) >> 12]; - s[7] = hex[(wc & 0xf00U) >> 8]; - s[8] = hex[(wc & 0xf0U) >> 4]; - s[9] = hex[wc & 0xfU]; - return 10; - } - else - { -# if __STDC_ISO_10646__ || (__GLIBC__ >= 2) || (defined _WIN32 || defined __CYGWIN__) - s[1] = 'u'; -# else - s[1] = 'w'; -# endif - s[2] = hex[(wc & 0xf000U) >> 12]; - s[3] = hex[(wc & 0xf00U) >> 8]; - s[4] = hex[(wc & 0xf0U) >> 4]; - s[5] = hex[wc & 0xfU]; - return 6; - } -} -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t -static size_t -local_wcrtomb (char *s, wchar_t wc, mbstate_t *ps) -{ - size_t count = wcrtomb (s, wc, ps); - if (count == (size_t)(-1)) - count = wctomb_fallback (s, wc); - return count; -} -# else -static int -local_wctomb (char *s, wchar_t wc) -{ - int count = wctomb (s, wc); - if (count < 0) - count = wctomb_fallback (s, wc); - return count; -} -# define local_wcrtomb(S, WC, PS) local_wctomb ((S), (WC)) -# endif -# else -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t -# define local_wcrtomb(S, WC, PS) wcrtomb ((S), (WC), (PS)) -# else -# define local_wcrtomb(S, WC, PS) wctomb ((S), (WC)) -# endif -# endif -#endif - -#if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE || (NEED_WPRINTF_DIRECTIVE_LA && WIDE_CHAR_VERSION) -/* Determine the decimal-point character according to the current locale. */ -# ifndef decimal_point_char_defined -# define decimal_point_char_defined 1 -static char -decimal_point_char (void) -{ - const char *point; - /* Determine it in a multithread-safe way. We know nl_langinfo is - multithread-safe on glibc systems and Mac OS X systems, but is not required - to be multithread-safe by POSIX. sprintf(), however, is multithread-safe. - localeconv() is rarely multithread-safe. */ -# if HAVE_NL_LANGINFO && (__GLIBC__ || defined __UCLIBC__ || (defined __APPLE__ && defined __MACH__)) - point = nl_langinfo (RADIXCHAR); -# elif 1 - char pointbuf[5]; - sprintf (pointbuf, "%#.0f", 1.0); - point = &pointbuf[1]; -# else - point = localeconv () -> decimal_point; -# endif - /* The decimal point is always a single byte: either '.' or ','. */ - return (point[0] != '\0' ? point[0] : '.'); -} -# endif -#endif - -#if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE - -/* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ -static int -is_infinite_or_zero (double x) -{ - return isnand (x) || x + x == x; -} - -#endif - -#if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE - -/* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ -static int -is_infinite_or_zerol (long double x) -{ - return isnanl (x) || x + x == x; -} - -#endif - -#if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE - -/* Converting 'long double' to decimal without rare rounding bugs requires - real bignums. We use the naming conventions of GNU gmp, but vastly simpler - (and slower) algorithms. */ - -typedef unsigned int mp_limb_t; -# define GMP_LIMB_BITS 32 -static_assert (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS); - -typedef unsigned long long mp_twolimb_t; -# define GMP_TWOLIMB_BITS 64 -static_assert (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS); - -/* Representation of a bignum >= 0. */ -typedef struct -{ - size_t nlimbs; - mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc(). */ -} mpn_t; - -/* Compute the product of two bignums >= 0. - Return the allocated memory in case of success, NULL in case of memory - allocation failure. */ -static void * -multiply (mpn_t src1, mpn_t src2, mpn_t *dest) -{ - const mp_limb_t *p1; - const mp_limb_t *p2; - size_t len1; - size_t len2; - - if (src1.nlimbs <= src2.nlimbs) - { - len1 = src1.nlimbs; - p1 = src1.limbs; - len2 = src2.nlimbs; - p2 = src2.limbs; - } - else - { - len1 = src2.nlimbs; - p1 = src2.limbs; - len2 = src1.nlimbs; - p2 = src1.limbs; - } - /* Now 0 <= len1 <= len2. */ - if (len1 == 0) - { - /* src1 or src2 is zero. */ - dest->nlimbs = 0; - dest->limbs = (mp_limb_t *) malloc (1); - } - else - { - /* Here 1 <= len1 <= len2. */ - size_t dlen; - mp_limb_t *dp; - size_t k, i, j; - - dlen = len1 + len2; - dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t)); - if (dp == NULL) - return NULL; - for (k = len2; k > 0; ) - dp[--k] = 0; - for (i = 0; i < len1; i++) - { - mp_limb_t digit1 = p1[i]; - mp_twolimb_t carry = 0; - for (j = 0; j < len2; j++) - { - mp_limb_t digit2 = p2[j]; - carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; - carry += dp[i + j]; - dp[i + j] = (mp_limb_t) carry; - carry = carry >> GMP_LIMB_BITS; - } - dp[i + len2] = (mp_limb_t) carry; - } - /* Normalise. */ - while (dlen > 0 && dp[dlen - 1] == 0) - dlen--; - dest->nlimbs = dlen; - dest->limbs = dp; - } - return dest->limbs; -} - -/* Compute the quotient of a bignum a >= 0 and a bignum b > 0. - a is written as a = q * b + r with 0 <= r < b. q is the quotient, r - the remainder. - Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd, - q is incremented. - Return the allocated memory in case of success, NULL in case of memory - allocation failure. */ -static void * -divide (mpn_t a, mpn_t b, mpn_t *q) -{ - /* Algorithm: - First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]] - with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS). - If m=n=1, perform a single-precision division: - r:=0, j:=m, - while j>0 do - {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j = - = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r=n>1, perform a multiple-precision division: - We have a/b < beta^(m-n+1). - s:=intDsize-1-(highest bit in b[n-1]), 0<=s=beta/2. - For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).} - Compute q* : - q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]). - In case of overflow (q* >= beta) set q* := beta-1. - Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2] - and c3 := b[n-2] * q*. - {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow - occurred. Furthermore 0 <= c3 < beta^2. - If there was overflow and - r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2, - the next test can be skipped.} - While c3 > c2, {Here 0 <= c2 < c3 < beta^2} - Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2]. - If q* > 0: - Put r := r - b * q* * beta^j. In detail: - [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]]. - hence: u:=0, for i:=0 to n-1 do - u := u + q* * b[i], - r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry), - u:=u div beta (+ 1, if carry in subtraction) - r[n+j]:=r[n+j]-u. - {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1 - < q* + 1 <= beta, - the carry u does not overflow.} - If a negative carry occurs, put q* := q* - 1 - and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]]. - Set q[j] := q*. - Normalise [q[m-n],..,q[0]]; this yields the quotient q. - Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the - rest r. - The room for q[j] can be allocated at the memory location of r[n+j]. - Finally, round-to-even: - Shift r left by 1 bit. - If r > b or if r = b and q[0] is odd, q := q+1. - */ - const mp_limb_t *a_ptr = a.limbs; - size_t a_len = a.nlimbs; - const mp_limb_t *b_ptr = b.limbs; - size_t b_len = b.nlimbs; - mp_limb_t *roomptr; - mp_limb_t *tmp_roomptr = NULL; - mp_limb_t *q_ptr; - size_t q_len; - mp_limb_t *r_ptr; - size_t r_len; - - /* Allocate room for a_len+2 digits. - (Need a_len+1 digits for the real division and 1 more digit for the - final rounding of q.) */ - roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t)); - if (roomptr == NULL) - return NULL; - - /* Normalise a. */ - while (a_len > 0 && a_ptr[a_len - 1] == 0) - a_len--; - - /* Normalise b. */ - for (;;) - { - if (b_len == 0) - /* Division by zero. */ - abort (); - if (b_ptr[b_len - 1] == 0) - b_len--; - else - break; - } - - /* Here m = a_len >= 0 and n = b_len > 0. */ - - if (a_len < b_len) - { - /* m beta^(m-2) <= a/b < beta^m */ - r_ptr = roomptr; - q_ptr = roomptr + 1; - { - mp_limb_t den = b_ptr[0]; - mp_limb_t remainder = 0; - const mp_limb_t *sourceptr = a_ptr + a_len; - mp_limb_t *destptr = q_ptr + a_len; - size_t count; - for (count = a_len; count > 0; count--) - { - mp_twolimb_t num = - ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr; - *--destptr = num / den; - remainder = num % den; - } - /* Normalise and store r. */ - if (remainder > 0) - { - r_ptr[0] = remainder; - r_len = 1; - } - else - r_len = 0; - /* Normalise q. */ - q_len = a_len; - if (q_ptr[q_len - 1] == 0) - q_len--; - } - } - else - { - /* n>1: multiple precision division. - beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n ==> - beta^(m-n-1) <= a/b < beta^(m-n+1). */ - /* Determine s. */ - size_t s; - { - mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */ - /* Determine s = GMP_LIMB_BITS - integer_length (msd). - Code copied from gnulib's integer_length.c. */ -# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) \ - || (__clang_major__ >= 4) - s = __builtin_clz (msd); -# else -# if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT - if (GMP_LIMB_BITS <= DBL_MANT_BIT) - { - /* Use 'double' operations. - Assumes an IEEE 754 'double' implementation. */ -# define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) -# define DBL_EXP_BIAS (DBL_EXP_MASK / 2 - 1) -# define NWORDS \ - ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) - union { double value; unsigned int word[NWORDS]; } m; - - /* Use a single integer to floating-point conversion. */ - m.value = msd; - - s = GMP_LIMB_BITS - - (((m.word[DBL_EXPBIT0_WORD] >> DBL_EXPBIT0_BIT) & DBL_EXP_MASK) - - DBL_EXP_BIAS); - } - else -# undef NWORDS -# endif - { - s = 31; - if (msd >= 0x10000) - { - msd = msd >> 16; - s -= 16; - } - if (msd >= 0x100) - { - msd = msd >> 8; - s -= 8; - } - if (msd >= 0x10) - { - msd = msd >> 4; - s -= 4; - } - if (msd >= 0x4) - { - msd = msd >> 2; - s -= 2; - } - if (msd >= 0x2) - { - msd = msd >> 1; - s -= 1; - } - } -# endif - } - /* 0 <= s < GMP_LIMB_BITS. - Copy b, shifting it left by s bits. */ - if (s > 0) - { - tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t)); - if (tmp_roomptr == NULL) - { - free (roomptr); - return NULL; - } - { - const mp_limb_t *sourceptr = b_ptr; - mp_limb_t *destptr = tmp_roomptr; - mp_twolimb_t accu = 0; - size_t count; - for (count = b_len; count > 0; count--) - { - accu += (mp_twolimb_t) *sourceptr++ << s; - *destptr++ = (mp_limb_t) accu; - accu = accu >> GMP_LIMB_BITS; - } - /* accu must be zero, since that was how s was determined. */ - if (accu != 0) - abort (); - } - b_ptr = tmp_roomptr; - } - /* Copy a, shifting it left by s bits, yields r. - Memory layout: - At the beginning: r = roomptr[0..a_len], - at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len] */ - r_ptr = roomptr; - if (s == 0) - { - memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); - r_ptr[a_len] = 0; - } - else - { - const mp_limb_t *sourceptr = a_ptr; - mp_limb_t *destptr = r_ptr; - mp_twolimb_t accu = 0; - size_t count; - for (count = a_len; count > 0; count--) - { - accu += (mp_twolimb_t) *sourceptr++ << s; - *destptr++ = (mp_limb_t) accu; - accu = accu >> GMP_LIMB_BITS; - } - *destptr++ = (mp_limb_t) accu; - } - q_ptr = roomptr + b_len; - q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */ - { - size_t j = a_len - b_len; /* m-n */ - mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */ - mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */ - mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */ - ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd; - /* Division loop, traversed m-n+1 times. - j counts down, b is unchanged, beta/2 <= b[n-1] < beta. */ - for (;;) - { - mp_limb_t q_star; - mp_limb_t c1; - if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */ - { - /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow. */ - mp_twolimb_t num = - ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS) - | r_ptr[j + b_len - 1]; - q_star = num / b_msd; - c1 = num % b_msd; - } - else - { - /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1]. */ - q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */ - /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta - <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta - <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) - {<= beta !}. - If yes, jump directly to the subtraction loop. - (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta - <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */ - if (r_ptr[j + b_len] > b_msd - || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd) - /* r[j+n] >= b[n-1]+1 or - r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a - carry. */ - goto subtract; - } - /* q_star = q*, - c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, 0, decrease it by - b[n-1]*beta+b[n-2]. Because of b[n-1]*beta+b[n-2] >= beta^2/2 - this can happen only twice. */ - if (c3 > c2) - { - q_star = q_star - 1; /* q* := q* - 1 */ - if (c3 - c2 > b_msdd) - q_star = q_star - 1; /* q* := q* - 1 */ - } - } - if (q_star > 0) - subtract: - { - /* Subtract r := r - b * q* * beta^j. */ - mp_limb_t cr; - { - const mp_limb_t *sourceptr = b_ptr; - mp_limb_t *destptr = r_ptr + j; - mp_twolimb_t carry = 0; - size_t count; - for (count = b_len; count > 0; count--) - { - /* Here 0 <= carry <= q*. */ - carry = - carry - + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++ - + (mp_limb_t) ~(*destptr); - /* Here 0 <= carry <= beta*q* + beta-1. */ - *destptr++ = ~(mp_limb_t) carry; - carry = carry >> GMP_LIMB_BITS; /* <= q* */ - } - cr = (mp_limb_t) carry; - } - /* Subtract cr from r_ptr[j + b_len], then forget about - r_ptr[j + b_len]. */ - if (cr > r_ptr[j + b_len]) - { - /* Subtraction gave a carry. */ - q_star = q_star - 1; /* q* := q* - 1 */ - /* Add b back. */ - { - const mp_limb_t *sourceptr = b_ptr; - mp_limb_t *destptr = r_ptr + j; - mp_limb_t carry = 0; - size_t count; - for (count = b_len; count > 0; count--) - { - mp_limb_t source1 = *sourceptr++; - mp_limb_t source2 = *destptr; - *destptr++ = source1 + source2 + carry; - carry = - (carry - ? source1 >= (mp_limb_t) ~source2 - : source1 > (mp_limb_t) ~source2); - } - } - /* Forget about the carry and about r[j+n]. */ - } - } - /* q* is determined. Store it as q[j]. */ - q_ptr[j] = q_star; - if (j == 0) - break; - j--; - } - } - r_len = b_len; - /* Normalise q. */ - if (q_ptr[q_len - 1] == 0) - q_len--; -# if 0 /* Not needed here, since we need r only to compare it with b/2, and - b is shifted left by s bits. */ - /* Shift r right by s bits. */ - if (s > 0) - { - mp_limb_t ptr = r_ptr + r_len; - mp_twolimb_t accu = 0; - size_t count; - for (count = r_len; count > 0; count--) - { - accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS; - accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s); - *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS); - } - } -# endif - /* Normalise r. */ - while (r_len > 0 && r_ptr[r_len - 1] == 0) - r_len--; - } - /* Compare r << 1 with b. */ - if (r_len > b_len) - goto increment_q; - { - size_t i; - for (i = b_len;;) - { - mp_limb_t r_i = - (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0) - | (i < r_len ? r_ptr[i] << 1 : 0); - mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0); - if (r_i > b_i) - goto increment_q; - if (r_i < b_i) - goto keep_q; - if (i == 0) - break; - i--; - } - } - if (q_len > 0 && ((q_ptr[0] & 1) != 0)) - /* q is odd. */ - increment_q: - { - size_t i; - for (i = 0; i < q_len; i++) - if (++(q_ptr[i]) != 0) - goto keep_q; - q_ptr[q_len++] = 1; - } - keep_q: - free (tmp_roomptr); - q->limbs = q_ptr; - q->nlimbs = q_len; - return roomptr; -} - -/* Avoid pointless GCC warning "argument 1 value '18446744073709551615' exceeds - maximum object size 9223372036854775807", triggered by the use of xsum as - argument of malloc. */ -# if __GNUC__ >= 7 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Walloc-size-larger-than=" -# endif - -/* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal - representation. - Destroys the contents of a. - Return the allocated memory - containing the decimal digits in low-to-high - order, terminated with a NUL character - in case of success, NULL in case - of memory allocation failure. */ -static char * -convert_to_decimal (mpn_t a, size_t extra_zeroes) -{ - mp_limb_t *a_ptr = a.limbs; - size_t a_len = a.nlimbs; - /* 0.03345 is slightly larger than log(2)/(9*log(10)). */ - size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1); - /* We need extra_zeroes bytes for zeroes, followed by c_len bytes for the - digits of a, followed by 1 byte for the terminating NUL. */ - char *c_ptr = (char *) malloc (xsum (xsum (extra_zeroes, c_len), 1)); - if (c_ptr != NULL) - { - char *d_ptr = c_ptr; - for (; extra_zeroes > 0; extra_zeroes--) - *d_ptr++ = '0'; - while (a_len > 0) - { - /* Divide a by 10^9, in-place. */ - mp_limb_t remainder = 0; - mp_limb_t *ptr = a_ptr + a_len; - size_t count; - for (count = a_len; count > 0; count--) - { - mp_twolimb_t num = - ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr; - *ptr = num / 1000000000; - remainder = num % 1000000000; - } - /* Store the remainder as 9 decimal digits. */ - for (count = 9; count > 0; count--) - { - *d_ptr++ = '0' + (remainder % 10); - remainder = remainder / 10; - } - /* Normalize a. */ - if (a_ptr[a_len - 1] == 0) - a_len--; - } - /* Remove leading zeroes. */ - while (d_ptr > c_ptr && d_ptr[-1] == '0') - d_ptr--; - /* But keep at least one zero. */ - if (d_ptr == c_ptr) - *d_ptr++ = '0'; - /* Terminate the string. */ - *d_ptr = '\0'; - } - return c_ptr; -} - -# if __GNUC__ >= 7 -# pragma GCC diagnostic pop -# endif - -# if NEED_PRINTF_LONG_DOUBLE - -/* Assuming x is finite and >= 0: - write x as x = 2^e * m, where m is a bignum. - Return the allocated memory in case of success, NULL in case of memory - allocation failure. */ -static void * -decode_long_double (long double x, int *ep, mpn_t *mp) -{ - mpn_t m; - int exp; - long double y; - size_t i; - - /* Allocate memory for result. */ - m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; - m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); - if (m.limbs == NULL) - return NULL; - /* Split into exponential part and mantissa. */ - y = frexpl (x, &exp); - if (!(y >= 0.0L && y < 1.0L)) - abort (); - /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * 2^LDBL_MANT_BIT), and the - latter is an integer. */ - /* Convert the mantissa (y * 2^LDBL_MANT_BIT) to a sequence of limbs. - I'm not sure whether it's safe to cast a 'long double' value between - 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only - 'long double' values between 0 and 2^16 (to 'unsigned int' or 'int', - doesn't matter). */ -# if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0 -# if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 - { - mp_limb_t hi, lo; - y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2)); - hi = (int) y; - y -= hi; - if (!(y >= 0.0L && y < 1.0L)) - abort (); - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - lo = (int) y; - y -= lo; - if (!(y >= 0.0L && y < 1.0L)) - abort (); - m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; - } -# else - { - mp_limb_t d; - y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS); - d = (int) y; - y -= d; - if (!(y >= 0.0L && y < 1.0L)) - abort (); - m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d; - } -# endif -# endif - for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) - { - mp_limb_t hi, lo; - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - hi = (int) y; - y -= hi; - if (!(y >= 0.0L && y < 1.0L)) - abort (); - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - lo = (int) y; - y -= lo; - if (!(y >= 0.0L && y < 1.0L)) - abort (); - m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; - } -# if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess - precision. */ - if (!(y == 0.0L)) - abort (); -# endif - /* Normalise. */ - while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) - m.nlimbs--; - *mp = m; - *ep = exp - LDBL_MANT_BIT; - return m.limbs; -} - -# endif - -# if NEED_PRINTF_DOUBLE - -/* Assuming x is finite and >= 0: - write x as x = 2^e * m, where m is a bignum. - Return the allocated memory in case of success, NULL in case of memory - allocation failure. */ -static void * -decode_double (double x, int *ep, mpn_t *mp) -{ - mpn_t m; - int exp; - double y; - size_t i; - - /* Allocate memory for result. */ - m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; - m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); - if (m.limbs == NULL) - return NULL; - /* Split into exponential part and mantissa. */ - y = frexp (x, &exp); - if (!(y >= 0.0 && y < 1.0)) - abort (); - /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * 2^DBL_MANT_BIT), and the - latter is an integer. */ - /* Convert the mantissa (y * 2^DBL_MANT_BIT) to a sequence of limbs. - I'm not sure whether it's safe to cast a 'double' value between - 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only - 'double' values between 0 and 2^16 (to 'unsigned int' or 'int', - doesn't matter). */ -# if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0 -# if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 - { - mp_limb_t hi, lo; - y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2)); - hi = (int) y; - y -= hi; - if (!(y >= 0.0 && y < 1.0)) - abort (); - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - lo = (int) y; - y -= lo; - if (!(y >= 0.0 && y < 1.0)) - abort (); - m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; - } -# else - { - mp_limb_t d; - y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS); - d = (int) y; - y -= d; - if (!(y >= 0.0 && y < 1.0)) - abort (); - m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d; - } -# endif -# endif - for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) - { - mp_limb_t hi, lo; - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - hi = (int) y; - y -= hi; - if (!(y >= 0.0 && y < 1.0)) - abort (); - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - lo = (int) y; - y -= lo; - if (!(y >= 0.0 && y < 1.0)) - abort (); - m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; - } - if (!(y == 0.0)) - abort (); - /* Normalise. */ - while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) - m.nlimbs--; - *mp = m; - *ep = exp - DBL_MANT_BIT; - return m.limbs; -} - -# endif - -/* Assuming x = 2^e * m is finite and >= 0, and n is an integer: - Returns the decimal representation of round (x * 10^n). - Return the allocated memory - containing the decimal digits in low-to-high - order, terminated with a NUL character - in case of success, NULL in case - of memory allocation failure. */ -static char * -scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n) -{ - int s; - size_t extra_zeroes; - unsigned int abs_n; - unsigned int abs_s; - mp_limb_t *pow5_ptr; - size_t pow5_len; - unsigned int s_limbs; - unsigned int s_bits; - mpn_t pow5; - mpn_t z; - void *z_memory; - char *digits; - - /* x = 2^e * m, hence - y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m) - = round (2^s * 5^n * m). */ - s = e + n; - extra_zeroes = 0; - /* Factor out a common power of 10 if possible. */ - if (s > 0 && n > 0) - { - extra_zeroes = (s < n ? s : n); - s -= extra_zeroes; - n -= extra_zeroes; - } - /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes. - Before converting to decimal, we need to compute - z = round (2^s * 5^n * m). */ - /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same - sign. 2.322 is slightly larger than log(5)/log(2). */ - abs_n = (n >= 0 ? n : -n); - abs_s = (s >= 0 ? s : -s); - pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1 - + abs_s / GMP_LIMB_BITS + 1) - * sizeof (mp_limb_t)); - if (pow5_ptr == NULL) - { - free (memory); - return NULL; - } - /* Initialize with 1. */ - pow5_ptr[0] = 1; - pow5_len = 1; - /* Multiply with 5^|n|. */ - if (abs_n > 0) - { - static mp_limb_t const small_pow5[13 + 1] = - { - 1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, - 48828125, 244140625, 1220703125 - }; - unsigned int n13; - for (n13 = 0; n13 <= abs_n; n13 += 13) - { - mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13]; - size_t j; - mp_twolimb_t carry = 0; - for (j = 0; j < pow5_len; j++) - { - mp_limb_t digit2 = pow5_ptr[j]; - carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; - pow5_ptr[j] = (mp_limb_t) carry; - carry = carry >> GMP_LIMB_BITS; - } - if (carry > 0) - pow5_ptr[pow5_len++] = (mp_limb_t) carry; - } - } - s_limbs = abs_s / GMP_LIMB_BITS; - s_bits = abs_s % GMP_LIMB_BITS; - if (n >= 0 ? s >= 0 : s <= 0) - { - /* Multiply with 2^|s|. */ - if (s_bits > 0) - { - mp_limb_t *ptr = pow5_ptr; - mp_twolimb_t accu = 0; - size_t count; - for (count = pow5_len; count > 0; count--) - { - accu += (mp_twolimb_t) *ptr << s_bits; - *ptr++ = (mp_limb_t) accu; - accu = accu >> GMP_LIMB_BITS; - } - if (accu > 0) - { - *ptr = (mp_limb_t) accu; - pow5_len++; - } - } - if (s_limbs > 0) - { - size_t count; - for (count = pow5_len; count > 0;) - { - count--; - pow5_ptr[s_limbs + count] = pow5_ptr[count]; - } - for (count = s_limbs; count > 0;) - { - count--; - pow5_ptr[count] = 0; - } - pow5_len += s_limbs; - } - pow5.limbs = pow5_ptr; - pow5.nlimbs = pow5_len; - if (n >= 0) - { - /* Multiply m with pow5. No division needed. */ - z_memory = multiply (m, pow5, &z); - } - else - { - /* Divide m by pow5 and round. */ - z_memory = divide (m, pow5, &z); - } - } - else - { - pow5.limbs = pow5_ptr; - pow5.nlimbs = pow5_len; - if (n >= 0) - { - /* n >= 0, s < 0. - Multiply m with pow5, then divide by 2^|s|. */ - mpn_t numerator; - mpn_t denominator; - void *tmp_memory; - tmp_memory = multiply (m, pow5, &numerator); - if (tmp_memory == NULL) - { - free (pow5_ptr); - free (memory); - return NULL; - } - /* Construct 2^|s|. */ - { - mp_limb_t *ptr = pow5_ptr + pow5_len; - size_t i; - for (i = 0; i < s_limbs; i++) - ptr[i] = 0; - ptr[s_limbs] = (mp_limb_t) 1 << s_bits; - denominator.limbs = ptr; - denominator.nlimbs = s_limbs + 1; - } - z_memory = divide (numerator, denominator, &z); - free (tmp_memory); - } - else - { - /* n < 0, s > 0. - Multiply m with 2^s, then divide by pow5. */ - mpn_t numerator; - mp_limb_t *num_ptr; - num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1) - * sizeof (mp_limb_t)); - if (num_ptr == NULL) - { - free (pow5_ptr); - free (memory); - return NULL; - } - { - mp_limb_t *destptr = num_ptr; - { - size_t i; - for (i = 0; i < s_limbs; i++) - *destptr++ = 0; - } - if (s_bits > 0) - { - const mp_limb_t *sourceptr = m.limbs; - mp_twolimb_t accu = 0; - size_t count; - for (count = m.nlimbs; count > 0; count--) - { - accu += (mp_twolimb_t) *sourceptr++ << s_bits; - *destptr++ = (mp_limb_t) accu; - accu = accu >> GMP_LIMB_BITS; - } - if (accu > 0) - *destptr++ = (mp_limb_t) accu; - } - else - { - const mp_limb_t *sourceptr = m.limbs; - size_t count; - for (count = m.nlimbs; count > 0; count--) - *destptr++ = *sourceptr++; - } - numerator.limbs = num_ptr; - numerator.nlimbs = destptr - num_ptr; - } - z_memory = divide (numerator, pow5, &z); - free (num_ptr); - } - } - free (pow5_ptr); - free (memory); - - /* Here y = round (x * 10^n) = z * 10^extra_zeroes. */ - - if (z_memory == NULL) - return NULL; - digits = convert_to_decimal (z, extra_zeroes); - free (z_memory); - return digits; -} - -# if NEED_PRINTF_LONG_DOUBLE - -/* Assuming x is finite and >= 0, and n is an integer: - Returns the decimal representation of round (x * 10^n). - Return the allocated memory - containing the decimal digits in low-to-high - order, terminated with a NUL character - in case of success, NULL in case - of memory allocation failure. */ -static char * -scale10_round_decimal_long_double (long double x, int n) -{ - int e; - mpn_t m; - void *memory = decode_long_double (x, &e, &m); - if (memory != NULL) - return scale10_round_decimal_decoded (e, m, memory, n); - else - return NULL; -} - -# endif - -# if NEED_PRINTF_DOUBLE - -/* Assuming x is finite and >= 0, and n is an integer: - Returns the decimal representation of round (x * 10^n). - Return the allocated memory - containing the decimal digits in low-to-high - order, terminated with a NUL character - in case of success, NULL in case - of memory allocation failure. */ -static char * -scale10_round_decimal_double (double x, int n) -{ - int e; - mpn_t m; - void *memory = decode_double (x, &e, &m); - if (memory != NULL) - return scale10_round_decimal_decoded (e, m, memory, n); - else - return NULL; -} - -# endif - -# if NEED_PRINTF_LONG_DOUBLE - -/* Assuming x is finite and > 0: - Return an approximation for n with 10^n <= x < 10^(n+1). - The approximation is usually the right n, but may be off by 1 sometimes. */ -static int -floorlog10l (long double x) -{ - int exp; - long double y; - double z; - double l; - - /* Split into exponential part and mantissa. */ - y = frexpl (x, &exp); - if (!(y >= 0.0L && y < 1.0L)) - abort (); - if (y == 0.0L) - return INT_MIN; - if (y < 0.5L) - { - while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) - { - y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); - exp -= GMP_LIMB_BITS; - } - if (y < (1.0L / (1 << 16))) - { - y *= 1.0L * (1 << 16); - exp -= 16; - } - if (y < (1.0L / (1 << 8))) - { - y *= 1.0L * (1 << 8); - exp -= 8; - } - if (y < (1.0L / (1 << 4))) - { - y *= 1.0L * (1 << 4); - exp -= 4; - } - if (y < (1.0L / (1 << 2))) - { - y *= 1.0L * (1 << 2); - exp -= 2; - } - if (y < (1.0L / (1 << 1))) - { - y *= 1.0L * (1 << 1); - exp -= 1; - } - } - if (!(y >= 0.5L && y < 1.0L)) - abort (); - /* Compute an approximation for l = log2(x) = exp + log2(y). */ - l = exp; - z = y; - if (z < 0.70710678118654752444) - { - z *= 1.4142135623730950488; - l -= 0.5; - } - if (z < 0.8408964152537145431) - { - z *= 1.1892071150027210667; - l -= 0.25; - } - if (z < 0.91700404320467123175) - { - z *= 1.0905077326652576592; - l -= 0.125; - } - if (z < 0.9576032806985736469) - { - z *= 1.0442737824274138403; - l -= 0.0625; - } - /* Now 0.95 <= z <= 1.01. */ - z = 1 - z; - /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) - Four terms are enough to get an approximation with error < 10^-7. */ - l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); - /* Finally multiply with log(2)/log(10), yields an approximation for - log10(x). */ - l *= 0.30102999566398119523; - /* Round down to the next integer. */ - return (int) l + (l < 0 ? -1 : 0); -} - -# endif - -# if NEED_PRINTF_DOUBLE - -/* Assuming x is finite and > 0: - Return an approximation for n with 10^n <= x < 10^(n+1). - The approximation is usually the right n, but may be off by 1 sometimes. */ -static int -floorlog10 (double x) -{ - int exp; - double y; - double z; - double l; - - /* Split into exponential part and mantissa. */ - y = frexp (x, &exp); - if (!(y >= 0.0 && y < 1.0)) - abort (); - if (y == 0.0) - return INT_MIN; - if (y < 0.5) - { - while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) - { - y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); - exp -= GMP_LIMB_BITS; - } - if (y < (1.0 / (1 << 16))) - { - y *= 1.0 * (1 << 16); - exp -= 16; - } - if (y < (1.0 / (1 << 8))) - { - y *= 1.0 * (1 << 8); - exp -= 8; - } - if (y < (1.0 / (1 << 4))) - { - y *= 1.0 * (1 << 4); - exp -= 4; - } - if (y < (1.0 / (1 << 2))) - { - y *= 1.0 * (1 << 2); - exp -= 2; - } - if (y < (1.0 / (1 << 1))) - { - y *= 1.0 * (1 << 1); - exp -= 1; - } - } - if (!(y >= 0.5 && y < 1.0)) - abort (); - /* Compute an approximation for l = log2(x) = exp + log2(y). */ - l = exp; - z = y; - if (z < 0.70710678118654752444) - { - z *= 1.4142135623730950488; - l -= 0.5; - } - if (z < 0.8408964152537145431) - { - z *= 1.1892071150027210667; - l -= 0.25; - } - if (z < 0.91700404320467123175) - { - z *= 1.0905077326652576592; - l -= 0.125; - } - if (z < 0.9576032806985736469) - { - z *= 1.0442737824274138403; - l -= 0.0625; - } - /* Now 0.95 <= z <= 1.01. */ - z = 1 - z; - /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) - Four terms are enough to get an approximation with error < 10^-7. */ - l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); - /* Finally multiply with log(2)/log(10), yields an approximation for - log10(x). */ - l *= 0.30102999566398119523; - /* Round down to the next integer. */ - return (int) l + (l < 0 ? -1 : 0); -} - -# endif - -/* Tests whether a string of digits consists of exactly PRECISION zeroes and - a single '1' digit. */ -static int -is_borderline (const char *digits, size_t precision) -{ - for (; precision > 0; precision--, digits++) - if (*digits != '0') - return 0; - if (*digits != '1') - return 0; - digits++; - return *digits == '\0'; -} - -#endif - -#if !USE_SNPRINTF || (WIDE_CHAR_VERSION && DCHAR_IS_TCHAR) || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF - -/* Use a different function name, to make it possible that the 'wchar_t' - parametrization and the 'char' parametrization get compiled in the same - translation unit. */ -# if WIDE_CHAR_VERSION -# define MAX_ROOM_NEEDED wmax_room_needed -# else -# define MAX_ROOM_NEEDED max_room_needed -# endif - -/* Returns the number of TCHAR_T units needed as temporary space for the result - of sprintf or SNPRINTF of a single conversion directive. */ -static size_t -MAX_ROOM_NEEDED (const arguments *ap, size_t arg_index, FCHAR_T conversion, - arg_type type, int flags, size_t width, int has_precision, - size_t precision, int pad_ourselves) -{ - size_t tmp_length; - - switch (conversion) - { - case 'd': case 'i': case 'u': - switch (type) - { - default: - tmp_length = - (unsigned int) (sizeof (unsigned int) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_LONGINT: - tmp_length = - (unsigned int) (sizeof (long int) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_ULONGINT: - tmp_length = - (unsigned int) (sizeof (unsigned long int) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_LONGLONGINT: - tmp_length = - (unsigned int) (sizeof (long long int) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_ULONGLONGINT: - tmp_length = - (unsigned int) (sizeof (unsigned long long int) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_INT8_T: - tmp_length = - (unsigned int) (sizeof (int8_t) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT8_T: - tmp_length = - (unsigned int) (sizeof (uint8_t) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_INT16_T: - tmp_length = - (unsigned int) (sizeof (int16_t) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT16_T: - tmp_length = - (unsigned int) (sizeof (uint16_t) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_INT32_T: - tmp_length = - (unsigned int) (sizeof (int32_t) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT32_T: - tmp_length = - (unsigned int) (sizeof (uint32_t) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_INT64_T: - tmp_length = - (unsigned int) (sizeof (int64_t) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT64_T: - tmp_length = - (unsigned int) (sizeof (uint64_t) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_INT_FAST8_T: - tmp_length = - (unsigned int) (sizeof (int_fast8_t) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST8_T: - tmp_length = - (unsigned int) (sizeof (uint_fast8_t) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_INT_FAST16_T: - tmp_length = - (unsigned int) (sizeof (int_fast16_t) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST16_T: - tmp_length = - (unsigned int) (sizeof (uint_fast16_t) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_INT_FAST32_T: - tmp_length = - (unsigned int) (sizeof (int_fast32_t) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST32_T: - tmp_length = - (unsigned int) (sizeof (uint_fast32_t) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_INT_FAST64_T: - tmp_length = - (unsigned int) (sizeof (int_fast64_t) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST64_T: - tmp_length = - (unsigned int) (sizeof (uint_fast64_t) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - break; - } - if (tmp_length < precision) - tmp_length = precision; - /* Multiply by 2, as an estimate for FLAG_GROUP. */ - tmp_length = xsum (tmp_length, tmp_length); - /* Add 1, to account for a leading sign. */ - tmp_length = xsum (tmp_length, 1); - break; - - case 'b': - #if SUPPORT_GNU_PRINTF_DIRECTIVES \ - || (__GLIBC__ + (__GLIBC_MINOR__ >= 35) > 2) - case 'B': - #endif - switch (type) - { - default: - tmp_length = - (unsigned int) (sizeof (unsigned int) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_ULONGINT: - tmp_length = - (unsigned int) (sizeof (unsigned long int) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_ULONGLONGINT: - tmp_length = - (unsigned int) (sizeof (unsigned long long int) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT8_T: - tmp_length = - (unsigned int) (sizeof (uint8_t) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT16_T: - tmp_length = - (unsigned int) (sizeof (uint16_t) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT32_T: - tmp_length = - (unsigned int) (sizeof (uint32_t) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT64_T: - tmp_length = - (unsigned int) (sizeof (uint64_t) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST8_T: - tmp_length = - (unsigned int) (sizeof (uint_fast8_t) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST16_T: - tmp_length = - (unsigned int) (sizeof (uint_fast16_t) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST32_T: - tmp_length = - (unsigned int) (sizeof (uint_fast32_t) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST64_T: - tmp_length = - (unsigned int) (sizeof (uint_fast64_t) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - } - if (tmp_length < precision) - tmp_length = precision; - /* Add 2, to account for a prefix from the alternate form. */ - tmp_length = xsum (tmp_length, 2); - break; - - case 'o': - switch (type) - { - default: - tmp_length = - (unsigned int) (sizeof (unsigned int) * CHAR_BIT - * 0.333334 /* binary -> octal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_ULONGINT: - tmp_length = - (unsigned int) (sizeof (unsigned long int) * CHAR_BIT - * 0.333334 /* binary -> octal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_ULONGLONGINT: - tmp_length = - (unsigned int) (sizeof (unsigned long long int) * CHAR_BIT - * 0.333334 /* binary -> octal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT8_T: - tmp_length = - (unsigned int) (sizeof (uint8_t) * CHAR_BIT - * 0.333334 /* binary -> octal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT16_T: - tmp_length = - (unsigned int) (sizeof (uint16_t) * CHAR_BIT - * 0.333334 /* binary -> octal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT32_T: - tmp_length = - (unsigned int) (sizeof (uint32_t) * CHAR_BIT - * 0.333334 /* binary -> octal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT64_T: - tmp_length = - (unsigned int) (sizeof (uint64_t) * CHAR_BIT - * 0.333334 /* binary -> octal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST8_T: - tmp_length = - (unsigned int) (sizeof (uint_fast8_t) * CHAR_BIT - * 0.333334 /* binary -> octal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST16_T: - tmp_length = - (unsigned int) (sizeof (uint_fast16_t) * CHAR_BIT - * 0.333334 /* binary -> octal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST32_T: - tmp_length = - (unsigned int) (sizeof (uint_fast32_t) * CHAR_BIT - * 0.333334 /* binary -> octal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST64_T: - tmp_length = - (unsigned int) (sizeof (uint_fast64_t) * CHAR_BIT - * 0.333334 /* binary -> octal */ - ) - + 1; /* turn floor into ceil */ - break; - } - if (tmp_length < precision) - tmp_length = precision; - /* Add 1, to account for a leading sign. */ - tmp_length = xsum (tmp_length, 1); - break; - - case 'x': case 'X': - switch (type) - { - default: - tmp_length = - (unsigned int) (sizeof (unsigned int) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_ULONGINT: - tmp_length = - (unsigned int) (sizeof (unsigned long int) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_ULONGLONGINT: - tmp_length = - (unsigned int) (sizeof (unsigned long long int) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT8_T: - tmp_length = - (unsigned int) (sizeof (uint8_t) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT16_T: - tmp_length = - (unsigned int) (sizeof (uint16_t) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT32_T: - tmp_length = - (unsigned int) (sizeof (uint32_t) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT64_T: - tmp_length = - (unsigned int) (sizeof (uint64_t) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST8_T: - tmp_length = - (unsigned int) (sizeof (uint_fast8_t) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST16_T: - tmp_length = - (unsigned int) (sizeof (uint_fast16_t) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST32_T: - tmp_length = - (unsigned int) (sizeof (uint_fast32_t) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST64_T: - tmp_length = - (unsigned int) (sizeof (uint_fast64_t) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - break; - } - if (tmp_length < precision) - tmp_length = precision; - /* Add 2, to account for a prefix from the alternate form. */ - tmp_length = xsum (tmp_length, 2); - break; - - case 'f': case 'F': - if (type == TYPE_LONGDOUBLE) - tmp_length = - (unsigned int) (LDBL_MAX_EXP - * 0.30103 /* binary -> decimal */ - * 2 /* estimate for FLAG_GROUP */ - ) - + 1 /* turn floor into ceil */ - + 10; /* sign, decimal point etc. */ - else - tmp_length = - (unsigned int) (DBL_MAX_EXP - * 0.30103 /* binary -> decimal */ - * 2 /* estimate for FLAG_GROUP */ - ) - + 1 /* turn floor into ceil */ - + 10; /* sign, decimal point etc. */ - tmp_length = xsum (tmp_length, precision); - break; - - case 'e': case 'E': case 'g': case 'G': - tmp_length = - 12; /* sign, decimal point, exponent etc. */ - tmp_length = xsum (tmp_length, precision); - break; - - case 'a': case 'A': - if (type == TYPE_LONGDOUBLE) - tmp_length = - (unsigned int) (LDBL_DIG - * 0.831 /* decimal -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - else - tmp_length = - (unsigned int) (DBL_DIG - * 0.831 /* decimal -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - if (tmp_length < precision) - tmp_length = precision; - /* Account for sign, decimal point etc. */ - tmp_length = xsum (tmp_length, 12); - break; - - case 'c': -# if HAVE_WINT_T && !WIDE_CHAR_VERSION - if (type == TYPE_WIDE_CHAR) - { - tmp_length = MB_CUR_MAX; -# if ENABLE_WCHAR_FALLBACK - if (tmp_length < (sizeof (wchar_t) > 2 ? 10 : 6)) - tmp_length = (sizeof (wchar_t) > 2 ? 10 : 6); -# endif - } - else -# endif - tmp_length = 1; - break; - - case 's': -# if HAVE_WCHAR_T - if (type == TYPE_WIDE_STRING) - { -# if WIDE_CHAR_VERSION - /* ISO C says about %ls in fwprintf: - "If the precision is not specified or is greater than the size - of the array, the array shall contain a null wide character." - So if there is a precision, we must not use wcslen. */ - const wchar_t *arg = ap->arg[arg_index].a.a_wide_string; - - if (has_precision) - tmp_length = local_wcsnlen (arg, precision); - else - tmp_length = local_wcslen (arg); -# else - /* ISO C says about %ls in fprintf: - "If a precision is specified, no more than that many bytes are - written (including shift sequences, if any), and the array - shall contain a null wide character if, to equal the multibyte - character sequence length given by the precision, the function - would need to access a wide character one past the end of the - array." - So if there is a precision, we must not use wcslen. */ - /* This case has already been handled separately in VASNPRINTF. */ - abort (); -# endif - } - else -# endif - { -# if WIDE_CHAR_VERSION - /* ISO C says about %s in fwprintf: - "If the precision is not specified or is greater than the size - of the converted array, the converted array shall contain a - null wide character." - So if there is a precision, we must not use strlen. */ - /* This case has already been handled separately in VASNPRINTF. */ - abort (); -# else - /* ISO C says about %s in fprintf: - "If the precision is not specified or greater than the size of - the array, the array shall contain a null character." - So if there is a precision, we must not use strlen. */ - const char *arg = ap->arg[arg_index].a.a_string; - - if (has_precision) - tmp_length = local_strnlen (arg, precision); - else - tmp_length = strlen (arg); -# endif - } - break; - - case 'p': - tmp_length = - (unsigned int) (sizeof (void *) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1 /* turn floor into ceil */ - + 2; /* account for leading 0x */ - break; - - default: - abort (); - } - - if (!pad_ourselves) - { -# if ENABLE_UNISTDIO - /* Padding considers the number of characters, therefore the number of - elements after padding may be - > max (tmp_length, width) - but is certainly - <= tmp_length + width. */ - tmp_length = xsum (tmp_length, width); -# else - /* Padding considers the number of elements, says POSIX. */ - if (tmp_length < width) - tmp_length = width; -# endif - } - - tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ - - return tmp_length; -} - -#endif - -DCHAR_T * -VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, - const FCHAR_T *format, va_list args) -{ - DIRECTIVES d; - arguments a; - - if (PRINTF_PARSE (format, &d, &a) < 0) - /* errno is already set. */ - return NULL; - - /* Frees the memory allocated by this function. Preserves errno. */ -#define CLEANUP() \ - if (d.dir != d.direct_alloc_dir) \ - free (d.dir); \ - if (a.arg != a.direct_alloc_arg) \ - free (a.arg); - - if (PRINTF_FETCHARGS (args, &a) < 0) - goto fail_1_with_EINVAL; - - { - size_t buf_neededlength; - TCHAR_T *buf; - TCHAR_T *buf_malloced; - const FCHAR_T *cp; - size_t i; - DIRECTIVE *dp; - /* Output string accumulator. */ - DCHAR_T *result; - size_t allocated; - size_t length; - - /* Allocate a small buffer that will hold a directive passed to - sprintf or snprintf. */ - buf_neededlength = - xsum4 (7, d.max_width_length, d.max_precision_length, 6); -#if HAVE_ALLOCA - if (buf_neededlength < 4000 / sizeof (TCHAR_T)) - { - buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T)); - buf_malloced = NULL; - } - else -#endif - { - size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T)); - if (size_overflow_p (buf_memsize)) - goto out_of_memory_1; - buf = (TCHAR_T *) malloc (buf_memsize); - if (buf == NULL) - goto out_of_memory_1; - buf_malloced = buf; - } - - result = resultbuf; - allocated = (resultbuf != NULL ? *lengthp : 0); - length = 0; - /* Invariants: - result is either == resultbuf or malloc-allocated. - If result == NULL, resultbuf is == NULL as well. - If length > 0, then result != NULL. */ - - /* Ensures that allocated >= needed. Aborts through a jump to - out_of_memory if needed is SIZE_MAX or otherwise too big. */ -#define ENSURE_ALLOCATION_ELSE(needed, oom_statement) \ - if ((needed) > allocated) \ - { \ - size_t memory_size; \ - DCHAR_T *memory; \ - \ - allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ - if ((needed) > allocated) \ - allocated = (needed); \ - memory_size = xtimes (allocated, sizeof (DCHAR_T)); \ - if (size_overflow_p (memory_size)) \ - oom_statement \ - if (result == resultbuf) \ - memory = (DCHAR_T *) malloc (memory_size); \ - else \ - memory = (DCHAR_T *) realloc (result, memory_size); \ - if (memory == NULL) \ - oom_statement \ - if (result == resultbuf && length > 0) \ - DCHAR_CPY (memory, result, length); \ - result = memory; \ - } -#define ENSURE_ALLOCATION(needed) \ - ENSURE_ALLOCATION_ELSE((needed), goto out_of_memory; ) - - for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++) - { - if (cp != dp->dir_start) - { - size_t n = dp->dir_start - cp; - size_t augmented_length = xsum (length, n); - - ENSURE_ALLOCATION (augmented_length); - /* This copies a piece of FCHAR_T[] into a DCHAR_T[]. Here we - need that the format string contains only ASCII characters - if FCHAR_T and DCHAR_T are not the same type. */ - if (sizeof (FCHAR_T) == sizeof (DCHAR_T)) - { - DCHAR_CPY (result + length, (const DCHAR_T *) cp, n); - length = augmented_length; - } - else - { - do - result[length++] = *cp++; - while (--n > 0); - } - } - if (i == d.count) - break; - - /* Execute a single directive. */ - if (dp->conversion == '%') - { - size_t augmented_length; - - if (!(dp->arg_index == ARG_NONE)) - abort (); - augmented_length = xsum (length, 1); - ENSURE_ALLOCATION (augmented_length); - result[length] = '%'; - length = augmented_length; - } - else - { - if (!(dp->arg_index != ARG_NONE)) - abort (); - - if (dp->conversion == 'n') - { - switch (a.arg[dp->arg_index].type) - { - case TYPE_COUNT_SCHAR_POINTER: - *a.arg[dp->arg_index].a.a_count_schar_pointer = length; - break; - case TYPE_COUNT_SHORT_POINTER: - *a.arg[dp->arg_index].a.a_count_short_pointer = length; - break; - case TYPE_COUNT_INT_POINTER: - *a.arg[dp->arg_index].a.a_count_int_pointer = length; - break; - case TYPE_COUNT_LONGINT_POINTER: - *a.arg[dp->arg_index].a.a_count_longint_pointer = length; - break; - case TYPE_COUNT_LONGLONGINT_POINTER: - *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; - break; - case TYPE_COUNT_INT8_T_POINTER: - *a.arg[dp->arg_index].a.a_count_int8_t_pointer = length; - break; - case TYPE_COUNT_INT16_T_POINTER: - *a.arg[dp->arg_index].a.a_count_int16_t_pointer = length; - break; - case TYPE_COUNT_INT32_T_POINTER: - *a.arg[dp->arg_index].a.a_count_int32_t_pointer = length; - break; - case TYPE_COUNT_INT64_T_POINTER: - *a.arg[dp->arg_index].a.a_count_int64_t_pointer = length; - break; - case TYPE_COUNT_INT_FAST8_T_POINTER: - *a.arg[dp->arg_index].a.a_count_int_fast8_t_pointer = length; - break; - case TYPE_COUNT_INT_FAST16_T_POINTER: - *a.arg[dp->arg_index].a.a_count_int_fast16_t_pointer = length; - break; - case TYPE_COUNT_INT_FAST32_T_POINTER: - *a.arg[dp->arg_index].a.a_count_int_fast32_t_pointer = length; - break; - case TYPE_COUNT_INT_FAST64_T_POINTER: - *a.arg[dp->arg_index].a.a_count_int_fast64_t_pointer = length; - break; - default: - abort (); - } - } -#if ENABLE_UNISTDIO - /* The unistdio extensions. */ - else if (dp->conversion == 'U') - { - arg_type type = a.arg[dp->arg_index].type; - int flags = dp->flags; - int has_width; - size_t width; - int has_precision; - size_t precision; - - has_width = 0; - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } - has_width = 1; - } - - has_precision = 0; - precision = 0; - if (dp->precision_start != dp->precision_end) - { - if (dp->precision_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->precision_arg_index].a.a_int; - /* "A negative precision is taken as if the precision - were omitted." */ - if (arg >= 0) - { - precision = arg; - has_precision = 1; - } - } - else - { - const FCHAR_T *digitp = dp->precision_start + 1; - - precision = 0; - while (digitp != dp->precision_end) - precision = xsum (xtimes (precision, 10), *digitp++ - '0'); - has_precision = 1; - } - } - - switch (type) - { - case TYPE_U8_STRING: - { - const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string; - const uint8_t *arg_end; - size_t characters; - - if (has_precision) - { - /* Use only PRECISION characters, from the left. */ - arg_end = arg; - characters = 0; - for (; precision > 0; precision--) - { - int count = u8_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - goto fail_with_EILSEQ; - arg_end += count; - characters++; - } - } - else if (has_width) - { - /* Use the entire string, and count the number of - characters. */ - arg_end = arg; - characters = 0; - for (;;) - { - int count = u8_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - goto fail_with_EILSEQ; - arg_end += count; - characters++; - } - } - else - { - /* Use the entire string. */ - arg_end = arg + u8_strlen (arg); - /* The number of characters doesn't matter. */ - characters = 0; - } - - if (characters < width && !(flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - -# if DCHAR_IS_UINT8_T - { - size_t n = arg_end - arg; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_CPY (result + length, arg, n); - length += n; - } -# else - { /* Convert. */ - DCHAR_T *converted = result + length; - size_t converted_len = allocated - length; -# if DCHAR_IS_TCHAR - /* Convert from UTF-8 to locale encoding. */ - converted = - u8_conv_to_encoding (locale_charset (), - iconveh_question_mark, - arg, arg_end - arg, NULL, - converted, &converted_len); -# else - /* Convert from UTF-8 to UTF-16/UTF-32. */ - converted = - U8_TO_DCHAR (arg, arg_end - arg, - converted, &converted_len); -# endif - if (converted == NULL) - goto fail_with_errno; - if (converted != result + length) - { - ENSURE_ALLOCATION_ELSE (xsum (length, converted_len), - { free (converted); goto out_of_memory; }); - DCHAR_CPY (result + length, converted, converted_len); - free (converted); - } - length += converted_len; - } -# endif - - if (characters < width && (flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - } - break; - - case TYPE_U16_STRING: - { - const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string; - const uint16_t *arg_end; - size_t characters; - - if (has_precision) - { - /* Use only PRECISION characters, from the left. */ - arg_end = arg; - characters = 0; - for (; precision > 0; precision--) - { - int count = u16_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - goto fail_with_EILSEQ; - arg_end += count; - characters++; - } - } - else if (has_width) - { - /* Use the entire string, and count the number of - characters. */ - arg_end = arg; - characters = 0; - for (;;) - { - int count = u16_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - goto fail_with_EILSEQ; - arg_end += count; - characters++; - } - } - else - { - /* Use the entire string. */ - arg_end = arg + u16_strlen (arg); - /* The number of characters doesn't matter. */ - characters = 0; - } - - if (characters < width && !(flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - -# if DCHAR_IS_UINT16_T - { - size_t n = arg_end - arg; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_CPY (result + length, arg, n); - length += n; - } -# else - { /* Convert. */ - DCHAR_T *converted = result + length; - size_t converted_len = allocated - length; -# if DCHAR_IS_TCHAR - /* Convert from UTF-16 to locale encoding. */ - converted = - u16_conv_to_encoding (locale_charset (), - iconveh_question_mark, - arg, arg_end - arg, NULL, - converted, &converted_len); -# else - /* Convert from UTF-16 to UTF-8/UTF-32. */ - converted = - U16_TO_DCHAR (arg, arg_end - arg, - converted, &converted_len); -# endif - if (converted == NULL) - goto fail_with_errno; - if (converted != result + length) - { - ENSURE_ALLOCATION_ELSE (xsum (length, converted_len), - { free (converted); goto out_of_memory; }); - DCHAR_CPY (result + length, converted, converted_len); - free (converted); - } - length += converted_len; - } -# endif - - if (characters < width && (flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - } - break; - - case TYPE_U32_STRING: - { - const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string; - const uint32_t *arg_end; - size_t characters; - - if (has_precision) - { - /* Use only PRECISION characters, from the left. */ - arg_end = arg; - characters = 0; - for (; precision > 0; precision--) - { - int count = u32_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - goto fail_with_EILSEQ; - arg_end += count; - characters++; - } - } - else if (has_width) - { - /* Use the entire string, and count the number of - characters. */ - arg_end = arg; - characters = 0; - for (;;) - { - int count = u32_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - goto fail_with_EILSEQ; - arg_end += count; - characters++; - } - } - else - { - /* Use the entire string. */ - arg_end = arg + u32_strlen (arg); - /* The number of characters doesn't matter. */ - characters = 0; - } - - if (characters < width && !(flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - -# if DCHAR_IS_UINT32_T - { - size_t n = arg_end - arg; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_CPY (result + length, arg, n); - length += n; - } -# else - { /* Convert. */ - DCHAR_T *converted = result + length; - size_t converted_len = allocated - length; -# if DCHAR_IS_TCHAR - /* Convert from UTF-32 to locale encoding. */ - converted = - u32_conv_to_encoding (locale_charset (), - iconveh_question_mark, - arg, arg_end - arg, NULL, - converted, &converted_len); -# else - /* Convert from UTF-32 to UTF-8/UTF-16. */ - converted = - U32_TO_DCHAR (arg, arg_end - arg, - converted, &converted_len); -# endif - if (converted == NULL) - goto fail_with_errno; - if (converted != result + length) - { - ENSURE_ALLOCATION_ELSE (xsum (length, converted_len), - { free (converted); goto out_of_memory; }); - DCHAR_CPY (result + length, converted, converted_len); - free (converted); - } - length += converted_len; - } -# endif - - if (characters < width && (flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - } - break; - - default: - abort (); - } - } -#endif -#if WIDE_CHAR_VERSION && (!DCHAR_IS_TCHAR || NEED_WPRINTF_DIRECTIVE_LC) - else if ((dp->conversion == 's' - && a.arg[dp->arg_index].type == TYPE_WIDE_STRING) - || (dp->conversion == 'c' - && a.arg[dp->arg_index].type == TYPE_WIDE_CHAR)) - { - /* %ls or %lc in vasnwprintf. See the specification of - fwprintf. */ - /* It would be silly to use snprintf ("%ls", ...) and then - convert back the result from a char[] to a wchar_t[]. - Instead, just copy the argument wchar_t[] to the result. */ - int flags = dp->flags; - size_t width; - - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } - } - - { - const wchar_t *ls_arg; - wchar_t lc_arg[1]; - size_t characters; - - if (dp->conversion == 's') - { - int has_precision; - size_t precision; - - has_precision = 0; - precision = 6; - if (dp->precision_start != dp->precision_end) - { - if (dp->precision_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->precision_arg_index].a.a_int; - /* "A negative precision is taken as if the precision - were omitted." */ - if (arg >= 0) - { - precision = arg; - has_precision = 1; - } - } - else - { - const FCHAR_T *digitp = dp->precision_start + 1; - - precision = 0; - while (digitp != dp->precision_end) - precision = xsum (xtimes (precision, 10), *digitp++ - '0'); - has_precision = 1; - } - } - - ls_arg = a.arg[dp->arg_index].a.a_wide_string; - - if (has_precision) - { - /* Use only at most PRECISION wide characters, from - the left. */ - const wchar_t *ls_arg_end; - - ls_arg_end = ls_arg; - characters = 0; - for (; precision > 0; precision--) - { - if (*ls_arg_end == 0) - /* Found the terminating null wide character. */ - break; - ls_arg_end++; - characters++; - } - } - else - { - /* Use the entire string, and count the number of wide - characters. */ - characters = local_wcslen (ls_arg); - } - } - else /* dp->conversion == 'c' */ - { - lc_arg[0] = (wchar_t) a.arg[dp->arg_index].a.a_wide_char; - ls_arg = lc_arg; - characters = 1; - } - - { - size_t total = (characters < width ? width : characters); - ENSURE_ALLOCATION (xsum (length, total)); - - if (characters < width && !(flags & FLAG_LEFT)) - { - size_t n = width - characters; - DCHAR_SET (result + length, ' ', n); - length += n; - } - - if (characters > 0) - { - DCHAR_CPY (result + length, ls_arg, characters); - length += characters; - } - - if (characters < width && (flags & FLAG_LEFT)) - { - size_t n = width - characters; - DCHAR_SET (result + length, ' ', n); - length += n; - } - } - } - } -#endif -#if (!USE_SNPRINTF || WIDE_CHAR_VERSION || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_DIRECTIVE_LS || ENABLE_WCHAR_FALLBACK) && HAVE_WCHAR_T - else if (dp->conversion == 's' -# if WIDE_CHAR_VERSION - && a.arg[dp->arg_index].type != TYPE_WIDE_STRING -# else - && a.arg[dp->arg_index].type == TYPE_WIDE_STRING -# endif - ) - { - /* The normal handling of the 's' directive below requires - allocating a temporary buffer. The determination of its - length (tmp_length), in the case when a precision is - specified, below requires a conversion between a char[] - string and a wchar_t[] wide string. It could be done, but - we have no guarantee that the implementation of sprintf will - use the exactly same algorithm. Without this guarantee, it - is possible to have buffer overrun bugs. In order to avoid - such bugs, we implement the entire processing of the 's' - directive ourselves. */ - int flags = dp->flags; - int has_width; - size_t width; - int has_precision; - size_t precision; - - has_width = 0; - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } - has_width = 1; - } - - has_precision = 0; - precision = 6; - if (dp->precision_start != dp->precision_end) - { - if (dp->precision_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->precision_arg_index].a.a_int; - /* "A negative precision is taken as if the precision - were omitted." */ - if (arg >= 0) - { - precision = arg; - has_precision = 1; - } - } - else - { - const FCHAR_T *digitp = dp->precision_start + 1; - - precision = 0; - while (digitp != dp->precision_end) - precision = xsum (xtimes (precision, 10), *digitp++ - '0'); - has_precision = 1; - } - } - -# if WIDE_CHAR_VERSION - /* %s in vasnwprintf. See the specification of fwprintf. */ - { - const char *arg = a.arg[dp->arg_index].a.a_string; - const char *arg_end; - size_t characters; - - if (has_precision) - { - /* Use only as many bytes as needed to produce PRECISION - wide characters, from the left. */ -# if HAVE_MBRTOWC - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - arg_end = arg; - characters = 0; - for (; precision > 0; precision--) - { - int count; -# if HAVE_MBRTOWC - count = mbrlen (arg_end, MB_CUR_MAX, &state); -# else - count = mblen (arg_end, MB_CUR_MAX); -# endif - if (count == 0) - /* Found the terminating NUL. */ - break; - if (count < 0) - /* Invalid or incomplete multibyte character. */ - goto fail_with_EILSEQ; - arg_end += count; - characters++; - } - } - else if (has_width) - { - /* Use the entire string, and count the number of wide - characters. */ -# if HAVE_MBRTOWC - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - arg_end = arg; - characters = 0; - for (;;) - { - int count; -# if HAVE_MBRTOWC - count = mbrlen (arg_end, MB_CUR_MAX, &state); -# else - count = mblen (arg_end, MB_CUR_MAX); -# endif - if (count == 0) - /* Found the terminating NUL. */ - break; - if (count < 0) - /* Invalid or incomplete multibyte character. */ - goto fail_with_EILSEQ; - arg_end += count; - characters++; - } - } - else - { - /* Use the entire string. */ - arg_end = arg + strlen (arg); - /* The number of characters doesn't matter. */ - characters = 0; - } - - if (characters < width && !(flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - - if (has_precision || has_width) - { - /* We know the number of wide characters in advance. */ - size_t remaining; -# if HAVE_MBRTOWC - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - ENSURE_ALLOCATION (xsum (length, characters)); - for (remaining = characters; remaining > 0; remaining--) - { - wchar_t wc; - int count; -# if HAVE_MBRTOWC - count = mbrtowc (&wc, arg, arg_end - arg, &state); -# else - count = mbtowc (&wc, arg, arg_end - arg); -# endif - if (count <= 0) - /* mbrtowc not consistent with mbrlen, or mbtowc - not consistent with mblen. */ - abort (); - result[length++] = wc; - arg += count; - } - if (!(arg == arg_end)) - abort (); - } - else - { -# if HAVE_MBRTOWC - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - while (arg < arg_end) - { - wchar_t wc; - int count; -# if HAVE_MBRTOWC - count = mbrtowc (&wc, arg, arg_end - arg, &state); -# else - count = mbtowc (&wc, arg, arg_end - arg); -# endif - if (count == 0) - /* mbrtowc not consistent with strlen. */ - abort (); - if (count < 0) - /* Invalid or incomplete multibyte character. */ - goto fail_with_EILSEQ; - ENSURE_ALLOCATION (xsum (length, 1)); - result[length++] = wc; - arg += count; - } - } - - if (characters < width && (flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - } -# else - /* %ls in vasnprintf. See the specification of fprintf. */ - { - const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; - const wchar_t *arg_end; - size_t characters; -# if !DCHAR_IS_TCHAR - /* This code assumes that TCHAR_T is 'char'. */ - static_assert (sizeof (TCHAR_T) == 1); - TCHAR_T *tmpsrc; - DCHAR_T *tmpdst; - size_t tmpdst_len; -# endif - size_t w; - - if (has_precision) - { - /* Use only as many wide characters as needed to produce - at most PRECISION bytes, from the left. */ -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - arg_end = arg; - characters = 0; - while (precision > 0) - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; - - if (*arg_end == 0) - /* Found the terminating null wide character. */ - break; - count = local_wcrtomb (cbuf, *arg_end, &state); - if (count < 0) - /* Cannot convert. */ - goto fail_with_EILSEQ; - if (precision < (unsigned int) count) - break; - arg_end++; - characters += count; - precision -= count; - } - } -# if DCHAR_IS_TCHAR - else if (has_width) -# else - else -# endif - { - /* Use the entire string, and count the number of - bytes. */ -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - arg_end = arg; - characters = 0; - for (;;) - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; - - if (*arg_end == 0) - /* Found the terminating null wide character. */ - break; - count = local_wcrtomb (cbuf, *arg_end, &state); - if (count < 0) - /* Cannot convert. */ - goto fail_with_EILSEQ; - arg_end++; - characters += count; - } - } -# if DCHAR_IS_TCHAR - else - { - /* Use the entire string. */ - arg_end = arg + local_wcslen (arg); - /* The number of bytes doesn't matter. */ - characters = 0; - } -# endif - -# if !DCHAR_IS_TCHAR - /* Convert the string into a piece of temporary memory. */ - tmpsrc = (TCHAR_T *) malloc (characters * sizeof (TCHAR_T)); - if (tmpsrc == NULL) - goto out_of_memory; - { - TCHAR_T *tmpptr = tmpsrc; - size_t remaining; -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - for (remaining = characters; remaining > 0; ) - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; - - if (*arg == 0) - abort (); - count = local_wcrtomb (cbuf, *arg, &state); - if (count <= 0) - /* Inconsistency. */ - abort (); - memcpy (tmpptr, cbuf, count); - tmpptr += count; - arg++; - remaining -= count; - } - if (!(arg == arg_end)) - abort (); - } - - /* Convert from TCHAR_T[] to DCHAR_T[]. */ - tmpdst = - DCHAR_CONV_FROM_ENCODING (locale_charset (), - iconveh_question_mark, - tmpsrc, characters, - NULL, - NULL, &tmpdst_len); - if (tmpdst == NULL) - { - free (tmpsrc); - goto fail_with_errno; - } - free (tmpsrc); -# endif - - if (has_width) - { -# if ENABLE_UNISTDIO - /* Outside POSIX, it's preferable to compare the width - against the number of _characters_ of the converted - value. */ - w = DCHAR_MBSNLEN (result + length, characters); -# else - /* The width is compared against the number of _bytes_ - of the converted value, says POSIX. */ - w = characters; -# endif - } - else - /* w doesn't matter. */ - w = 0; - - if (w < width && !(flags & FLAG_LEFT)) - { - size_t n = width - w; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - -# if DCHAR_IS_TCHAR - if (has_precision || has_width) - { - /* We know the number of bytes in advance. */ - size_t remaining; -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - ENSURE_ALLOCATION (xsum (length, characters)); - for (remaining = characters; remaining > 0; ) - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; - - if (*arg == 0) - abort (); - count = local_wcrtomb (cbuf, *arg, &state); - if (count <= 0) - /* Inconsistency. */ - abort (); - memcpy (result + length, cbuf, count); - length += count; - arg++; - remaining -= count; - } - if (!(arg == arg_end)) - abort (); - } - else - { -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - while (arg < arg_end) - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; - - if (*arg == 0) - abort (); - count = local_wcrtomb (cbuf, *arg, &state); - if (count <= 0) - /* Cannot convert. */ - goto fail_with_EILSEQ; - ENSURE_ALLOCATION (xsum (length, count)); - memcpy (result + length, cbuf, count); - length += count; - arg++; - } - } -# else - ENSURE_ALLOCATION_ELSE (xsum (length, tmpdst_len), - { free (tmpdst); goto out_of_memory; }); - DCHAR_CPY (result + length, tmpdst, tmpdst_len); - free (tmpdst); - length += tmpdst_len; -# endif - - if (w < width && (flags & FLAG_LEFT)) - { - size_t n = width - w; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - } -# endif - } -#endif -#if (NEED_PRINTF_DIRECTIVE_LC || ENABLE_WCHAR_FALLBACK) && HAVE_WINT_T && !WIDE_CHAR_VERSION - else if (dp->conversion == 'c' - && a.arg[dp->arg_index].type == TYPE_WIDE_CHAR) - { - /* Implement the 'lc' directive ourselves, in order to provide - a correct behaviour for the null wint_t argument and/or the - fallback that avoids EILSEQ. */ - int flags = dp->flags; - int has_width; - size_t width; - - has_width = 0; - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } - has_width = 1; - } - - /* %lc in vasnprintf. See the specification of fprintf. */ - { - wchar_t arg = (wchar_t) a.arg[dp->arg_index].a.a_wide_char; - size_t characters; -# if !DCHAR_IS_TCHAR - /* This code assumes that TCHAR_T is 'char'. */ - static_assert (sizeof (TCHAR_T) == 1); - TCHAR_T tmpsrc[64]; /* Assume MB_CUR_MAX <= 64. */ - DCHAR_T *tmpdst; - size_t tmpdst_len; -# endif - size_t w; - -# if DCHAR_IS_TCHAR - if (has_width) -# endif - { - /* Count the number of bytes. */ - characters = 0; - if (arg != 0) - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - - count = local_wcrtomb (cbuf, arg, &state); - if (count < 0) - /* Cannot convert. */ - goto fail_with_EILSEQ; - characters = count; - } - } -# if DCHAR_IS_TCHAR - else - { - /* The number of bytes doesn't matter. */ - characters = 0; - } -# endif - -# if !DCHAR_IS_TCHAR - /* Convert the string into a piece of temporary memory. */ - if (characters > 0) /* implies arg != 0 */ - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - - count = local_wcrtomb (cbuf, arg, &state); - if (count <= 0) - /* Inconsistency. */ - abort (); - memcpy (tmpsrc, cbuf, count); - } - - /* Convert from TCHAR_T[] to DCHAR_T[]. */ - tmpdst = - DCHAR_CONV_FROM_ENCODING (locale_charset (), - iconveh_question_mark, - tmpsrc, characters, - NULL, - NULL, &tmpdst_len); - if (tmpdst == NULL) - goto fail_with_errno; -# endif - - if (has_width) - { -# if ENABLE_UNISTDIO - /* Outside POSIX, it's preferable to compare the width - against the number of _characters_ of the converted - value. */ - w = DCHAR_MBSNLEN (result + length, characters); -# else - /* The width is compared against the number of _bytes_ - of the converted value, says POSIX. */ - w = characters; -# endif - } - else - /* w doesn't matter. */ - w = 0; - - if (w < width && !(flags & FLAG_LEFT)) - { - size_t n = width - w; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - -# if DCHAR_IS_TCHAR - if (has_width) - { - /* We know the number of bytes in advance. */ - ENSURE_ALLOCATION (xsum (length, characters)); - if (characters > 0) /* implies arg != 0 */ - { - int count; -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - - count = local_wcrtomb (result + length, arg, &state); - if (count <= 0) - /* Inconsistency. */ - abort (); - length += count; - } - } - else - { - if (arg != 0) - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - - count = local_wcrtomb (cbuf, arg, &state); - if (count < 0) - /* Cannot convert. */ - goto fail_with_EILSEQ; - ENSURE_ALLOCATION (xsum (length, count)); - memcpy (result + length, cbuf, count); - length += count; - } - } -# else - ENSURE_ALLOCATION_ELSE (xsum (length, tmpdst_len), - { free (tmpdst); goto out_of_memory; }); - DCHAR_CPY (result + length, tmpdst, tmpdst_len); - free (tmpdst); - length += tmpdst_len; -# endif - - if (w < width && (flags & FLAG_LEFT)) - { - size_t n = width - w; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - } - } -#endif -#if NEED_WPRINTF_DIRECTIVE_C && WIDE_CHAR_VERSION - else if (dp->conversion == 'c' - && a.arg[dp->arg_index].type != TYPE_WIDE_CHAR) - { - /* Implement the 'c' directive ourselves, in order to avoid - EILSEQ in the "C" locale. */ - int flags = dp->flags; - size_t width; - - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } - } - - /* %c in vasnwprintf. See the specification of fwprintf. */ - { - char arg = (char) a.arg[dp->arg_index].a.a_char; - mbstate_t state; - wchar_t wc; - - memset (&state, '\0', sizeof (mbstate_t)); - int count = mbrtowc (&wc, &arg, 1, &state); - if (count < 0) - /* Invalid or incomplete multibyte character. */ - goto fail_with_EILSEQ; - - if (1 < width && !(flags & FLAG_LEFT)) - { - size_t n = width - 1; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - - ENSURE_ALLOCATION (xsum (length, 1)); - result[length++] = wc; - - if (1 < width && (flags & FLAG_LEFT)) - { - size_t n = width - 1; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - } - } -#endif -#if NEED_PRINTF_DIRECTIVE_B || NEED_PRINTF_DIRECTIVE_UPPERCASE_B - else if (0 -# if NEED_PRINTF_DIRECTIVE_B - || (dp->conversion == 'b') -# endif -# if NEED_PRINTF_DIRECTIVE_UPPERCASE_B - || (dp->conversion == 'B') -# endif - ) - { - arg_type type = a.arg[dp->arg_index].type; - int flags = dp->flags; - int has_width; - size_t width; - int has_precision; - size_t precision; - size_t tmp_length; - size_t count; - DCHAR_T tmpbuf[700]; - DCHAR_T *tmp; - DCHAR_T *tmp_end; - DCHAR_T *tmp_start; - DCHAR_T *pad_ptr; - DCHAR_T *p; - - has_width = 0; - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } - has_width = 1; - } - - has_precision = 0; - precision = 1; - if (dp->precision_start != dp->precision_end) - { - if (dp->precision_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->precision_arg_index].a.a_int; - /* "A negative precision is taken as if the precision - were omitted." */ - if (arg >= 0) - { - precision = arg; - has_precision = 1; - } - } - else - { - const FCHAR_T *digitp = dp->precision_start + 1; - - precision = 0; - while (digitp != dp->precision_end) - precision = xsum (xtimes (precision, 10), *digitp++ - '0'); - has_precision = 1; - } - } - - /* Allocate a temporary buffer of sufficient size. */ - switch (type) - { - default: - tmp_length = - (unsigned int) (sizeof (unsigned int) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_ULONGINT: - tmp_length = - (unsigned int) (sizeof (unsigned long int) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_ULONGLONGINT: - tmp_length = - (unsigned int) (sizeof (unsigned long long int) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT8_T: - tmp_length = - (unsigned int) (sizeof (uint8_t) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT16_T: - tmp_length = - (unsigned int) (sizeof (uint16_t) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT32_T: - tmp_length = - (unsigned int) (sizeof (uint32_t) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT64_T: - tmp_length = - (unsigned int) (sizeof (uint64_t) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST8_T: - tmp_length = - (unsigned int) (sizeof (uint_fast8_t) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST16_T: - tmp_length = - (unsigned int) (sizeof (uint_fast16_t) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST32_T: - tmp_length = - (unsigned int) (sizeof (uint_fast32_t) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - case TYPE_UINT_FAST64_T: - tmp_length = - (unsigned int) (sizeof (uint_fast64_t) * CHAR_BIT) - + 1; /* turn floor into ceil */ - break; - } - if (tmp_length < precision) - tmp_length = precision; - /* Add 2, to account for a prefix from the alternate form. */ - tmp_length = xsum (tmp_length, 2); - - if (tmp_length < width) - tmp_length = width; - - if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) - tmp = tmpbuf; - else - { - size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); - - if (size_overflow_p (tmp_memsize)) - /* Overflow, would lead to out of memory. */ - goto out_of_memory; - tmp = (DCHAR_T *) malloc (tmp_memsize); - if (tmp == NULL) - /* Out of memory. */ - goto out_of_memory; - } - - tmp_end = tmp + tmp_length; - - unsigned long long arg; - switch (type) - { - case TYPE_UCHAR: - arg = a.arg[dp->arg_index].a.a_uchar; - break; - case TYPE_USHORT: - arg = a.arg[dp->arg_index].a.a_ushort; - break; - case TYPE_UINT: - arg = a.arg[dp->arg_index].a.a_uint; - break; - case TYPE_ULONGINT: - arg = a.arg[dp->arg_index].a.a_ulongint; - break; - case TYPE_ULONGLONGINT: - arg = a.arg[dp->arg_index].a.a_ulonglongint; - break; - case TYPE_UINT8_T: - arg = a.arg[dp->arg_index].a.a_uint8_t; - break; - case TYPE_UINT16_T: - arg = a.arg[dp->arg_index].a.a_uint16_t; - break; - case TYPE_UINT32_T: - arg = a.arg[dp->arg_index].a.a_uint32_t; - break; - case TYPE_UINT64_T: - arg = a.arg[dp->arg_index].a.a_uint64_t; - break; - case TYPE_UINT_FAST8_T: - arg = a.arg[dp->arg_index].a.a_uint_fast8_t; - break; - case TYPE_UINT_FAST16_T: - arg = a.arg[dp->arg_index].a.a_uint_fast16_t; - break; - case TYPE_UINT_FAST32_T: - arg = a.arg[dp->arg_index].a.a_uint_fast32_t; - break; - case TYPE_UINT_FAST64_T: - arg = a.arg[dp->arg_index].a.a_uint_fast64_t; - break; - default: - abort (); - } - int need_prefix = ((flags & FLAG_ALT) && arg != 0); - - p = tmp_end; - /* "The result of converting a zero value with a precision - of zero is no characters." */ - if (!(has_precision && precision == 0 && arg == 0)) - { - do - { - *--p = '0' + (arg & 1); - arg = arg >> 1; - } - while (arg != 0); - } - - if (has_precision) - { - DCHAR_T *digits_start = tmp_end - precision; - while (p > digits_start) - *--p = '0'; - } - - pad_ptr = p; - - if (need_prefix) - { -# if NEED_PRINTF_DIRECTIVE_B && !NEED_PRINTF_DIRECTIVE_UPPERCASE_B - *--p = 'b'; -# elif NEED_PRINTF_DIRECTIVE_UPPERCASE_B && !NEED_PRINTF_DIRECTIVE_B - *--p = 'B'; -# else - *--p = dp->conversion; -# endif - *--p = '0'; - } - tmp_start = p; - - /* The generated string now extends from tmp_start to tmp_end, - with the zero padding insertion point being at pad_ptr, - tmp_start <= pad_ptr <= tmp_end. */ - count = tmp_end - tmp_start; - - if (count < width) - { - size_t pad = width - count; - - if (flags & FLAG_LEFT) - { - /* Pad with spaces on the right. */ - for (p = tmp_start; p < tmp_end; p++) - *(p - pad) = *p; - for (p = tmp_end - pad; p < tmp_end; p++) - *p = ' '; - } - else if ((flags & FLAG_ZERO) - /* Neither ISO C nor POSIX specify that the '0' - flag is ignored when a width and a precision - are both present. But most implementations - do so. */ - && !(has_width && has_precision)) - { - /* Pad with zeroes. */ - for (p = tmp_start; p < pad_ptr; p++) - *(p - pad) = *p; - for (p = pad_ptr - pad; p < pad_ptr; p++) - *p = '0'; - } - else - { - /* Pad with spaces on the left. */ - for (p = tmp_start - pad; p < tmp_start; p++) - *p = ' '; - } - - tmp_start = tmp_start - pad; - } - - count = tmp_end - tmp_start; - - if (count > tmp_length) - /* tmp_length was incorrectly calculated - fix the - code above! */ - abort (); - - /* Make room for the result. */ - if (count >= allocated - length) - { - size_t n = xsum (length, count); - - ENSURE_ALLOCATION (n); - } - - /* Append the result. */ - memcpy (result + length, tmp_start, count * sizeof (DCHAR_T)); - if (tmp != tmpbuf) - free (tmp); - length += count; - } -#endif -#if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE || (NEED_WPRINTF_DIRECTIVE_LA && WIDE_CHAR_VERSION) - else if ((dp->conversion == 'a' || dp->conversion == 'A') -# if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE)) - && (0 -# if NEED_PRINTF_DOUBLE - || a.arg[dp->arg_index].type == TYPE_DOUBLE -# endif -# if NEED_PRINTF_LONG_DOUBLE || (NEED_WPRINTF_DIRECTIVE_LA && WIDE_CHAR_VERSION) - || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE -# endif - ) -# endif - ) - { - arg_type type = a.arg[dp->arg_index].type; - int flags = dp->flags; - size_t width; - int has_precision; - size_t precision; - size_t tmp_length; - size_t count; - DCHAR_T tmpbuf[700]; - DCHAR_T *tmp; - DCHAR_T *pad_ptr; - DCHAR_T *p; - - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } - } - - has_precision = 0; - precision = 0; - if (dp->precision_start != dp->precision_end) - { - if (dp->precision_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->precision_arg_index].a.a_int; - /* "A negative precision is taken as if the precision - were omitted." */ - if (arg >= 0) - { - precision = arg; - has_precision = 1; - } - } - else - { - const FCHAR_T *digitp = dp->precision_start + 1; - - precision = 0; - while (digitp != dp->precision_end) - precision = xsum (xtimes (precision, 10), *digitp++ - '0'); - has_precision = 1; - } - } - - /* Allocate a temporary buffer of sufficient size. */ - if (type == TYPE_LONGDOUBLE) - tmp_length = - (unsigned int) ((LDBL_DIG + 1) - * 0.831 /* decimal -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - else - tmp_length = - (unsigned int) ((DBL_DIG + 1) - * 0.831 /* decimal -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - if (tmp_length < precision) - tmp_length = precision; - /* Account for sign, decimal point etc. */ - tmp_length = xsum (tmp_length, 12); - - if (tmp_length < width) - tmp_length = width; - - tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ - - if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) - tmp = tmpbuf; - else - { - size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); - - if (size_overflow_p (tmp_memsize)) - /* Overflow, would lead to out of memory. */ - goto out_of_memory; - tmp = (DCHAR_T *) malloc (tmp_memsize); - if (tmp == NULL) - /* Out of memory. */ - goto out_of_memory; - } - - pad_ptr = NULL; - p = tmp; - if (type == TYPE_LONGDOUBLE) - { -# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || (NEED_WPRINTF_DIRECTIVE_LA && WIDE_CHAR_VERSION) - long double arg = a.arg[dp->arg_index].a.a_longdouble; - - if (isnanl (arg)) - { - if (dp->conversion == 'A') - { - *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; - } - else - { - *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; - } - } - else - { - int sign = 0; - DECL_LONG_DOUBLE_ROUNDING - - BEGIN_LONG_DOUBLE_ROUNDING (); - - if (signbit (arg)) /* arg < 0.0L or negative zero */ - { - sign = -1; - arg = -arg; - } - - if (sign < 0) - *p++ = '-'; - else if (flags & FLAG_SHOWSIGN) - *p++ = '+'; - else if (flags & FLAG_SPACE) - *p++ = ' '; - - if (arg > 0.0L && arg + arg == arg) - { - if (dp->conversion == 'A') - { - *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; - } - else - { - *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; - } - } - else - { - int exponent; - long double mantissa; - - if (arg > 0.0L) - mantissa = printf_frexpl (arg, &exponent); - else - { - exponent = 0; - mantissa = 0.0L; - } - - if (has_precision - && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1) - { - /* Round the mantissa. */ - long double tail = mantissa; - size_t q; - - for (q = precision; ; q--) - { - int digit = (int) tail; - tail -= digit; - if (q == 0) - { - if (digit & 1 ? tail >= 0.5L : tail > 0.5L) - tail = 1 - tail; - else - tail = - tail; - break; - } - tail *= 16.0L; - } - if (tail != 0.0L) - for (q = precision; q > 0; q--) - tail *= 0.0625L; - mantissa += tail; - } - - *p++ = '0'; - *p++ = dp->conversion - 'A' + 'X'; - pad_ptr = p; - { - int digit; - - digit = (int) mantissa; - mantissa -= digit; - *p++ = '0' + digit; - if ((flags & FLAG_ALT) - || mantissa > 0.0L || precision > 0) - { - *p++ = decimal_point_char (); - /* This loop terminates because we assume - that FLT_RADIX is a power of 2. */ - while (mantissa > 0.0L) - { - mantissa *= 16.0L; - digit = (int) mantissa; - mantissa -= digit; - *p++ = digit - + (digit < 10 - ? '0' - : dp->conversion - 10); - if (precision > 0) - precision--; - } - while (precision > 0) - { - *p++ = '0'; - precision--; - } - } - } - *p++ = dp->conversion - 'A' + 'P'; -# if WIDE_CHAR_VERSION && DCHAR_IS_TCHAR - { - static const wchar_t decimal_format[] = - { '%', '+', 'd', '\0' }; - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, "%+d", exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, "%+d", exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } -# endif - } - - END_LONG_DOUBLE_ROUNDING (); - } -# else - abort (); -# endif - } - else - { -# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE - double arg = a.arg[dp->arg_index].a.a_double; - - if (isnand (arg)) - { - if (dp->conversion == 'A') - { - *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; - } - else - { - *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; - } - } - else - { - int sign = 0; - - if (signbit (arg)) /* arg < 0.0 or negative zero */ - { - sign = -1; - arg = -arg; - } - - if (sign < 0) - *p++ = '-'; - else if (flags & FLAG_SHOWSIGN) - *p++ = '+'; - else if (flags & FLAG_SPACE) - *p++ = ' '; - - if (arg > 0.0 && arg + arg == arg) - { - if (dp->conversion == 'A') - { - *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; - } - else - { - *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; - } - } - else - { - int exponent; - double mantissa; - - if (arg > 0.0) - mantissa = printf_frexp (arg, &exponent); - else - { - exponent = 0; - mantissa = 0.0; - } - - if (has_precision - && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1) - { - /* Round the mantissa. */ - double tail = mantissa; - size_t q; - - for (q = precision; ; q--) - { - int digit = (int) tail; - tail -= digit; - if (q == 0) - { - if (digit & 1 ? tail >= 0.5 : tail > 0.5) - tail = 1 - tail; - else - tail = - tail; - break; - } - tail *= 16.0; - } - if (tail != 0.0) - for (q = precision; q > 0; q--) - tail *= 0.0625; - mantissa += tail; - } - - *p++ = '0'; - *p++ = dp->conversion - 'A' + 'X'; - pad_ptr = p; - { - int digit; - - digit = (int) mantissa; - mantissa -= digit; - *p++ = '0' + digit; - if ((flags & FLAG_ALT) - || mantissa > 0.0 || precision > 0) - { - *p++ = decimal_point_char (); - /* This loop terminates because we assume - that FLT_RADIX is a power of 2. */ - while (mantissa > 0.0) - { - mantissa *= 16.0; - digit = (int) mantissa; - mantissa -= digit; - *p++ = digit - + (digit < 10 - ? '0' - : dp->conversion - 10); - if (precision > 0) - precision--; - } - while (precision > 0) - { - *p++ = '0'; - precision--; - } - } - } - *p++ = dp->conversion - 'A' + 'P'; -# if WIDE_CHAR_VERSION && DCHAR_IS_TCHAR - { - static const wchar_t decimal_format[] = - { '%', '+', 'd', '\0' }; - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, "%+d", exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, "%+d", exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } -# endif - } - } -# else - abort (); -# endif - } - - /* The generated string now extends from tmp to p, with the - zero padding insertion point being at pad_ptr. */ - count = p - tmp; - - if (count < width) - { - size_t pad = width - count; - DCHAR_T *end = p + pad; - - if (flags & FLAG_LEFT) - { - /* Pad with spaces on the right. */ - for (; pad > 0; pad--) - *p++ = ' '; - } - else if ((flags & FLAG_ZERO) && pad_ptr != NULL) - { - /* Pad with zeroes. */ - DCHAR_T *q = end; - - while (p > pad_ptr) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = '0'; - } - else - { - /* Pad with spaces on the left. */ - DCHAR_T *q = end; - - while (p > tmp) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = ' '; - } - - p = end; - } - - count = p - tmp; - - if (count >= tmp_length) - /* tmp_length was incorrectly calculated - fix the - code above! */ - abort (); - - /* Make room for the result. */ - if (count >= allocated - length) - { - size_t n = xsum (length, count); - - ENSURE_ALLOCATION (n); - } - - /* Append the result. */ - memcpy (result + length, tmp, count * sizeof (DCHAR_T)); - if (tmp != tmpbuf) - free (tmp); - length += count; - } -#endif -#if NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE - else if ((dp->conversion == 'f' || dp->conversion == 'F' - || dp->conversion == 'e' || dp->conversion == 'E' - || dp->conversion == 'g' || dp->conversion == 'G' - || dp->conversion == 'a' || dp->conversion == 'A') - && (0 -# if NEED_PRINTF_DOUBLE - || a.arg[dp->arg_index].type == TYPE_DOUBLE -# elif NEED_PRINTF_INFINITE_DOUBLE - || (a.arg[dp->arg_index].type == TYPE_DOUBLE - /* The systems (mingw) which produce wrong output - for Inf, -Inf, and NaN also do so for -0.0. - Therefore we treat this case here as well. */ - && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double)) -# endif -# if NEED_PRINTF_LONG_DOUBLE - || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE -# elif NEED_PRINTF_INFINITE_LONG_DOUBLE - || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE - /* Some systems produce wrong output for Inf, - -Inf, and NaN. Some systems in this category - (IRIX 5.3) also do so for -0.0. Therefore we - treat this case here as well. */ - && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble)) -# endif - )) - { -# if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) - arg_type type = a.arg[dp->arg_index].type; -# endif - int flags = dp->flags; - size_t width; - size_t count; - int has_precision; - size_t precision; - size_t tmp_length; - DCHAR_T tmpbuf[700]; - DCHAR_T *tmp; - DCHAR_T *pad_ptr; - DCHAR_T *p; - - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } - } - - has_precision = 0; - precision = 0; - if (dp->precision_start != dp->precision_end) - { - if (dp->precision_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->precision_arg_index].a.a_int; - /* "A negative precision is taken as if the precision - were omitted." */ - if (arg >= 0) - { - precision = arg; - has_precision = 1; - } - } - else - { - const FCHAR_T *digitp = dp->precision_start + 1; - - precision = 0; - while (digitp != dp->precision_end) - precision = xsum (xtimes (precision, 10), *digitp++ - '0'); - has_precision = 1; - } - } - - /* POSIX specifies the default precision to be 6 for %f, %F, - %e, %E, but not for %g, %G. Implementations appear to use - the same default precision also for %g, %G. But for %a, %A, - the default precision is 0. */ - if (!has_precision) - if (!(dp->conversion == 'a' || dp->conversion == 'A')) - precision = 6; - - /* Allocate a temporary buffer of sufficient size. */ -# if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE - tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1); -# elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE - tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0); -# elif NEED_PRINTF_LONG_DOUBLE - tmp_length = LDBL_DIG + 1; -# elif NEED_PRINTF_DOUBLE - tmp_length = DBL_DIG + 1; -# else - tmp_length = 0; -# endif - if (tmp_length < precision) - tmp_length = precision; -# if NEED_PRINTF_LONG_DOUBLE -# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE - if (type == TYPE_LONGDOUBLE) -# endif - if (dp->conversion == 'f' || dp->conversion == 'F') - { - long double arg = a.arg[dp->arg_index].a.a_longdouble; - if (!(isnanl (arg) || arg + arg == arg)) - { - /* arg is finite and nonzero. */ - int exponent = floorlog10l (arg < 0 ? -arg : arg); - if (exponent >= 0 && tmp_length < exponent + precision) - tmp_length = exponent + precision; - } - } -# endif -# if NEED_PRINTF_DOUBLE -# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE - if (type == TYPE_DOUBLE) -# endif - if (dp->conversion == 'f' || dp->conversion == 'F') - { - double arg = a.arg[dp->arg_index].a.a_double; - if (!(isnand (arg) || arg + arg == arg)) - { - /* arg is finite and nonzero. */ - int exponent = floorlog10 (arg < 0 ? -arg : arg); - if (exponent >= 0 && tmp_length < exponent + precision) - tmp_length = exponent + precision; - } - } -# endif - /* Account for sign, decimal point etc. */ - tmp_length = xsum (tmp_length, 12); - - if (tmp_length < width) - tmp_length = width; - - tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ - - if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) - tmp = tmpbuf; - else - { - size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); - - if (size_overflow_p (tmp_memsize)) - /* Overflow, would lead to out of memory. */ - goto out_of_memory; - tmp = (DCHAR_T *) malloc (tmp_memsize); - if (tmp == NULL) - /* Out of memory. */ - goto out_of_memory; - } - - pad_ptr = NULL; - p = tmp; - -# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE -# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE - if (type == TYPE_LONGDOUBLE) -# endif - { - long double arg = a.arg[dp->arg_index].a.a_longdouble; - - if (isnanl (arg)) - { - if (dp->conversion >= 'A' && dp->conversion <= 'Z') - { - *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; - } - else - { - *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; - } - } - else - { - int sign = 0; - DECL_LONG_DOUBLE_ROUNDING - - BEGIN_LONG_DOUBLE_ROUNDING (); - - if (signbit (arg)) /* arg < 0.0L or negative zero */ - { - sign = -1; - arg = -arg; - } - - if (sign < 0) - *p++ = '-'; - else if (flags & FLAG_SHOWSIGN) - *p++ = '+'; - else if (flags & FLAG_SPACE) - *p++ = ' '; - - if (arg > 0.0L && arg + arg == arg) - { - if (dp->conversion >= 'A' && dp->conversion <= 'Z') - { - *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; - } - else - { - *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; - } - } - else - { -# if NEED_PRINTF_LONG_DOUBLE - pad_ptr = p; - - if (dp->conversion == 'f' || dp->conversion == 'F') - { - char *digits; - size_t ndigits; - - digits = - scale10_round_decimal_long_double (arg, precision); - if (digits == NULL) - { - END_LONG_DOUBLE_ROUNDING (); - goto out_of_memory; - } - ndigits = strlen (digits); - - if (ndigits > precision) - do - { - --ndigits; - *p++ = digits[ndigits]; - } - while (ndigits > precision); - else - *p++ = '0'; - /* Here ndigits <= precision. */ - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > ndigits; precision--) - *p++ = '0'; - while (ndigits > 0) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - - free (digits); - } - else if (dp->conversion == 'e' || dp->conversion == 'E') - { - int exponent; - - if (arg == 0.0L) - { - exponent = 0; - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - } - else - { - /* arg > 0.0L. */ - int adjusted; - char *digits; - size_t ndigits; - - exponent = floorlog10l (arg); - adjusted = 0; - for (;;) - { - digits = - scale10_round_decimal_long_double (arg, - (int)precision - exponent); - if (digits == NULL) - { - END_LONG_DOUBLE_ROUNDING (); - goto out_of_memory; - } - ndigits = strlen (digits); - - if (ndigits == precision + 1) - break; - if (ndigits < precision - || ndigits > precision + 2) - /* The exponent was not guessed - precisely enough. */ - abort (); - if (adjusted) - /* None of two values of exponent is - the right one. Prevent an endless - loop. */ - abort (); - free (digits); - if (ndigits == precision) - exponent -= 1; - else - exponent += 1; - adjusted = 1; - } - /* Here ndigits = precision+1. */ - if (is_borderline (digits, precision)) - { - /* Maybe the exponent guess was too high - and a smaller exponent can be reached - by turning a 10...0 into 9...9x. */ - char *digits2 = - scale10_round_decimal_long_double (arg, - (int)precision - exponent + 1); - if (digits2 == NULL) - { - free (digits); - END_LONG_DOUBLE_ROUNDING (); - goto out_of_memory; - } - if (strlen (digits2) == precision + 1) - { - free (digits); - digits = digits2; - exponent -= 1; - } - else - free (digits2); - } - /* Here ndigits = precision+1. */ - - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - while (ndigits > 0) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - - free (digits); - } - - *p++ = dp->conversion; /* 'e' or 'E' */ -# if WIDE_CHAR_VERSION && DCHAR_IS_TCHAR - { - static const wchar_t decimal_format[] = - { '%', '+', '.', '2', 'd', '\0' }; - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, "%+.2d", exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, "%+.2d", exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } -# endif - } - else if (dp->conversion == 'g' || dp->conversion == 'G') - { - if (precision == 0) - precision = 1; - /* precision >= 1. */ - - if (arg == 0.0L) - /* The exponent is 0, >= -4, < precision. - Use fixed-point notation. */ - { - size_t ndigits = precision; - /* Number of trailing zeroes that have to be - dropped. */ - size_t nzeroes = - (flags & FLAG_ALT ? 0 : precision - 1); - - --ndigits; - *p++ = '0'; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = '0'; - } - } - } - else - { - /* arg > 0.0L. */ - int exponent; - int adjusted; - char *digits; - size_t ndigits; - size_t nzeroes; - - exponent = floorlog10l (arg); - adjusted = 0; - for (;;) - { - digits = - scale10_round_decimal_long_double (arg, - (int)(precision - 1) - exponent); - if (digits == NULL) - { - END_LONG_DOUBLE_ROUNDING (); - goto out_of_memory; - } - ndigits = strlen (digits); - - if (ndigits == precision) - break; - if (ndigits < precision - 1 - || ndigits > precision + 1) - /* The exponent was not guessed - precisely enough. */ - abort (); - if (adjusted) - /* None of two values of exponent is - the right one. Prevent an endless - loop. */ - abort (); - free (digits); - if (ndigits < precision) - exponent -= 1; - else - exponent += 1; - adjusted = 1; - } - /* Here ndigits = precision. */ - if (is_borderline (digits, precision - 1)) - { - /* Maybe the exponent guess was too high - and a smaller exponent can be reached - by turning a 10...0 into 9...9x. */ - char *digits2 = - scale10_round_decimal_long_double (arg, - (int)(precision - 1) - exponent + 1); - if (digits2 == NULL) - { - free (digits); - END_LONG_DOUBLE_ROUNDING (); - goto out_of_memory; - } - if (strlen (digits2) == precision) - { - free (digits); - digits = digits2; - exponent -= 1; - } - else - free (digits2); - } - /* Here ndigits = precision. */ - - /* Determine the number of trailing zeroes - that have to be dropped. */ - nzeroes = 0; - if ((flags & FLAG_ALT) == 0) - while (nzeroes < ndigits - && digits[nzeroes] == '0') - nzeroes++; - - /* The exponent is now determined. */ - if (exponent >= -4 - && exponent < (long)precision) - { - /* Fixed-point notation: - max(exponent,0)+1 digits, then the - decimal point, then the remaining - digits without trailing zeroes. */ - if (exponent >= 0) - { - size_t ecount = exponent + 1; - /* Note: count <= precision = ndigits. */ - for (; ecount > 0; ecount--) - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - } - else - { - size_t ecount = -exponent - 1; - *p++ = '0'; - *p++ = decimal_point_char (); - for (; ecount > 0; ecount--) - *p++ = '0'; - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - } - else - { - /* Exponential notation. */ - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ -# if WIDE_CHAR_VERSION && DCHAR_IS_TCHAR - { - static const wchar_t decimal_format[] = - { '%', '+', '.', '2', 'd', '\0' }; - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, "%+.2d", exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, "%+.2d", exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } -# endif - } - - free (digits); - } - } - else - abort (); -# else - /* arg is finite. */ - if (!(arg == 0.0L)) - abort (); - - pad_ptr = p; - - if (dp->conversion == 'f' || dp->conversion == 'F') - { - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - } - else if (dp->conversion == 'e' || dp->conversion == 'E') - { - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - *p++ = dp->conversion; /* 'e' or 'E' */ - *p++ = '+'; - *p++ = '0'; - *p++ = '0'; - } - else if (dp->conversion == 'g' || dp->conversion == 'G') - { - *p++ = '0'; - if (flags & FLAG_ALT) - { - size_t ndigits = - (precision > 0 ? precision - 1 : 0); - *p++ = decimal_point_char (); - for (; ndigits > 0; --ndigits) - *p++ = '0'; - } - } - else if (dp->conversion == 'a' || dp->conversion == 'A') - { - *p++ = '0'; - *p++ = dp->conversion - 'A' + 'X'; - pad_ptr = p; - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - *p++ = dp->conversion - 'A' + 'P'; - *p++ = '+'; - *p++ = '0'; - } - else - abort (); -# endif - } - - END_LONG_DOUBLE_ROUNDING (); - } - } -# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE - else -# endif -# endif -# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE - { - double arg = a.arg[dp->arg_index].a.a_double; - - if (isnand (arg)) - { - if (dp->conversion >= 'A' && dp->conversion <= 'Z') - { - *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; - } - else - { - *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; - } - } - else - { - int sign = 0; - - if (signbit (arg)) /* arg < 0.0 or negative zero */ - { - sign = -1; - arg = -arg; - } - - if (sign < 0) - *p++ = '-'; - else if (flags & FLAG_SHOWSIGN) - *p++ = '+'; - else if (flags & FLAG_SPACE) - *p++ = ' '; - - if (arg > 0.0 && arg + arg == arg) - { - if (dp->conversion >= 'A' && dp->conversion <= 'Z') - { - *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; - } - else - { - *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; - } - } - else - { -# if NEED_PRINTF_DOUBLE - pad_ptr = p; - - if (dp->conversion == 'f' || dp->conversion == 'F') - { - char *digits; - size_t ndigits; - - digits = - scale10_round_decimal_double (arg, precision); - if (digits == NULL) - goto out_of_memory; - ndigits = strlen (digits); - - if (ndigits > precision) - do - { - --ndigits; - *p++ = digits[ndigits]; - } - while (ndigits > precision); - else - *p++ = '0'; - /* Here ndigits <= precision. */ - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > ndigits; precision--) - *p++ = '0'; - while (ndigits > 0) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - - free (digits); - } - else if (dp->conversion == 'e' || dp->conversion == 'E') - { - int exponent; - - if (arg == 0.0) - { - exponent = 0; - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - } - else - { - /* arg > 0.0. */ - int adjusted; - char *digits; - size_t ndigits; - - exponent = floorlog10 (arg); - adjusted = 0; - for (;;) - { - digits = - scale10_round_decimal_double (arg, - (int)precision - exponent); - if (digits == NULL) - goto out_of_memory; - ndigits = strlen (digits); - - if (ndigits == precision + 1) - break; - if (ndigits < precision - || ndigits > precision + 2) - /* The exponent was not guessed - precisely enough. */ - abort (); - if (adjusted) - /* None of two values of exponent is - the right one. Prevent an endless - loop. */ - abort (); - free (digits); - if (ndigits == precision) - exponent -= 1; - else - exponent += 1; - adjusted = 1; - } - /* Here ndigits = precision+1. */ - if (is_borderline (digits, precision)) - { - /* Maybe the exponent guess was too high - and a smaller exponent can be reached - by turning a 10...0 into 9...9x. */ - char *digits2 = - scale10_round_decimal_double (arg, - (int)precision - exponent + 1); - if (digits2 == NULL) - { - free (digits); - goto out_of_memory; - } - if (strlen (digits2) == precision + 1) - { - free (digits); - digits = digits2; - exponent -= 1; - } - else - free (digits2); - } - /* Here ndigits = precision+1. */ - - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - while (ndigits > 0) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - - free (digits); - } - - *p++ = dp->conversion; /* 'e' or 'E' */ -# if WIDE_CHAR_VERSION && DCHAR_IS_TCHAR - { - static const wchar_t decimal_format[] = - /* Produce the same number of exponent digits - as the native printf implementation. */ -# if defined _WIN32 && ! defined __CYGWIN__ - { '%', '+', '.', '3', 'd', '\0' }; -# else - { '%', '+', '.', '2', 'd', '\0' }; -# endif - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - { - static const char decimal_format[] = - /* Produce the same number of exponent digits - as the native printf implementation. */ -# if defined _WIN32 && ! defined __CYGWIN__ - "%+.3d"; -# else - "%+.2d"; -# endif - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, decimal_format, exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, decimal_format, exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } - } -# endif - } - else if (dp->conversion == 'g' || dp->conversion == 'G') - { - if (precision == 0) - precision = 1; - /* precision >= 1. */ - - if (arg == 0.0) - /* The exponent is 0, >= -4, < precision. - Use fixed-point notation. */ - { - size_t ndigits = precision; - /* Number of trailing zeroes that have to be - dropped. */ - size_t nzeroes = - (flags & FLAG_ALT ? 0 : precision - 1); - - --ndigits; - *p++ = '0'; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = '0'; - } - } - } - else - { - /* arg > 0.0. */ - int exponent; - int adjusted; - char *digits; - size_t ndigits; - size_t nzeroes; - - exponent = floorlog10 (arg); - adjusted = 0; - for (;;) - { - digits = - scale10_round_decimal_double (arg, - (int)(precision - 1) - exponent); - if (digits == NULL) - goto out_of_memory; - ndigits = strlen (digits); - - if (ndigits == precision) - break; - if (ndigits < precision - 1 - || ndigits > precision + 1) - /* The exponent was not guessed - precisely enough. */ - abort (); - if (adjusted) - /* None of two values of exponent is - the right one. Prevent an endless - loop. */ - abort (); - free (digits); - if (ndigits < precision) - exponent -= 1; - else - exponent += 1; - adjusted = 1; - } - /* Here ndigits = precision. */ - if (is_borderline (digits, precision - 1)) - { - /* Maybe the exponent guess was too high - and a smaller exponent can be reached - by turning a 10...0 into 9...9x. */ - char *digits2 = - scale10_round_decimal_double (arg, - (int)(precision - 1) - exponent + 1); - if (digits2 == NULL) - { - free (digits); - goto out_of_memory; - } - if (strlen (digits2) == precision) - { - free (digits); - digits = digits2; - exponent -= 1; - } - else - free (digits2); - } - /* Here ndigits = precision. */ - - /* Determine the number of trailing zeroes - that have to be dropped. */ - nzeroes = 0; - if ((flags & FLAG_ALT) == 0) - while (nzeroes < ndigits - && digits[nzeroes] == '0') - nzeroes++; - - /* The exponent is now determined. */ - if (exponent >= -4 - && exponent < (long)precision) - { - /* Fixed-point notation: - max(exponent,0)+1 digits, then the - decimal point, then the remaining - digits without trailing zeroes. */ - if (exponent >= 0) - { - size_t ecount = exponent + 1; - /* Note: ecount <= precision = ndigits. */ - for (; ecount > 0; ecount--) - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - } - else - { - size_t ecount = -exponent - 1; - *p++ = '0'; - *p++ = decimal_point_char (); - for (; ecount > 0; ecount--) - *p++ = '0'; - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - } - else - { - /* Exponential notation. */ - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ -# if WIDE_CHAR_VERSION && DCHAR_IS_TCHAR - { - static const wchar_t decimal_format[] = - /* Produce the same number of exponent digits - as the native printf implementation. */ -# if defined _WIN32 && ! defined __CYGWIN__ - { '%', '+', '.', '3', 'd', '\0' }; -# else - { '%', '+', '.', '2', 'd', '\0' }; -# endif - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - { - static const char decimal_format[] = - /* Produce the same number of exponent digits - as the native printf implementation. */ -# if defined _WIN32 && ! defined __CYGWIN__ - "%+.3d"; -# else - "%+.2d"; -# endif - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, decimal_format, exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, decimal_format, exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } - } -# endif - } - - free (digits); - } - } - else - abort (); -# else - /* arg is finite. */ - if (!(arg == 0.0)) - abort (); - - pad_ptr = p; - - if (dp->conversion == 'f' || dp->conversion == 'F') - { - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - } - else if (dp->conversion == 'e' || dp->conversion == 'E') - { - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - *p++ = dp->conversion; /* 'e' or 'E' */ - *p++ = '+'; - /* Produce the same number of exponent digits as - the native printf implementation. */ -# if defined _WIN32 && ! defined __CYGWIN__ - *p++ = '0'; -# endif - *p++ = '0'; - *p++ = '0'; - } - else if (dp->conversion == 'g' || dp->conversion == 'G') - { - *p++ = '0'; - if (flags & FLAG_ALT) - { - size_t ndigits = - (precision > 0 ? precision - 1 : 0); - *p++ = decimal_point_char (); - for (; ndigits > 0; --ndigits) - *p++ = '0'; - } - } - else - abort (); -# endif - } - } - } -# endif - - /* The generated string now extends from tmp to p, with the - zero padding insertion point being at pad_ptr. */ - count = p - tmp; - - if (count < width) - { - size_t pad = width - count; - DCHAR_T *end = p + pad; - - if (flags & FLAG_LEFT) - { - /* Pad with spaces on the right. */ - for (; pad > 0; pad--) - *p++ = ' '; - } - else if ((flags & FLAG_ZERO) && pad_ptr != NULL) - { - /* Pad with zeroes. */ - DCHAR_T *q = end; - - while (p > pad_ptr) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = '0'; - } - else - { - /* Pad with spaces on the left. */ - DCHAR_T *q = end; - - while (p > tmp) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = ' '; - } - - p = end; - } - - count = p - tmp; - - if (count >= tmp_length) - /* tmp_length was incorrectly calculated - fix the - code above! */ - abort (); - - /* Make room for the result. */ - if (count >= allocated - length) - { - size_t n = xsum (length, count); - - ENSURE_ALLOCATION (n); - } - - /* Append the result. */ - memcpy (result + length, tmp, count * sizeof (DCHAR_T)); - if (tmp != tmpbuf) - free (tmp); - length += count; - } -#endif - else - { - arg_type type = a.arg[dp->arg_index].type; - int flags = dp->flags; -#if (WIDE_CHAR_VERSION && MUSL_LIBC) || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - int has_width; -#endif -#if !USE_SNPRINTF || WIDE_CHAR_VERSION || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - size_t width; -#endif -#if !USE_SNPRINTF || (WIDE_CHAR_VERSION && DCHAR_IS_TCHAR) || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (WIDE_CHAR_VERSION && MUSL_LIBC) || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - int has_precision; - size_t precision; -#endif -#if NEED_PRINTF_UNBOUNDED_PRECISION - int prec_ourselves; -#else -# define prec_ourselves 0 -#endif -#if (WIDE_CHAR_VERSION && MUSL_LIBC) || NEED_PRINTF_FLAG_LEFTADJUST -# define pad_ourselves 1 -#elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - int pad_ourselves; -#else -# define pad_ourselves 0 -#endif - TCHAR_T *fbp; - unsigned int prefix_count; - int prefixes[2] IF_LINT (= { 0 }); - int orig_errno; -#if !USE_SNPRINTF - size_t tmp_length; - TCHAR_T tmpbuf[700]; - TCHAR_T *tmp; -#endif - -#if (WIDE_CHAR_VERSION && MUSL_LIBC) || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - has_width = 0; -#endif -#if !USE_SNPRINTF || WIDE_CHAR_VERSION || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } -# if (WIDE_CHAR_VERSION && MUSL_LIBC) || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - has_width = 1; -# endif - } -#endif - -#if !USE_SNPRINTF || (WIDE_CHAR_VERSION && DCHAR_IS_TCHAR) || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (WIDE_CHAR_VERSION && MUSL_LIBC) || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - has_precision = 0; - precision = 6; - if (dp->precision_start != dp->precision_end) - { - if (dp->precision_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->precision_arg_index].a.a_int; - /* "A negative precision is taken as if the precision - were omitted." */ - if (arg >= 0) - { - precision = arg; - has_precision = 1; - } - } - else - { - const FCHAR_T *digitp = dp->precision_start + 1; - - precision = 0; - while (digitp != dp->precision_end) - precision = xsum (xtimes (precision, 10), *digitp++ - '0'); - has_precision = 1; - } - } -#endif - - /* Decide whether to handle the precision ourselves. */ -#if NEED_PRINTF_UNBOUNDED_PRECISION - switch (dp->conversion) - { - case 'd': case 'i': case 'u': - case 'b': - #if SUPPORT_GNU_PRINTF_DIRECTIVES \ - || (__GLIBC__ + (__GLIBC_MINOR__ >= 35) > 2) - case 'B': - #endif - case 'o': - case 'x': case 'X': case 'p': - prec_ourselves = has_precision && (precision > 0); - break; - default: - prec_ourselves = 0; - break; - } -#endif - - /* Decide whether to perform the padding ourselves. */ -#if !((WIDE_CHAR_VERSION && MUSL_LIBC) || NEED_PRINTF_FLAG_LEFTADJUST) && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION) - switch (dp->conversion) - { -# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO - /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need - to perform the padding after this conversion. Functions - with unistdio extensions perform the padding based on - character count rather than element count. */ - case 'c': case 's': -# endif -# if NEED_PRINTF_FLAG_ZERO - case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': - case 'a': case 'A': -# endif - pad_ourselves = 1; - break; - default: - pad_ourselves = prec_ourselves; - break; - } -#endif - -#if !USE_SNPRINTF - /* Allocate a temporary buffer of sufficient size for calling - sprintf. */ - tmp_length = - MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, - flags, width, has_precision, precision, - pad_ourselves); - - if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T)) - tmp = tmpbuf; - else - { - size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T)); - - if (size_overflow_p (tmp_memsize)) - /* Overflow, would lead to out of memory. */ - goto out_of_memory; - tmp = (TCHAR_T *) malloc (tmp_memsize); - if (tmp == NULL) - /* Out of memory. */ - goto out_of_memory; - } -#endif - - /* Construct the format string for calling snprintf or - sprintf. */ - fbp = buf; - *fbp++ = '%'; -#if NEED_PRINTF_FLAG_GROUPING - /* The underlying implementation doesn't support the ' flag. - Produce no grouping characters in this case; this is - acceptable because the grouping is locale dependent. */ -#else - if (flags & FLAG_GROUP) - *fbp++ = '\''; -#endif - if (flags & FLAG_LEFT) - *fbp++ = '-'; - if (flags & FLAG_SHOWSIGN) - *fbp++ = '+'; - if (flags & FLAG_SPACE) - *fbp++ = ' '; - if (flags & FLAG_ALT) - *fbp++ = '#'; -#if __GLIBC__ >= 2 && !defined __UCLIBC__ - if (flags & FLAG_LOCALIZED) - *fbp++ = 'I'; -#endif - if (!pad_ourselves) - { - if (flags & FLAG_ZERO) - *fbp++ = '0'; - if (dp->width_start != dp->width_end) - { - size_t n = dp->width_end - dp->width_start; - /* The width specification is known to consist only - of standard ASCII characters. */ - if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) - { - memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T)); - fbp += n; - } - else - { - const FCHAR_T *mp = dp->width_start; - do - *fbp++ = *mp++; - while (--n > 0); - } - } - } - if (!prec_ourselves) - { - if (dp->precision_start != dp->precision_end) - { - size_t n = dp->precision_end - dp->precision_start; - /* The precision specification is known to consist only - of standard ASCII characters. */ - if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) - { - memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T)); - fbp += n; - } - else - { - const FCHAR_T *mp = dp->precision_start; - do - *fbp++ = *mp++; - while (--n > 0); - } - } - } - - switch (type) - { - case TYPE_LONGLONGINT: - case TYPE_ULONGLONGINT: - #if INT8_WIDTH > LONG_WIDTH - case TYPE_INT8_T: - #endif - #if UINT8_WIDTH > LONG_WIDTH - case TYPE_UINT8_T: - #endif - #if INT16_WIDTH > LONG_WIDTH - case TYPE_INT16_T: - #endif - #if UINT16_WIDTH > LONG_WIDTH - case TYPE_UINT16_T: - #endif - #if INT32_WIDTH > LONG_WIDTH - case TYPE_INT32_T: - #endif - #if UINT32_WIDTH > LONG_WIDTH - case TYPE_UINT32_T: - #endif - #if INT64_WIDTH > LONG_WIDTH - case TYPE_INT64_T: - #endif - #if UINT64_WIDTH > LONG_WIDTH - case TYPE_UINT64_T: - #endif - #if INT_FAST8_WIDTH > LONG_WIDTH - case TYPE_INT_FAST8_T: - #endif - #if UINT_FAST8_WIDTH > LONG_WIDTH - case TYPE_UINT_FAST8_T: - #endif - #if INT_FAST16_WIDTH > LONG_WIDTH - case TYPE_INT_FAST16_T: - #endif - #if UINT_FAST16_WIDTH > LONG_WIDTH - case TYPE_UINT_FAST16_T: - #endif - #if INT_FAST32_WIDTH > LONG_WIDTH - case TYPE_INT3_FAST2_T: - #endif - #if UINT_FAST32_WIDTH > LONG_WIDTH - case TYPE_UINT_FAST32_T: - #endif - #if INT_FAST64_WIDTH > LONG_WIDTH - case TYPE_INT_FAST64_T: - #endif - #if UINT_FAST64_WIDTH > LONG_WIDTH - case TYPE_UINT_FAST64_T: - #endif -#if defined _WIN32 && ! defined __CYGWIN__ - *fbp++ = 'I'; - *fbp++ = '6'; - *fbp++ = '4'; - break; -#else - *fbp++ = 'l'; -#endif - FALLTHROUGH; - case TYPE_LONGINT: - case TYPE_ULONGINT: - #if INT8_WIDTH > INT_WIDTH && INT8_WIDTH <= LONG_WIDTH - case TYPE_INT8_T: - #endif - #if UINT8_WIDTH > INT_WIDTH && UINT8_WIDTH <= LONG_WIDTH - case TYPE_UINT8_T: - #endif - #if INT16_WIDTH > INT_WIDTH && INT16_WIDTH <= LONG_WIDTH - case TYPE_INT16_T: - #endif - #if UINT16_WIDTH > INT_WIDTH && UINT16_WIDTH <= LONG_WIDTH - case TYPE_UINT16_T: - #endif - #if INT32_WIDTH > INT_WIDTH && INT32_WIDTH <= LONG_WIDTH - case TYPE_INT32_T: - #endif - #if UINT32_WIDTH > INT_WIDTH && UINT32_WIDTH <= LONG_WIDTH - case TYPE_UINT32_T: - #endif - #if INT64_WIDTH > INT_WIDTH && INT64_WIDTH <= LONG_WIDTH - case TYPE_INT64_T: - #endif - #if UINT64_WIDTH > INT_WIDTH && UINT64_WIDTH <= LONG_WIDTH - case TYPE_UINT64_T: - #endif - #if INT_FAST8_WIDTH > INT_WIDTH && INT_FAST8_WIDTH <= LONG_WIDTH - case TYPE_INT_FAST8_T: - #endif - #if UINT_FAST8_WIDTH > INT_WIDTH && UINT_FAST8_WIDTH <= LONG_WIDTH - case TYPE_UINT_FAST8_T: - #endif - #if INT_FAST16_WIDTH > INT_WIDTH && INT_FAST16_WIDTH <= LONG_WIDTH - case TYPE_INT_FAST16_T: - #endif - #if UINT_FAST16_WIDTH > INT_WIDTH && UINT_FAST16_WIDTH <= LONG_WIDTH - case TYPE_UINT_FAST16_T: - #endif - #if INT_FAST32_WIDTH > INT_WIDTH && INT_FAST32_WIDTH <= LONG_WIDTH - case TYPE_INT_FAST32_T: - #endif - #if UINT_FAST32_WIDTH > INT_WIDTH && UINT_FAST32_WIDTH <= LONG_WIDTH - case TYPE_UINT_FAST32_T: - #endif - #if INT_FAST64_WIDTH > INT_WIDTH && INT_FAST64_WIDTH <= LONG_WIDTH - case TYPE_INT_FAST64_T: - #endif - #if UINT_FAST64_WIDTH > INT_WIDTH && UINT_FAST64_WIDTH <= LONG_WIDTH - case TYPE_UINT_FAST64_T: - #endif - #if HAVE_WINT_T - case TYPE_WIDE_CHAR: - #endif - #if HAVE_WCHAR_T - case TYPE_WIDE_STRING: - #endif - *fbp++ = 'l'; - break; - case TYPE_LONGDOUBLE: - *fbp++ = 'L'; - break; - default: - break; - } -#if NEED_PRINTF_DIRECTIVE_F - if (dp->conversion == 'F') - *fbp = 'f'; - else -#endif - *fbp = dp->conversion; -#if USE_SNPRINTF - /* Decide whether to pass %n in the format string - to SNPRINTF. */ -# if (((!WIDE_CHAR_VERSION || !DCHAR_IS_TCHAR) \ - && (HAVE_SNPRINTF_RETVAL_C99 && HAVE_SNPRINTF_TRUNCATION_C99)) \ - || ((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) \ - && !defined __UCLIBC__) \ - || (defined __APPLE__ && defined __MACH__) \ - || defined __OpenBSD__ \ - || defined __ANDROID__ \ - || (defined _WIN32 && ! defined __CYGWIN__)) \ - || (WIDE_CHAR_VERSION && MUSL_LIBC) - /* We can avoid passing %n and instead rely on SNPRINTF's - return value if - - !WIDE_CHAR_VERSION || !DCHAR_IS_TCHAR, because otherwise, - when WIDE_CHAR_VERSION && DCHAR_IS_TCHAR, - snwprintf()/_snwprintf() (Windows) and swprintf() (Unix) - don't return the needed buffer size, - and - - we're compiling for a system where we know - - that snprintf's return value conforms to ISO C 99 - (HAVE_SNPRINTF_RETVAL_C99) and - - that snprintf always produces NUL-terminated strings - (HAVE_SNPRINTF_TRUNCATION_C99). - And it is desirable to do so, because more and more platforms - no longer support %n, for "security reasons". */ - /* On specific platforms, listed below, we *must* avoid %n. - In the case - !WIDE_CHAR_VERSION && HAVE_SNPRINTF_RETVAL_C99 && !USE_MSVC__SNPRINTF - we can rely on the return value of snprintf instead. Whereas - in the opposite case - WIDE_CHAR_VERSION || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF - we need to make room based on an estimation, computed by - MAX_ROOM_NEEDED. */ - /* The following platforms forbid %n: - - On glibc2 systems from 2004-10-18 or newer, the use of - %n in format strings in writable memory may crash the - program (if compiled with _FORTIFY_SOURCE=2). - - On macOS 10.13 or newer, the use of %n in format - strings in writable memory by default crashes the - program. - - On OpenBSD, since 2021-08-30, the use of %n in format - strings produces an abort (see - , - ). - - On Android, starting on 2018-03-07, the use of %n in - format strings produces a fatal error (see - ). - - On native Windows systems (such as mingw) where the OS is - Windows Vista, the use of %n in format strings by default - crashes the program. See - and - - On the first four of these platforms, if !WIDE_CHAR_VERSION, - it is not a big deal to avoid %n, because on these platforms, - HAVE_SNPRINTF_RETVAL_C99 and HAVE_SNPRINTF_TRUNCATION_C99 are - 1. - On native Windows, if !WIDE_CHAR_VERSION, it's not a big deal - either because: - - Although the gl_SNPRINTF_TRUNCATION_C99 test fails, - snprintf does not write more than the specified number - of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes - '4', '5', '6' into buf, not '4', '5', '\0'.) - - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf - allows us to recognize the case of an insufficient - buffer size: it returns -1 in this case. */ - /* Additionally, in the WIDE_CHAR_VERSION case, we cannot use %n - on musl libc because we would run into an swprintf() bug. - See . */ - fbp[1] = '\0'; -# else /* AIX <= 5.1, HP-UX, IRIX, OSF/1, Solaris <= 9, BeOS */ - fbp[1] = '%'; - fbp[2] = 'n'; - fbp[3] = '\0'; -# endif -#else - fbp[1] = '\0'; -#endif - - /* Construct the arguments for calling snprintf or sprintf. */ - prefix_count = 0; - if (!pad_ourselves && dp->width_arg_index != ARG_NONE) - { - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int; - } - if (!prec_ourselves && dp->precision_arg_index != ARG_NONE) - { - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int; - } - -#if USE_SNPRINTF - /* The SNPRINTF result is appended after result[0..length]. - The latter is an array of DCHAR_T; SNPRINTF appends an - array of TCHAR_T to it. This is possible because - sizeof (TCHAR_T) divides sizeof (DCHAR_T) and - alignof (TCHAR_T) <= alignof (DCHAR_T). */ -# define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T)) - /* Ensure that maxlen below will be >= 2. Needed on BeOS, - where an snprintf() with maxlen==1 acts like sprintf(). */ - ENSURE_ALLOCATION (xsum (length, - (2 + TCHARS_PER_DCHAR - 1) - / TCHARS_PER_DCHAR)); - /* Prepare checking whether snprintf returns the count - via %n. */ - *(TCHAR_T *) (result + length) = '\0'; -#endif - - orig_errno = errno; - - for (;;) - { - int count = -1; - -#if USE_SNPRINTF - int retcount = 0; - size_t maxlen = allocated - length; - /* SNPRINTF can fail if its second argument is - > INT_MAX. */ - if (maxlen > INT_MAX / TCHARS_PER_DCHAR) - maxlen = INT_MAX / TCHARS_PER_DCHAR; - maxlen = maxlen * TCHARS_PER_DCHAR; -# define SNPRINTF_BUF(arg) \ - switch (prefix_count) \ - { \ - case 0: \ - retcount = SNPRINTF ((TCHAR_T *) (result + length), \ - maxlen, buf, \ - arg, &count); \ - break; \ - case 1: \ - retcount = SNPRINTF ((TCHAR_T *) (result + length), \ - maxlen, buf, \ - prefixes[0], arg, &count); \ - break; \ - case 2: \ - retcount = SNPRINTF ((TCHAR_T *) (result + length), \ - maxlen, buf, \ - prefixes[0], prefixes[1], arg, \ - &count); \ - break; \ - default: \ - abort (); \ - } -#else -# define SNPRINTF_BUF(arg) \ - switch (prefix_count) \ - { \ - case 0: \ - count = sprintf (tmp, buf, arg); \ - break; \ - case 1: \ - count = sprintf (tmp, buf, prefixes[0], arg); \ - break; \ - case 2: \ - count = sprintf (tmp, buf, prefixes[0], prefixes[1],\ - arg); \ - break; \ - default: \ - abort (); \ - } -#endif - - errno = 0; - switch (type) - { - case TYPE_SCHAR: - { - int arg = a.arg[dp->arg_index].a.a_schar; - SNPRINTF_BUF (arg); - } - break; - case TYPE_UCHAR: - { - unsigned int arg = a.arg[dp->arg_index].a.a_uchar; - SNPRINTF_BUF (arg); - } - break; - case TYPE_SHORT: - { - int arg = a.arg[dp->arg_index].a.a_short; - SNPRINTF_BUF (arg); - } - break; - case TYPE_USHORT: - { - unsigned int arg = a.arg[dp->arg_index].a.a_ushort; - SNPRINTF_BUF (arg); - } - break; - case TYPE_INT: - { - int arg = a.arg[dp->arg_index].a.a_int; - SNPRINTF_BUF (arg); - } - break; - case TYPE_UINT: - { - unsigned int arg = a.arg[dp->arg_index].a.a_uint; - SNPRINTF_BUF (arg); - } - break; - case TYPE_LONGINT: - { - long int arg = a.arg[dp->arg_index].a.a_longint; - SNPRINTF_BUF (arg); - } - break; - case TYPE_ULONGINT: - { - unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint; - SNPRINTF_BUF (arg); - } - break; - case TYPE_LONGLONGINT: - { - long long int arg = a.arg[dp->arg_index].a.a_longlongint; - SNPRINTF_BUF (arg); - } - break; - case TYPE_ULONGLONGINT: - { - unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint; - SNPRINTF_BUF (arg); - } - break; - case TYPE_INT8_T: - { - int8_t arg = a.arg[dp->arg_index].a.a_int8_t; - SNPRINTF_BUF (arg); - } - break; - case TYPE_UINT8_T: - { - uint8_t arg = a.arg[dp->arg_index].a.a_uint8_t; - SNPRINTF_BUF (arg); - } - break; - case TYPE_INT16_T: - { - int16_t arg = a.arg[dp->arg_index].a.a_int16_t; - SNPRINTF_BUF (arg); - } - break; - case TYPE_UINT16_T: - { - uint16_t arg = a.arg[dp->arg_index].a.a_uint16_t; - SNPRINTF_BUF (arg); - } - break; - case TYPE_INT32_T: - { - int32_t arg = a.arg[dp->arg_index].a.a_int32_t; - SNPRINTF_BUF (arg); - } - break; - case TYPE_UINT32_T: - { - uint32_t arg = a.arg[dp->arg_index].a.a_uint32_t; - SNPRINTF_BUF (arg); - } - break; - case TYPE_INT64_T: - { - int64_t arg = a.arg[dp->arg_index].a.a_int64_t; - SNPRINTF_BUF (arg); - } - break; - case TYPE_UINT64_T: - { - uint64_t arg = a.arg[dp->arg_index].a.a_uint64_t; - SNPRINTF_BUF (arg); - } - break; - case TYPE_INT_FAST8_T: - { - int_fast8_t arg = a.arg[dp->arg_index].a.a_int_fast8_t; - SNPRINTF_BUF (arg); - } - break; - case TYPE_UINT_FAST8_T: - { - uint_fast8_t arg = a.arg[dp->arg_index].a.a_uint_fast8_t; - SNPRINTF_BUF (arg); - } - break; - case TYPE_INT_FAST16_T: - { - int_fast16_t arg = a.arg[dp->arg_index].a.a_int_fast16_t; - SNPRINTF_BUF (arg); - } - break; - case TYPE_UINT_FAST16_T: - { - uint_fast16_t arg = a.arg[dp->arg_index].a.a_uint_fast16_t; - SNPRINTF_BUF (arg); - } - break; - case TYPE_INT_FAST32_T: - { - int_fast32_t arg = a.arg[dp->arg_index].a.a_int_fast32_t; - SNPRINTF_BUF (arg); - } - break; - case TYPE_UINT_FAST32_T: - { - uint_fast32_t arg = a.arg[dp->arg_index].a.a_uint_fast32_t; - SNPRINTF_BUF (arg); - } - break; - case TYPE_INT_FAST64_T: - { - int_fast64_t arg = a.arg[dp->arg_index].a.a_int_fast64_t; - SNPRINTF_BUF (arg); - } - break; - case TYPE_UINT_FAST64_T: - { - uint_fast64_t arg = a.arg[dp->arg_index].a.a_uint_fast64_t; - SNPRINTF_BUF (arg); - } - break; - case TYPE_DOUBLE: - { - double arg = a.arg[dp->arg_index].a.a_double; - SNPRINTF_BUF (arg); - } - break; - case TYPE_LONGDOUBLE: - { - long double arg = a.arg[dp->arg_index].a.a_longdouble; - SNPRINTF_BUF (arg); - } - break; - case TYPE_CHAR: - { - int arg = a.arg[dp->arg_index].a.a_char; - SNPRINTF_BUF (arg); - } - break; -#if HAVE_WINT_T - case TYPE_WIDE_CHAR: - { - wint_t arg = a.arg[dp->arg_index].a.a_wide_char; - SNPRINTF_BUF (arg); - } - break; -#endif - case TYPE_STRING: - { - const char *arg = a.arg[dp->arg_index].a.a_string; - SNPRINTF_BUF (arg); - } - break; -#if HAVE_WCHAR_T - case TYPE_WIDE_STRING: - { - const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; - SNPRINTF_BUF (arg); - } - break; -#endif - case TYPE_POINTER: - { - void *arg = a.arg[dp->arg_index].a.a_pointer; - SNPRINTF_BUF (arg); - } - break; - default: - abort (); - } - -#if USE_SNPRINTF - /* Portability: Not all implementations of snprintf() - are ISO C 99 compliant. Determine the number of - bytes that snprintf() has produced or would have - produced. */ - if (count >= 0) - { - /* Verify that snprintf() has NUL-terminated its - result. */ - if ((unsigned int) count < maxlen - && ((TCHAR_T *) (result + length)) [count] != '\0') - abort (); - /* Portability hack. */ - if (retcount > count) - count = retcount; - } - else - { - /* snprintf() doesn't understand the '%n' - directive. */ - if (fbp[1] != '\0') - { - /* Don't use the '%n' directive; instead, look - at the snprintf() return value. */ - fbp[1] = '\0'; - continue; - } - else - { - /* Look at the snprintf() return value. */ - if (retcount < 0) - { -# if (WIDE_CHAR_VERSION && DCHAR_IS_TCHAR) || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF - /* HP-UX 10.20 snprintf() is doubly deficient: - It doesn't understand the '%n' directive, - *and* it returns -1 (rather than the length - that would have been required) when the - buffer is too small. - Likewise, in case of - WIDE_CHAR_VERSION && DCHAR_IS_TCHAR, the - functions snwprintf()/_snwprintf() (Windows) - or swprintf() (Unix). - But a failure at this point can also come - from other reasons than a too small buffer, - such as an invalid wide string argument to - the %ls directive, or possibly an invalid - floating-point argument. */ - size_t tmp_length = - MAX_ROOM_NEEDED (&a, dp->arg_index, - dp->conversion, type, flags, - width, - has_precision, - precision, pad_ourselves); - - if (maxlen < tmp_length) - { - /* Make more room. But try to do through - this reallocation only once. */ - size_t bigger_need = - xsum (length, - xsum (tmp_length, - TCHARS_PER_DCHAR - 1) - / TCHARS_PER_DCHAR); - /* And always grow proportionally. - (There may be several arguments, each - needing a little more room than the - previous one.) */ - size_t bigger_need2 = - xsum (xtimes (allocated, 2), 12); - if (bigger_need < bigger_need2) - bigger_need = bigger_need2; - ENSURE_ALLOCATION (bigger_need); - continue; - } -# endif - } - else - { - count = retcount; -# if WIDE_CHAR_VERSION && defined __MINGW32__ - if (count == 0 && dp->conversion == 'c') - /* snwprintf returned 0 instead of 1. But it - wrote a null wide character. */ - count = 1; -# endif - } - } - } -#endif - - /* Attempt to handle failure. */ - if (count < 0) - { - /* SNPRINTF or sprintf failed. Use the errno that it - has set, if any. */ - if (errno == 0) - { - if (dp->conversion == 'c' || dp->conversion == 's') - errno = EILSEQ; - else - errno = EINVAL; - } - - goto fail_with_errno; - } - -#if USE_SNPRINTF - /* Handle overflow of the allocated buffer. - If such an overflow occurs, a C99 compliant snprintf() - returns a count >= maxlen. However, a non-compliant - snprintf() function returns only count = maxlen - 1. To - cover both cases, test whether count >= maxlen - 1. */ - if ((unsigned int) count + 1 >= maxlen) - { - /* If maxlen already has attained its allowed maximum, - allocating more memory will not increase maxlen. - Instead of looping, bail out. */ - if (maxlen == INT_MAX / TCHARS_PER_DCHAR) - goto overflow; - else - { - /* Need at least (count + 1) * sizeof (TCHAR_T) - bytes. (The +1 is for the trailing NUL.) - But ask for (count + 2) * sizeof (TCHAR_T) - bytes, so that in the next round, we likely get - maxlen > (unsigned int) count + 1 - and so we don't get here again. - And allocate proportionally, to avoid looping - eternally if snprintf() reports a too small - count. */ - size_t n = - xmax (xsum (length, - ((unsigned int) count + 2 - + TCHARS_PER_DCHAR - 1) - / TCHARS_PER_DCHAR), - xtimes (allocated, 2)); - - ENSURE_ALLOCATION (n); - continue; - } - } -#endif - -#if NEED_PRINTF_UNBOUNDED_PRECISION - if (prec_ourselves) - { - /* Handle the precision. */ - TCHAR_T *prec_ptr = -# if USE_SNPRINTF - (TCHAR_T *) (result + length); -# else - tmp; -# endif - size_t prefix_count; - size_t move; - - prefix_count = 0; - /* Put the additional zeroes after the sign. */ - if (count >= 1 - && (*prec_ptr == '-' || *prec_ptr == '+' - || *prec_ptr == ' ')) - prefix_count = 1; - /* Put the additional zeroes after the 0x prefix if - (flags & FLAG_ALT) || (dp->conversion == 'p'). */ - else if (count >= 2 - && prec_ptr[0] == '0' - && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X')) - prefix_count = 2; - - move = count - prefix_count; - if (precision > move) - { - /* Insert zeroes. */ - size_t insert = precision - move; - TCHAR_T *prec_end; - -# if USE_SNPRINTF - size_t n = - xsum (length, - (count + insert + TCHARS_PER_DCHAR - 1) - / TCHARS_PER_DCHAR); - length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; - ENSURE_ALLOCATION (n); - length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; - prec_ptr = (TCHAR_T *) (result + length); -# endif - - prec_end = prec_ptr + count; - prec_ptr += prefix_count; - - while (prec_end > prec_ptr) - { - prec_end--; - prec_end[insert] = prec_end[0]; - } - - prec_end += insert; - do - *--prec_end = '0'; - while (prec_end > prec_ptr); - - count += insert; - } - } -#endif - -#if !USE_SNPRINTF - if (count >= tmp_length) - /* tmp_length was incorrectly calculated - fix the - code above! */ - abort (); -#endif - -#if !DCHAR_IS_TCHAR - /* Convert from TCHAR_T[] to DCHAR_T[]. */ - if (dp->conversion == 'c' || dp->conversion == 's' -# if __GLIBC__ >= 2 && !defined __UCLIBC__ - || (flags & FLAG_LOCALIZED) -# endif - ) - { - /* The result string is not guaranteed to be ASCII. */ - const TCHAR_T *tmpsrc; - DCHAR_T *tmpdst; - size_t tmpdst_len; - /* This code assumes that TCHAR_T is 'char'. */ - static_assert (sizeof (TCHAR_T) == 1); -# if USE_SNPRINTF - tmpsrc = (TCHAR_T *) (result + length); -# else - tmpsrc = tmp; -# endif -# if WIDE_CHAR_VERSION - /* Convert tmpsrc[0..count-1] to a freshly allocated - wide character array. */ - mbstate_t state; - - memset (&state, '\0', sizeof (mbstate_t)); - tmpdst_len = 0; - { - const TCHAR_T *src = tmpsrc; - size_t srclen = count; - - for (; srclen > 0; tmpdst_len++) - { - /* Parse the next multibyte character. */ - size_t ret = mbrtowc (NULL, src, srclen, &state); - if (ret == (size_t)(-2) || ret == (size_t)(-1)) - goto fail_with_EILSEQ; - if (ret == 0) - ret = 1; - src += ret; - srclen -= ret; - } - } - - tmpdst = - (wchar_t *) malloc ((tmpdst_len + 1) * sizeof (wchar_t)); - if (tmpdst == NULL) - goto out_of_memory; - - memset (&state, '\0', sizeof (mbstate_t)); - { - DCHAR_T *destptr = tmpdst; - const TCHAR_T *src = tmpsrc; - size_t srclen = count; - - for (; srclen > 0; destptr++) - { - /* Parse the next multibyte character. */ - size_t ret = mbrtowc (destptr, src, srclen, &state); - if (ret == (size_t)(-2) || ret == (size_t)(-1)) - /* Should already have been caught in the first - loop, above. */ - abort (); - if (ret == 0) - ret = 1; - src += ret; - srclen -= ret; - } - } -# else - tmpdst = - DCHAR_CONV_FROM_ENCODING (locale_charset (), - iconveh_question_mark, - tmpsrc, count, - NULL, - NULL, &tmpdst_len); - if (tmpdst == NULL) - goto fail_with_errno; -# endif - ENSURE_ALLOCATION_ELSE (xsum (length, tmpdst_len), - { free (tmpdst); goto out_of_memory; }); - DCHAR_CPY (result + length, tmpdst, tmpdst_len); - free (tmpdst); - count = tmpdst_len; - } - else - { - /* The result string is ASCII. - Simple 1:1 conversion. */ -# if USE_SNPRINTF - /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a - no-op conversion, in-place on the array starting - at (result + length). */ - if (sizeof (DCHAR_T) != sizeof (TCHAR_T)) -# endif - { - const TCHAR_T *tmpsrc; - DCHAR_T *tmpdst; - size_t n; - -# if USE_SNPRINTF - if (result == resultbuf) - { - tmpsrc = (TCHAR_T *) (result + length); - /* ENSURE_ALLOCATION will not move tmpsrc - (because it's part of resultbuf). */ - ENSURE_ALLOCATION (xsum (length, count)); - } - else - { - /* ENSURE_ALLOCATION will move the array - (because it uses realloc(). */ - ENSURE_ALLOCATION (xsum (length, count)); - tmpsrc = (TCHAR_T *) (result + length); - } -# else - tmpsrc = tmp; - ENSURE_ALLOCATION (xsum (length, count)); -# endif - tmpdst = result + length; - /* Copy backwards, because of overlapping. */ - tmpsrc += count; - tmpdst += count; - for (n = count; n > 0; n--) - *--tmpdst = *--tmpsrc; - } - } -#endif - -#if DCHAR_IS_TCHAR && !USE_SNPRINTF - /* Make room for the result. */ - if (count > allocated - length) - { - /* Need at least count elements. But allocate - proportionally. */ - size_t n = - xmax (xsum (length, count), xtimes (allocated, 2)); - - ENSURE_ALLOCATION (n); - } -#endif - - /* Here count <= allocated - length. */ - - /* Perform padding. */ -#if (WIDE_CHAR_VERSION && MUSL_LIBC) || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - if (pad_ourselves && has_width) - { - size_t w; -# if ENABLE_UNISTDIO - /* Outside POSIX, it's preferable to compare the width - against the number of _characters_ of the converted - value. */ - w = DCHAR_MBSNLEN (result + length, count); -# else - /* The width is compared against the number of _bytes_ - of the converted value, says POSIX. */ - w = count; -# endif - if (w < width) - { - size_t pad = width - w; - - /* Make room for the result. */ - if (xsum (count, pad) > allocated - length) - { - /* Need at least count + pad elements. But - allocate proportionally. */ - size_t n = - xmax (xsum3 (length, count, pad), - xtimes (allocated, 2)); - -# if USE_SNPRINTF - length += count; - ENSURE_ALLOCATION (n); - length -= count; -# else - ENSURE_ALLOCATION (n); -# endif - } - /* Here count + pad <= allocated - length. */ - - { -# if !DCHAR_IS_TCHAR || USE_SNPRINTF - DCHAR_T * const rp = result + length; -# else - DCHAR_T * const rp = tmp; -# endif - DCHAR_T *p = rp + count; - DCHAR_T *end = p + pad; - DCHAR_T *pad_ptr; -# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO - if (dp->conversion == 'c' - || dp->conversion == 's') - /* No zero-padding for string directives. */ - pad_ptr = NULL; - else -# endif - { - pad_ptr = (*rp == '-' ? rp + 1 : rp); - /* No zero-padding of "inf" and "nan". */ - if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z') - || (*pad_ptr >= 'a' && *pad_ptr <= 'z')) - pad_ptr = NULL; - else - /* Do the zero-padding after the "0x" or - "0b" prefix, not before. */ - if (p - rp >= 2 - && *rp == '0' - && (((dp->conversion == 'a' - || dp->conversion == 'x') - && rp[1] == 'x') - || ((dp->conversion == 'A' - || dp->conversion == 'X') - && rp[1] == 'X') - || (dp->conversion == 'b' - && rp[1] == 'b') - || (dp->conversion == 'B' - && rp[1] == 'B'))) - pad_ptr += 2; - } - /* The generated string now extends from rp to p, - with the zero padding insertion point being at - pad_ptr. */ - - count = count + pad; /* = end - rp */ - - if (flags & FLAG_LEFT) - { - /* Pad with spaces on the right. */ - for (; pad > 0; pad--) - *p++ = ' '; - } - else if ((flags & FLAG_ZERO) && pad_ptr != NULL - /* ISO C says: "For d, i, o, u, x, and X - conversions, if a precision is - specified, the 0 flag is ignored. */ - && !(has_precision - && (dp->conversion == 'd' - || dp->conversion == 'i' - || dp->conversion == 'o' - || dp->conversion == 'u' - || dp->conversion == 'x' - || dp->conversion == 'X' - /* Although ISO C does not - require it, treat 'b' and 'B' - like 'x' and 'X'. */ - || dp->conversion == 'b' - || dp->conversion == 'B'))) - { - /* Pad with zeroes. */ - DCHAR_T *q = end; - - while (p > pad_ptr) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = '0'; - } - else - { - /* Pad with spaces on the left. */ - DCHAR_T *q = end; - - while (p > rp) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = ' '; - } - } - } - } -#endif - - /* Here still count <= allocated - length. */ - -#if !DCHAR_IS_TCHAR || USE_SNPRINTF - /* The snprintf() result did fit. */ -#else - /* Append the sprintf() result. */ - memcpy (result + length, tmp, count * sizeof (DCHAR_T)); -#endif -#if !USE_SNPRINTF - if (tmp != tmpbuf) - free (tmp); -#endif - -#if NEED_PRINTF_DIRECTIVE_F - if (dp->conversion == 'F') - { - /* Convert the %f result to upper case for %F. */ - DCHAR_T *rp = result + length; - size_t rc; - for (rc = count; rc > 0; rc--, rp++) - if (*rp >= 'a' && *rp <= 'z') - *rp = *rp - 'a' + 'A'; - } -#endif - - length += count; - break; - } - errno = orig_errno; -#undef pad_ourselves -#undef prec_ourselves - } - } - } - - /* Add the final NUL. */ - ENSURE_ALLOCATION (xsum (length, 1)); - result[length] = '\0'; - - if (result != resultbuf && length + 1 < allocated) - { - /* Shrink the allocated memory if possible. */ - DCHAR_T *memory; - - memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T)); - if (memory != NULL) - result = memory; - } - - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - *lengthp = length; - /* Note that we can produce a big string of a length > INT_MAX. POSIX - says that snprintf() fails with errno = EOVERFLOW in this case, but - that's only because snprintf() returns an 'int'. This function does - not have this limitation. */ - return result; - -#if USE_SNPRINTF - overflow: - errno = EOVERFLOW; - goto fail_with_errno; -#endif - - out_of_memory: - errno = ENOMEM; - goto fail_with_errno; - -#if ENABLE_UNISTDIO || ((!USE_SNPRINTF || WIDE_CHAR_VERSION || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_DIRECTIVE_LS || ENABLE_WCHAR_FALLBACK) && HAVE_WCHAR_T) || ((NEED_PRINTF_DIRECTIVE_LC || ENABLE_WCHAR_FALLBACK) && HAVE_WINT_T && !WIDE_CHAR_VERSION) || (NEED_WPRINTF_DIRECTIVE_C && WIDE_CHAR_VERSION) - fail_with_EILSEQ: - errno = EILSEQ; - goto fail_with_errno; -#endif - - fail_with_errno: - if (result != resultbuf) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - return NULL; - } - - out_of_memory_1: - errno = ENOMEM; - goto fail_1_with_errno; - - fail_1_with_EINVAL: - errno = EINVAL; - goto fail_1_with_errno; - - fail_1_with_errno: - CLEANUP (); - return NULL; -} - -#undef MAX_ROOM_NEEDED -#undef TCHARS_PER_DCHAR -#undef SNPRINTF -#undef USE_SNPRINTF -#undef DCHAR_SET -#undef DCHAR_CPY -#undef PRINTF_PARSE -#undef DIRECTIVES -#undef DIRECTIVE -#undef DCHAR_IS_TCHAR -#undef TCHAR_T -#undef DCHAR_T -#undef FCHAR_T -#undef VASNPRINTF diff --git a/lib/vasnprintf.h b/lib/vasnprintf.h deleted file mode 100644 index 2d134070796..00000000000 --- a/lib/vasnprintf.h +++ /dev/null @@ -1,77 +0,0 @@ -/* vsprintf with automatic memory allocation. - Copyright (C) 2002-2004, 2007-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifndef _VASNPRINTF_H -#define _VASNPRINTF_H - -/* This file uses _GL_ATTRIBUTE_FORMAT. */ -#if !_GL_CONFIG_H_INCLUDED - #error "Please include config.h first." -#endif - -/* Get va_list. */ -#include - -/* Get size_t. */ -#include - -/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Write formatted output to a string dynamically allocated with malloc(). - You can pass a preallocated buffer for the result in RESULTBUF and its - size in *LENGTHP; otherwise you pass RESULTBUF = NULL. - If successful, return the address of the string (this may be = RESULTBUF - if no dynamic memory allocation was necessary) and set *LENGTHP to the - number of resulting bytes, excluding the trailing NUL. Upon error, set - errno and return NULL. - - When dynamic memory allocation occurs, the preallocated buffer is left - alone (with possibly modified contents). This makes it possible to use - a statically allocated or stack-allocated buffer, like this: - - char buf[100]; - size_t len = sizeof (buf); - char *output = vasnprintf (buf, &len, format, args); - if (output == NULL) - ... error handling ...; - else - { - ... use the output string ...; - if (output != buf) - free (output); - } - */ -#if REPLACE_VASNPRINTF -# define asnprintf rpl_asnprintf -# define vasnprintf rpl_vasnprintf -#endif -extern char * asnprintf (char *restrict resultbuf, size_t *lengthp, - const char *format, ...) - _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 4)); -extern char * vasnprintf (char *restrict resultbuf, size_t *lengthp, - const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 0)); - -#ifdef __cplusplus -} -#endif - -#endif /* _VASNPRINTF_H */ diff --git a/lib/vasprintf.c b/lib/vasprintf.c deleted file mode 100644 index d2878cd91d8..00000000000 --- a/lib/vasprintf.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Formatted output to strings. - Copyright (C) 1999, 2002, 2006-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#ifdef IN_LIBASPRINTF -# include "vasprintf.h" -#else -# include -#endif - -#include -#include -#include - -#include "vasnprintf.h" - -int -vasprintf (char **resultp, const char *format, va_list args) -{ - size_t length; - char *result = vasnprintf (NULL, &length, format, args); - if (result == NULL) - return -1; - - if (length > INT_MAX) - { - free (result); - errno = EOVERFLOW; - return -1; - } - - *resultp = result; - /* Return the number of resulting bytes, excluding the trailing NUL. */ - return length; -} diff --git a/lib/vfprintf.c b/lib/vfprintf.c deleted file mode 100644 index 01d79a2beca..00000000000 --- a/lib/vfprintf.c +++ /dev/null @@ -1,70 +0,0 @@ -/* Formatted output to a stream. - Copyright (C) 2004, 2006-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -/* Specification. */ -#include - -#include -#include -#include -#include - -#include "fseterr.h" -#include "vasnprintf.h" - -/* Print formatted output to the stream FP. - Return string length of formatted string. On error, return a negative - value. */ -int -vfprintf (FILE *fp, const char *format, va_list args) -{ - char buf[2000]; - char *output; - size_t len; - size_t lenbuf = sizeof (buf); - - output = vasnprintf (buf, &lenbuf, format, args); - len = lenbuf; - - if (!output) - { - fseterr (fp); - return -1; - } - - if (fwrite (output, 1, len, fp) < len) - { - if (output != buf) - free (output); - return -1; - } - - if (output != buf) - free (output); - - if (len > INT_MAX) - { - errno = EOVERFLOW; - fseterr (fp); - return -1; - } - - return len; -} diff --git a/lib/xsize.c b/lib/xsize.c deleted file mode 100644 index 279ae824f87..00000000000 --- a/lib/xsize.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Checked size_t computations. - - Copyright (C) 2012-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -#define XSIZE_INLINE _GL_EXTERN_INLINE -#include "xsize.h" diff --git a/lib/xsize.h b/lib/xsize.h deleted file mode 100644 index 5b08d61f2f7..00000000000 --- a/lib/xsize.h +++ /dev/null @@ -1,110 +0,0 @@ -/* xsize.h -- Checked size_t computations. - - Copyright (C) 2003, 2008-2023 Free Software Foundation, Inc. - - This file is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This file 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifndef _XSIZE_H -#define _XSIZE_H - -/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, HAVE_STDINT_H. */ -#if !_GL_CONFIG_H_INCLUDED - #error "Please include config.h first." -#endif - -/* Get size_t. */ -#include - -/* Get SIZE_MAX. */ -#include -#if HAVE_STDINT_H -# include -#endif - -/* Get ATTRIBUTE_PURE. */ -#include "attribute.h" - -_GL_INLINE_HEADER_BEGIN -#ifndef XSIZE_INLINE -# define XSIZE_INLINE _GL_INLINE -#endif - -/* The size of memory objects is often computed through expressions of - type size_t. Example: - void* p = malloc (header_size + n * element_size). - These computations can lead to overflow. When this happens, malloc() - returns a piece of memory that is way too small, and the program then - crashes while attempting to fill the memory. - To avoid this, the functions and macros in this file check for overflow. - The convention is that SIZE_MAX represents overflow. - malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc - implementation that uses mmap --, it's recommended to use size_overflow_p() - or size_in_bounds_p() before invoking malloc(). - The example thus becomes: - size_t size = xsum (header_size, xtimes (n, element_size)); - void *p = (size_in_bounds_p (size) ? malloc (size) : NULL); -*/ - -/* Convert an arbitrary value >= 0 to type size_t. */ -#define xcast_size_t(N) \ - ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) - -/* Sum of two sizes, with overflow check. */ -XSIZE_INLINE size_t ATTRIBUTE_PURE -xsum (size_t size1, size_t size2) -{ - size_t sum = size1 + size2; - return (sum >= size1 ? sum : SIZE_MAX); -} - -/* Sum of three sizes, with overflow check. */ -XSIZE_INLINE size_t ATTRIBUTE_PURE -xsum3 (size_t size1, size_t size2, size_t size3) -{ - return xsum (xsum (size1, size2), size3); -} - -/* Sum of four sizes, with overflow check. */ -XSIZE_INLINE size_t ATTRIBUTE_PURE -xsum4 (size_t size1, size_t size2, size_t size3, size_t size4) -{ - return xsum (xsum (xsum (size1, size2), size3), size4); -} - -/* Maximum of two sizes, with overflow check. */ -XSIZE_INLINE size_t ATTRIBUTE_PURE -xmax (size_t size1, size_t size2) -{ - /* No explicit check is needed here, because for any n: - max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */ - return (size1 >= size2 ? size1 : size2); -} - -/* Multiplication of a count with an element size, with overflow check. - The count must be >= 0 and the element size must be > 0. - This is a macro, not a function, so that it works correctly even - when N is of a wider type and N > SIZE_MAX. */ -#define xtimes(N, ELSIZE) \ - ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) - -/* Check for overflow. */ -#define size_overflow_p(SIZE) \ - ((SIZE) == SIZE_MAX) -/* Check against overflow. */ -#define size_in_bounds_p(SIZE) \ - ((SIZE) != SIZE_MAX) - -_GL_INLINE_HEADER_END - -#endif /* _XSIZE_H */ diff --git a/m4/asm-underscore.m4 b/m4/asm-underscore.m4 deleted file mode 100644 index 65ae55a75fd..00000000000 --- a/m4/asm-underscore.m4 +++ /dev/null @@ -1,83 +0,0 @@ -# asm-underscore.m4 serial 5 -dnl Copyright (C) 2010-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. Based on as-underscore.m4 in GNU clisp. - -# gl_ASM_SYMBOL_PREFIX -# Tests for the prefix of C symbols at the assembly language level and the -# linker level. This prefix is either an underscore or empty. Defines the -# C macro USER_LABEL_PREFIX to this prefix, and sets ASM_SYMBOL_PREFIX to -# a stringified variant of this prefix. - -AC_DEFUN([gl_ASM_SYMBOL_PREFIX], -[ - AC_REQUIRE([AC_PROG_EGREP]) - dnl We don't use GCC's __USER_LABEL_PREFIX__ here, because - dnl 1. It works only for GCC. - dnl 2. It is incorrectly defined on some platforms, in some GCC versions. - AC_REQUIRE([gl_C_ASM]) - AC_CACHE_CHECK( - [whether C symbols are prefixed with underscore at the linker level], - [gl_cv_prog_as_underscore], - [cat > conftest.c </dev/null 2>&1 - if LC_ALL=C $EGREP '(^|[[^a-zA-Z0-9_]])_foo([[^a-zA-Z0-9_]]|$)' conftest.$gl_asmext >/dev/null; then - gl_cv_prog_as_underscore=yes - else - gl_cv_prog_as_underscore=no - fi - rm -f conftest* - ]) - if test $gl_cv_prog_as_underscore = yes; then - USER_LABEL_PREFIX=_ - else - USER_LABEL_PREFIX= - fi - AC_DEFINE_UNQUOTED([USER_LABEL_PREFIX], [$USER_LABEL_PREFIX], - [Define to the prefix of C symbols at the assembler and linker level, - either an underscore or empty.]) - ASM_SYMBOL_PREFIX='"'${USER_LABEL_PREFIX}'"' - AC_SUBST([ASM_SYMBOL_PREFIX]) -]) - -# gl_C_ASM -# Determines how to produce an assembly language file from C source code. -# Sets the variables: -# gl_asmext - the extension of assembly language output, -# gl_c_asm_opt - the C compiler option that produces assembly language output. - -AC_DEFUN([gl_C_ASM], -[ - AC_EGREP_CPP([MicrosoftCompiler], - [ -#ifdef _MSC_VER -MicrosoftCompiler -#endif - ], - [dnl Microsoft's 'cl' and 'clang-cl' produce an .asm file, whereas 'clang' - dnl produces a .s file. Need to distinguish 'clang' and 'clang-cl'. - rm -f conftest* - echo 'int dummy;' > conftest.c - AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c) >/dev/null 2>&1 - if test -f conftest.o; then - gl_asmext='s' - gl_c_asm_opt='-S' - else - gl_asmext='asm' - gl_c_asm_opt='-c -Fa' - fi - rm -f conftest* - ], - [gl_asmext='s' - gl_c_asm_opt='-S' - ]) -]) diff --git a/m4/exponentd.m4 b/m4/exponentd.m4 deleted file mode 100644 index 163114b89ec..00000000000 --- a/m4/exponentd.m4 +++ /dev/null @@ -1,116 +0,0 @@ -# exponentd.m4 serial 4 -dnl Copyright (C) 2007-2008, 2010-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -AC_DEFUN_ONCE([gl_DOUBLE_EXPONENT_LOCATION], -[ - AC_CACHE_CHECK([where to find the exponent in a 'double'], - [gl_cv_cc_double_expbit0], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -#include -#define NWORDS \ - ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -typedef union { double value; unsigned int word[NWORDS]; } memory_double; -static unsigned int ored_words[NWORDS]; -static unsigned int anded_words[NWORDS]; -static void add_to_ored_words (double x) -{ - memory_double m; - size_t i; - /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ - memset (&m, 0, sizeof (memory_double)); - m.value = x; - for (i = 0; i < NWORDS; i++) - { - ored_words[i] |= m.word[i]; - anded_words[i] &= m.word[i]; - } -} -int main () -{ - size_t j; - FILE *fp = fopen ("conftest.out", "w"); - if (fp == NULL) - return 1; - for (j = 0; j < NWORDS; j++) - anded_words[j] = ~ (unsigned int) 0; - add_to_ored_words (0.25); - add_to_ored_words (0.5); - add_to_ored_words (1.0); - add_to_ored_words (2.0); - add_to_ored_words (4.0); - /* Remove bits that are common (e.g. if representation of the first mantissa - bit is explicit). */ - for (j = 0; j < NWORDS; j++) - ored_words[j] &= ~anded_words[j]; - /* Now find the nonzero word. */ - for (j = 0; j < NWORDS; j++) - if (ored_words[j] != 0) - break; - if (j < NWORDS) - { - size_t i; - for (i = j + 1; i < NWORDS; i++) - if (ored_words[i] != 0) - { - fprintf (fp, "unknown"); - return (fclose (fp) != 0); - } - for (i = 0; ; i++) - if ((ored_words[j] >> i) & 1) - { - fprintf (fp, "word %d bit %d", (int) j, (int) i); - return (fclose (fp) != 0); - } - } - fprintf (fp, "unknown"); - return (fclose (fp) != 0); -} - ]])], - [gl_cv_cc_double_expbit0=`cat conftest.out`], - [gl_cv_cc_double_expbit0="unknown"], - [ - dnl On ARM, there are two 'double' floating-point formats, used by - dnl different sets of instructions: The older FPA instructions assume - dnl that they are stored in big-endian word order, while the words - dnl (like integer types) are stored in little-endian byte order. - dnl The newer VFP instructions assume little-endian order - dnl consistently. - AC_EGREP_CPP([mixed_endianness], [ -#if defined arm || defined __arm || defined __arm__ - mixed_endianness -#endif - ], - [gl_cv_cc_double_expbit0="unknown"], - [ - pushdef([AC_MSG_CHECKING],[:])dnl - pushdef([AC_MSG_RESULT],[:])dnl - pushdef([AC_MSG_RESULT_UNQUOTED],[:])dnl - AC_C_BIGENDIAN( - [gl_cv_cc_double_expbit0="word 0 bit 20"], - [gl_cv_cc_double_expbit0="word 1 bit 20"], - [gl_cv_cc_double_expbit0="unknown"]) - popdef([AC_MSG_RESULT_UNQUOTED])dnl - popdef([AC_MSG_RESULT])dnl - popdef([AC_MSG_CHECKING])dnl - ]) - ]) - rm -f conftest.out - ]) - case "$gl_cv_cc_double_expbit0" in - word*bit*) - word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` - bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` - AC_DEFINE_UNQUOTED([DBL_EXPBIT0_WORD], [$word], - [Define as the word index where to find the exponent of 'double'.]) - AC_DEFINE_UNQUOTED([DBL_EXPBIT0_BIT], [$bit], - [Define as the bit index in the word where to find bit 0 of the exponent of 'double'.]) - ;; - esac -]) diff --git a/m4/exponentf.m4 b/m4/exponentf.m4 deleted file mode 100644 index e761883939b..00000000000 --- a/m4/exponentf.m4 +++ /dev/null @@ -1,92 +0,0 @@ -# exponentf.m4 serial 3 -dnl Copyright (C) 2007-2008, 2010-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -AC_DEFUN_ONCE([gl_FLOAT_EXPONENT_LOCATION], -[ - AC_CACHE_CHECK([where to find the exponent in a 'float'], - [gl_cv_cc_float_expbit0], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -#include -#define NWORDS \ - ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -typedef union { float value; unsigned int word[NWORDS]; } memory_float; -static unsigned int ored_words[NWORDS]; -static unsigned int anded_words[NWORDS]; -static void add_to_ored_words (float x) -{ - memory_float m; - size_t i; - /* Clear it first, in case - sizeof (float) < sizeof (memory_float). */ - memset (&m, 0, sizeof (memory_float)); - m.value = x; - for (i = 0; i < NWORDS; i++) - { - ored_words[i] |= m.word[i]; - anded_words[i] &= m.word[i]; - } -} -int main () -{ - size_t j; - FILE *fp = fopen ("conftest.out", "w"); - if (fp == NULL) - return 1; - for (j = 0; j < NWORDS; j++) - anded_words[j] = ~ (unsigned int) 0; - add_to_ored_words (0.25f); - add_to_ored_words (0.5f); - add_to_ored_words (1.0f); - add_to_ored_words (2.0f); - add_to_ored_words (4.0f); - /* Remove bits that are common (e.g. if representation of the first mantissa - bit is explicit). */ - for (j = 0; j < NWORDS; j++) - ored_words[j] &= ~anded_words[j]; - /* Now find the nonzero word. */ - for (j = 0; j < NWORDS; j++) - if (ored_words[j] != 0) - break; - if (j < NWORDS) - { - size_t i; - for (i = j + 1; i < NWORDS; i++) - if (ored_words[i] != 0) - { - fprintf (fp, "unknown"); - return (fclose (fp) != 0); - } - for (i = 0; ; i++) - if ((ored_words[j] >> i) & 1) - { - fprintf (fp, "word %d bit %d", (int) j, (int) i); - return (fclose (fp) != 0); - } - } - fprintf (fp, "unknown"); - return (fclose (fp) != 0); -} - ]])], - [gl_cv_cc_float_expbit0=`cat conftest.out`], - [gl_cv_cc_float_expbit0="unknown"], - [gl_cv_cc_float_expbit0="word 0 bit 23"]) - rm -f conftest.out - ]) - case "$gl_cv_cc_float_expbit0" in - word*bit*) - word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` - bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` - AC_DEFINE_UNQUOTED([FLT_EXPBIT0_WORD], [$word], - [Define as the word index where to find the exponent of 'float'.]) - AC_DEFINE_UNQUOTED([FLT_EXPBIT0_BIT], [$bit], - [Define as the bit index in the word where to find bit 0 of the exponent of 'float'.]) - ;; - esac -]) diff --git a/m4/exponentl.m4 b/m4/exponentl.m4 deleted file mode 100644 index bc5638737e5..00000000000 --- a/m4/exponentl.m4 +++ /dev/null @@ -1,112 +0,0 @@ -# exponentl.m4 serial 6 -dnl Copyright (C) 2007-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -AC_DEFUN_ONCE([gl_LONG_DOUBLE_EXPONENT_LOCATION], -[ - AC_REQUIRE([gl_BIGENDIAN]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([where to find the exponent in a 'long double'], - [gl_cv_cc_long_double_expbit0], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -#include -#define NWORDS \ - ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -typedef union { long double value; unsigned int word[NWORDS]; } - memory_long_double; -static unsigned int ored_words[NWORDS]; -static unsigned int anded_words[NWORDS]; -static void add_to_ored_words (long double *x) -{ - memory_long_double m; - size_t i; - /* Clear it first, in case - sizeof (long double) < sizeof (memory_long_double). */ - memset (&m, 0, sizeof (memory_long_double)); - m.value = *x; - for (i = 0; i < NWORDS; i++) - { - ored_words[i] |= m.word[i]; - anded_words[i] &= m.word[i]; - } -} -int main () -{ - static long double samples[5] = { 0.25L, 0.5L, 1.0L, 2.0L, 4.0L }; - size_t j; - FILE *fp = fopen ("conftest.out", "w"); - if (fp == NULL) - return 1; - for (j = 0; j < NWORDS; j++) - anded_words[j] = ~ (unsigned int) 0; - for (j = 0; j < 5; j++) - add_to_ored_words (&samples[j]); - /* Remove bits that are common (e.g. if representation of the first mantissa - bit is explicit). */ - for (j = 0; j < NWORDS; j++) - ored_words[j] &= ~anded_words[j]; - /* Now find the nonzero word. */ - for (j = 0; j < NWORDS; j++) - if (ored_words[j] != 0) - break; - if (j < NWORDS) - { - size_t i; - for (i = j + 1; i < NWORDS; i++) - if (ored_words[i] != 0) - { - fprintf (fp, "unknown"); - return (fclose (fp) != 0); - } - for (i = 0; ; i++) - if ((ored_words[j] >> i) & 1) - { - fprintf (fp, "word %d bit %d", (int) j, (int) i); - return (fclose (fp) != 0); - } - } - fprintf (fp, "unknown"); - return (fclose (fp) != 0); -} - ]])], - [gl_cv_cc_long_double_expbit0=`cat conftest.out`], - [gl_cv_cc_long_double_expbit0="unknown"], - [ - dnl When cross-compiling, in general we don't know. It depends on the - dnl ABI and compiler version. There are too many cases. - gl_cv_cc_long_double_expbit0="unknown" - case "$host_os" in - mingw*) # On native Windows (little-endian), we know the result - # in two cases: mingw, MSVC. - AC_EGREP_CPP([Known], [ -#ifdef __MINGW32__ - Known -#endif - ], [gl_cv_cc_long_double_expbit0="word 2 bit 0"]) - AC_EGREP_CPP([Known], [ -#ifdef _MSC_VER - Known -#endif - ], [gl_cv_cc_long_double_expbit0="word 1 bit 20"]) - ;; - esac - ]) - rm -f conftest.out - ]) - case "$gl_cv_cc_long_double_expbit0" in - word*bit*) - word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` - bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'` - AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_WORD], [$word], - [Define as the word index where to find the exponent of 'long double'.]) - AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_BIT], [$bit], - [Define as the bit index in the word where to find bit 0 of the exponent of 'long double'.]) - ;; - esac -]) diff --git a/m4/float_h.m4 b/m4/float_h.m4 deleted file mode 100644 index 2f0c9c4ee9c..00000000000 --- a/m4/float_h.m4 +++ /dev/null @@ -1,106 +0,0 @@ -# float_h.m4 serial 13 -dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FLOAT_H], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) - GL_GENERATE_FLOAT_H=false - REPLACE_FLOAT_LDBL=0 - case "$host_os" in - aix* | beos* | openbsd* | mirbsd* | irix*) - GL_GENERATE_FLOAT_H=true - ;; - freebsd* | dragonfly*) - case "$host_cpu" in -changequote(,)dnl - i[34567]86 ) -changequote([,])dnl - GL_GENERATE_FLOAT_H=true - ;; - x86_64 ) - # On x86_64 systems, the C compiler may still be generating - # 32-bit code. - AC_COMPILE_IFELSE( - [AC_LANG_SOURCE( - [[#if defined __LP64__ || defined __x86_64__ || defined __amd64__ - int ok; - #else - error fail - #endif - ]])], - [], - [GL_GENERATE_FLOAT_H=true]) - ;; - esac - ;; - linux*) - case "$host_cpu" in - powerpc*) - GL_GENERATE_FLOAT_H=true - ;; - esac - ;; - esac - case "$host_os" in - aix* | freebsd* | dragonfly* | linux*) - if $GL_GENERATE_FLOAT_H; then - REPLACE_FLOAT_LDBL=1 - fi - ;; - esac - - dnl Test against glibc-2.7 Linux/SPARC64 bug. - REPLACE_ITOLD=0 - AC_CACHE_CHECK([whether conversion from 'int' to 'long double' works], - [gl_cv_func_itold_works], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -int i = -1; -volatile long double ld; -int main () -{ - ld += i * 1.0L; - if (ld > 0) - return 1; - return 0; -}]])], - [gl_cv_func_itold_works=yes], - [gl_cv_func_itold_works=no], - [case "$host" in - sparc*-*-linux*) - AC_COMPILE_IFELSE( - [AC_LANG_SOURCE( - [[#if defined __LP64__ || defined __arch64__ - int ok; - #else - error fail - #endif - ]])], - [gl_cv_func_itold_works="guessing no"], - [gl_cv_func_itold_works="guessing yes"]) - ;; - # Guess yes on native Windows. - mingw*) gl_cv_func_itold_works="guessing yes" ;; - *) gl_cv_func_itold_works="guessing yes" ;; - esac - ]) - ]) - case "$gl_cv_func_itold_works" in - *no) - REPLACE_ITOLD=1 - dnl We add the workaround to but also to , - dnl to increase the chances that the fix function gets pulled in. - GL_GENERATE_FLOAT_H=true - ;; - esac - - if $GL_GENERATE_FLOAT_H; then - gl_NEXT_HEADERS([float.h]) - fi - AC_SUBST([REPLACE_ITOLD]) -]) diff --git a/m4/frexp.m4 b/m4/frexp.m4 deleted file mode 100644 index 0480d98f304..00000000000 --- a/m4/frexp.m4 +++ /dev/null @@ -1,181 +0,0 @@ -# frexp.m4 serial 16 -dnl Copyright (C) 2007-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_FREXP], -[ - AC_REQUIRE([gl_MATH_H_DEFAULTS]) - AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM]) - FREXP_LIBM= - if test $gl_cv_func_frexp_no_libm = no; then - AC_CACHE_CHECK([whether frexp() can be used with libm], - [gl_cv_func_frexp_in_libm], - [ - save_LIBS="$LIBS" - LIBS="$LIBS -lm" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include - double x;]], - [[int e; return frexp (x, &e) > 0;]])], - [gl_cv_func_frexp_in_libm=yes], - [gl_cv_func_frexp_in_libm=no]) - LIBS="$save_LIBS" - ]) - if test $gl_cv_func_frexp_in_libm = yes; then - FREXP_LIBM=-lm - fi - fi - if test $gl_cv_func_frexp_no_libm = yes \ - || test $gl_cv_func_frexp_in_libm = yes; then - save_LIBS="$LIBS" - LIBS="$LIBS $FREXP_LIBM" - gl_FUNC_FREXP_WORKS - LIBS="$save_LIBS" - case "$gl_cv_func_frexp_works" in - *yes) gl_func_frexp=yes ;; - *) gl_func_frexp=no; REPLACE_FREXP=1; FREXP_LIBM= ;; - esac - else - gl_func_frexp=no - fi - if test $gl_func_frexp = yes; then - AC_DEFINE([HAVE_FREXP], [1], - [Define if the frexp() function is available and works.]) - fi - AC_SUBST([FREXP_LIBM]) -]) - -AC_DEFUN([gl_FUNC_FREXP_NO_LIBM], -[ - AC_REQUIRE([gl_MATH_H_DEFAULTS]) - AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM]) - if test $gl_cv_func_frexp_no_libm = yes; then - gl_FUNC_FREXP_WORKS - case "$gl_cv_func_frexp_works" in - *yes) gl_func_frexp_no_libm=yes ;; - *) gl_func_frexp_no_libm=no; REPLACE_FREXP=1 ;; - esac - else - gl_func_frexp_no_libm=no - dnl Set REPLACE_FREXP here because the system may have frexp in libm. - REPLACE_FREXP=1 - fi - if test $gl_func_frexp_no_libm = yes; then - AC_DEFINE([HAVE_FREXP_IN_LIBC], [1], - [Define if the frexp() function is available in libc.]) - fi -]) - -dnl Test whether frexp() can be used without linking with libm. -dnl Set gl_cv_func_frexp_no_libm to 'yes' or 'no' accordingly. -AC_DEFUN([gl_CHECK_FREXP_NO_LIBM], -[ - AC_CACHE_CHECK([whether frexp() can be used without linking with libm], - [gl_cv_func_frexp_no_libm], - [ - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include - double x;]], - [[int e; return frexp (x, &e) > 0;]])], - [gl_cv_func_frexp_no_libm=yes], - [gl_cv_func_frexp_no_libm=no]) - ]) -]) - -dnl Test whether frexp() works also on denormalized numbers (this fails e.g. on -dnl NetBSD 3.0), on infinite numbers (this fails e.g. on IRIX 6.5 and mingw), -dnl and on negative zero (this fails e.g. on NetBSD 4.99 and mingw). -AC_DEFUN([gl_FUNC_FREXP_WORKS], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CHECK_DECLS_ONCE([alarm]) - AC_CACHE_CHECK([whether frexp works], [gl_cv_func_frexp_works], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -#if HAVE_DECL_ALARM -# include -# include -#endif -/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. - ICC 10.0 has a bug when optimizing the expression -zero. - The expression -DBL_MIN * DBL_MIN does not work when cross-compiling - to PowerPC on Mac OS X 10.5. */ -#if defined __hpux || defined __sgi || defined __ICC -static double -compute_minus_zero (void) -{ - return -DBL_MIN * DBL_MIN; -} -# define minus_zero compute_minus_zero () -#else -double minus_zero = -0.0; -#endif -int main() -{ - int result = 0; - int i; - volatile double x; - double zero = 0.0; -#if HAVE_DECL_ALARM - /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite - number. Let the test fail in this case. */ - signal (SIGALRM, SIG_DFL); - alarm (5); -#endif - /* Test on denormalized numbers. */ - for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) - ; - if (x > 0.0) - { - int exp; - double y = frexp (x, &exp); - /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022. - On NetBSD: y = 0.75. Correct: y = 0.5. */ - if (y != 0.5) - result |= 1; - } - /* Test on infinite numbers. */ - x = 1.0 / zero; - { - int exp; - double y = frexp (x, &exp); - if (y != x) - result |= 2; - } - /* Test on negative zero. */ - x = minus_zero; - { - int exp; - double y = frexp (x, &exp); - if (memcmp (&y, &x, sizeof x)) - result |= 4; - } - return result; -}]])], - [gl_cv_func_frexp_works=yes], - [gl_cv_func_frexp_works=no], - [case "$host_os" in - netbsd* | irix*) gl_cv_func_frexp_works="guessing no" ;; - mingw*) # Guess yes with MSVC, no with mingw. - AC_EGREP_CPP([Good], [ -#ifdef _MSC_VER - Good -#endif - ], - [gl_cv_func_frexp_works="guessing yes"], - [gl_cv_func_frexp_works="guessing no"]) - ;; - *) gl_cv_func_frexp_works="guessing yes" ;; - esac - ]) - ]) -]) diff --git a/m4/frexpl.m4 b/m4/frexpl.m4 deleted file mode 100644 index b4cf0ca9ea1..00000000000 --- a/m4/frexpl.m4 +++ /dev/null @@ -1,233 +0,0 @@ -# frexpl.m4 serial 22 -dnl Copyright (C) 2007-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_FREXPL], -[ - AC_REQUIRE([gl_MATH_H_DEFAULTS]) - AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) - - dnl Persuade glibc to declare frexpl(). - AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - - dnl Check whether it's declared. - dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in . - AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include ]]) - - FREXPL_LIBM= - if test $HAVE_DECL_FREXPL = 1; then - gl_CHECK_FREXPL_NO_LIBM - if test $gl_cv_func_frexpl_no_libm = no; then - AC_CACHE_CHECK([whether frexpl() can be used with libm], - [gl_cv_func_frexpl_in_libm], - [ - save_LIBS="$LIBS" - LIBS="$LIBS -lm" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include - long double x;]], - [[int e; return frexpl (x, &e) > 0;]])], - [gl_cv_func_frexpl_in_libm=yes], - [gl_cv_func_frexpl_in_libm=no]) - LIBS="$save_LIBS" - ]) - if test $gl_cv_func_frexpl_in_libm = yes; then - FREXPL_LIBM=-lm - fi - fi - if test $gl_cv_func_frexpl_no_libm = yes \ - || test $gl_cv_func_frexpl_in_libm = yes; then - save_LIBS="$LIBS" - LIBS="$LIBS $FREXPL_LIBM" - gl_FUNC_FREXPL_WORKS - LIBS="$save_LIBS" - case "$gl_cv_func_frexpl_works" in - *yes) gl_func_frexpl=yes ;; - *) gl_func_frexpl=no; REPLACE_FREXPL=1 ;; - esac - else - gl_func_frexpl=no - fi - if test $gl_func_frexpl = yes; then - AC_DEFINE([HAVE_FREXPL], [1], - [Define if the frexpl() function is available.]) - fi - fi - if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl = no; then - dnl Find libraries needed to link lib/frexpl.c. - if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then - AC_REQUIRE([gl_FUNC_FREXP]) - FREXPL_LIBM="$FREXP_LIBM" - else - FREXPL_LIBM= - fi - fi - AC_SUBST([FREXPL_LIBM]) -]) - -AC_DEFUN([gl_FUNC_FREXPL_NO_LIBM], -[ - AC_REQUIRE([gl_MATH_H_DEFAULTS]) - AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) - dnl Check whether it's declared. - dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in . - AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include ]]) - if test $HAVE_DECL_FREXPL = 1; then - gl_CHECK_FREXPL_NO_LIBM - if test $gl_cv_func_frexpl_no_libm = yes; then - gl_FUNC_FREXPL_WORKS - case "$gl_cv_func_frexpl_works" in - *yes) gl_func_frexpl_no_libm=yes ;; - *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; - esac - else - gl_func_frexpl_no_libm=no - dnl Set REPLACE_FREXPL here because the system may have frexpl in libm. - REPLACE_FREXPL=1 - fi - if test $gl_func_frexpl_no_libm = yes; then - AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1], - [Define if the frexpl() function is available in libc.]) - fi - fi -]) - -dnl Test whether frexpl() can be used without linking with libm. -dnl Set gl_cv_func_frexpl_no_libm to 'yes' or 'no' accordingly. -AC_DEFUN([gl_CHECK_FREXPL_NO_LIBM], -[ - AC_CACHE_CHECK([whether frexpl() can be used without linking with libm], - [gl_cv_func_frexpl_no_libm], - [ - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include - long double x;]], - [[int e; return frexpl (x, &e) > 0;]])], - [gl_cv_func_frexpl_no_libm=yes], - [gl_cv_func_frexpl_no_libm=no]) - ]) -]) - -dnl Test whether frexpl() works on finite numbers (this fails on -dnl Mac OS X 10.4/PowerPC, on AIX 5.1, and on BeOS), on denormalized numbers -dnl (this fails on Mac OS X 10.5/i386), and also on infinite numbers (this -dnl fails e.g. on IRIX 6.5 and mingw). -AC_DEFUN([gl_FUNC_FREXPL_WORKS], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether frexpl works], [gl_cv_func_frexpl_works], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -/* Override the values of , like done in float.in.h. */ -#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP (-16381) -#endif -#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP (-16381) -#endif -#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP DBL_MIN_EXP -#endif -#if defined __sgi && (LDBL_MANT_DIG >= 106) -# if defined __GNUC__ -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP DBL_MIN_EXP -# endif -#endif -extern -#ifdef __cplusplus -"C" -#endif -long double frexpl (long double, int *); -long double zero = 0.0L; -int main() -{ - int result = 0; - volatile long double x; - /* Test on finite numbers that fails on AIX 5.1. */ - x = 16.0L; - { - int exp = -9999; - frexpl (x, &exp); - if (exp != 5) - result |= 1; - } - /* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl - function returns an invalid (incorrectly normalized) value: it returns - y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 } - but the correct result is - 0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */ - x = 1.01L; - { - int exp = -9999; - long double y = frexpl (x, &exp); - if (!(exp == 1 && y == 0.505L)) - result |= 2; - } - /* Test on large finite numbers. This fails on BeOS at i = 16322, while - LDBL_MAX_EXP = 16384. - In the loop end test, we test x against Infinity, rather than comparing - i with LDBL_MAX_EXP, because BeOS has a wrong LDBL_MAX_EXP. */ - { - int i; - for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L) - { - int exp = -9999; - frexpl (x, &exp); - if (exp != i) - { - result |= 4; - break; - } - } - } - /* Test on denormalized numbers. */ - { - int i; - for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L) - ; - if (x > 0.0L) - { - int exp; - long double y = frexpl (x, &exp); - /* On machines with IEEE854 arithmetic: x = 1.68105e-4932, - exp = -16382, y = 0.5. On Mac OS X 10.5: exp = -16384, y = 0.5. */ - if (exp != LDBL_MIN_EXP - 1) - result |= 8; - } - } - /* Test on infinite numbers. */ - /* The Microsoft MSVC 14 compiler chokes on the expression 1.0 / 0.0. */ - x = 1.0L / zero; - { - int exp; - long double y = frexpl (x, &exp); - if (y != x) - result |= 16; - } - return result; -}]])], - [gl_cv_func_frexpl_works=yes], - [gl_cv_func_frexpl_works=no], - [ -changequote(,)dnl - case "$host_os" in - aix | aix[3-6]* | beos* | darwin* | irix* | mingw* | pw*) - gl_cv_func_frexpl_works="guessing no";; - *) gl_cv_func_frexpl_works="guessing yes";; - esac -changequote([,])dnl - ]) - ]) -]) diff --git a/m4/fseterr.m4 b/m4/fseterr.m4 deleted file mode 100644 index 61ac03d49d1..00000000000 --- a/m4/fseterr.m4 +++ /dev/null @@ -1,13 +0,0 @@ -# fseterr.m4 serial 2 -dnl Copyright (C) 2012-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_FSETERR], -[ - gl_CHECK_FUNCS_ANDROID([__fseterr], - [[#include - #include - ]]) -]) diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4 index 4c1e41daf51..72adcf90d5e 100644 --- a/m4/gnulib-comp.m4 +++ b/m4/gnulib-comp.m4 @@ -95,15 +95,10 @@ AC_DEFUN([gl_EARLY], # Code from module filename: # Code from module filevercmp: # Code from module flexmember: - # Code from module float: # Code from module fpending: # Code from module fpieee: AC_REQUIRE([gl_FP_IEEE]) - # Code from module fpucw: # Code from module free-posix: - # Code from module frexp-nolibm: - # Code from module frexpl-nolibm: - # Code from module fseterr: # Code from module fstatat: # Code from module fsusage: # Code from module fsync: @@ -130,9 +125,6 @@ AC_DEFUN([gl_EARLY], # Code from module include_next: # Code from module intprops: # Code from module inttypes-incomplete: - # Code from module isnand-nolibm: - # Code from module isnanf-nolibm: - # Code from module isnanl-nolibm: # Code from module largefile: AC_REQUIRE([AC_SYS_LARGEFILE]) # Code from module lchmod: @@ -143,7 +135,6 @@ AC_DEFUN([gl_EARLY], # Code from module malloc-gnu: # Code from module malloc-posix: # Code from module manywarnings: - # Code from module math: # Code from module memmem-simple: # Code from module mempcpy: # Code from module memrchr: @@ -161,10 +152,6 @@ AC_DEFUN([gl_EARLY], # Code from module openat-h: # Code from module pathmax: # Code from module pipe2: - # Code from module printf-frexp: - # Code from module printf-frexpl: - # Code from module printf-posix: - # Code from module printf-safe: # Code from module pselect: # Code from module pthread_sigmask: # Code from module qcopy-acl: @@ -178,8 +165,6 @@ AC_DEFUN([gl_EARLY], # Code from module sig2str: # Code from module sigdescr_np: # Code from module signal-h: - # Code from module signbit: - # Code from module size_max: # Code from module snippet/_Noreturn: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: @@ -224,15 +209,10 @@ AC_DEFUN([gl_EARLY], # Code from module utimens: # Code from module utimensat: # Code from module vararrays: - # Code from module vasnprintf: - # Code from module vasprintf: - # Code from module vasprintf-posix: # Code from module verify: - # Code from module vfprintf-posix: # Code from module vla: # Code from module warnings: # Code from module xalloc-oversized: - # Code from module xsize: # Code from module year2038: AC_REQUIRE([AC_SYS_YEAR2038]) ]) @@ -342,11 +322,6 @@ AC_DEFUN([gl_INIT], gl_FILE_HAS_ACL gl_FILEMODE AC_C_FLEXIBLE_ARRAY_MEMBER - gl_FLOAT_H - gl_CONDITIONAL_HEADER([float.h]) - AC_PROG_MKDIR_P - gl_CONDITIONAL([GL_COND_OBJ_FLOAT], [test $REPLACE_FLOAT_LDBL = 1]) - gl_CONDITIONAL([GL_COND_OBJ_ITOLD], [test $REPLACE_ITOLD = 1]) gl_FUNC_FPENDING gl_CONDITIONAL([GL_COND_OBJ_FPENDING], [test $gl_cv_func___fpending = no]) gl_FUNC_FREE @@ -355,16 +330,6 @@ AC_DEFUN([gl_INIT], gl_PREREQ_FREE ]) gl_STDLIB_MODULE_INDICATOR([free-posix]) - gl_FUNC_FREXP_NO_LIBM - if test $gl_func_frexp_no_libm != yes; then - AC_LIBOBJ([frexp]) - fi - gl_MATH_MODULE_INDICATOR([frexp]) - gl_FUNC_FREXPL_NO_LIBM - if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl_no_libm = no; then - AC_LIBOBJ([frexpl]) - fi - gl_MATH_MODULE_INDICATOR([frexpl]) gl_FUNC_FSTATAT gl_CONDITIONAL([GL_COND_OBJ_FSTATAT], [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1]) @@ -432,16 +397,6 @@ AC_DEFUN([gl_INIT], gl_INTTYPES_INCOMPLETE gl_INTTYPES_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P - gl_FUNC_ISNAND_NO_LIBM - if test $gl_func_isnand_no_libm != yes; then - AC_LIBOBJ([isnand]) - gl_PREREQ_ISNAND - fi - gl_FUNC_ISNANL_NO_LIBM - if test $gl_func_isnanl_no_libm != yes; then - AC_LIBOBJ([isnanl]) - gl_PREREQ_ISNANL - fi AC_REQUIRE([gl_LARGEFILE]) gl___INLINE gl_LIBGMP @@ -457,9 +412,6 @@ AC_DEFUN([gl_INIT], gl_PREREQ_LSTAT ]) gl_SYS_STAT_MODULE_INDICATOR([lstat]) - gl_MATH_H - gl_MATH_H_REQUIRE_DEFAULTS - AC_PROG_MKDIR_P gl_FUNC_MEMMEM_SIMPLE if test $HAVE_MEMMEM = 0 || test $REPLACE_MEMMEM = 1; then AC_LIBOBJ([memmem]) @@ -509,11 +461,6 @@ AC_DEFUN([gl_INIT], gl_PATHMAX gl_FUNC_PIPE2 gl_UNISTD_MODULE_INDICATOR([pipe2]) - gl_FUNC_PRINTF_FREXP - gl_FUNC_PRINTF_FREXPL - gl_FUNC_PRINTF_POSIX - gl_STDIO_MODULE_INDICATOR([printf-posix]) - m4_divert_text([INIT_PREPARE], [gl_printf_safe=yes]) gl_FUNC_PSELECT gl_CONDITIONAL([GL_COND_OBJ_PSELECT], [test $HAVE_PSELECT = 0 || test $REPLACE_PSELECT = 1]) @@ -560,9 +507,6 @@ AC_DEFUN([gl_INIT], gl_SIGNAL_H gl_SIGNAL_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P - gl_SIGNBIT - gl_CONDITIONAL([GL_COND_OBJ_SIGNBIT3], [test $REPLACE_SIGNBIT = 1]) - gl_MATH_MODULE_INDICATOR([signbit]) gl_TYPE_SOCKLEN_T gt_TYPE_SSIZE_T gl_STAT_TIME @@ -709,18 +653,11 @@ AC_DEFUN([gl_INIT], [test $HAVE_UTIMENSAT = 0 || test $REPLACE_UTIMENSAT = 1]) gl_SYS_STAT_MODULE_INDICATOR([utimensat]) AC_C_VARARRAYS - gl_FUNC_VASPRINTF - gl_STDIO_MODULE_INDICATOR([vasprintf]) - m4_ifdef([AM_XGETTEXT_OPTION], - [AM_][XGETTEXT_OPTION([--flag=asprintf:2:c-format]) - AM_][XGETTEXT_OPTION([--flag=vasprintf:2:c-format])]) - gl_FUNC_VASPRINTF_POSIX gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b=false gl_gnulib_enabled_cloexec=false gl_gnulib_enabled_dirfd=false gl_gnulib_enabled_925677f0343de64b89a9f0c790b4104c=false gl_gnulib_enabled_euidaccess=false - gl_gnulib_enabled_fseterr=false gl_gnulib_enabled_getdelim=false gl_gnulib_enabled_getdtablesize=false gl_gnulib_enabled_getgroups=false @@ -728,7 +665,6 @@ AC_DEFUN([gl_INIT], gl_gnulib_enabled_fd38c7e463b54744b77b98aeafb4fa7c=false gl_gnulib_enabled_8444034ea779b88768865bb60b4fb8c9=false gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1=false - gl_gnulib_enabled_3f0e593033d1fc2c127581960f641b66=false gl_gnulib_enabled_lchmod=false gl_gnulib_enabled_e80bf6f757095d2e5fc94dafb8f8fc8b=false gl_gnulib_enabled_ef455225c00f5049c808c2eda3e76866=false @@ -739,13 +675,9 @@ AC_DEFUN([gl_INIT], gl_gnulib_enabled_d3b2383720ee0e541357aa2aac598e2b=false gl_gnulib_enabled_61bcaca76b3e6f9ae55d57a1c3193bc4=false gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c=false - gl_gnulib_enabled_size_max=false gl_gnulib_enabled_strtoll=false gl_gnulib_enabled_utimens=false - gl_gnulib_enabled_vasnprintf=false - gl_gnulib_enabled_ed5616be3593d355b981ffab56b9f37b=false gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec=false - gl_gnulib_enabled_xsize=false func_gl_gnulib_m4code_260941c0e5dc67ec9e87d1fb321c300b () { if $gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b; then :; else @@ -798,14 +730,6 @@ AC_DEFUN([gl_INIT], func_gl_gnulib_m4code_6099e9737f757db36c47fa9d9f02e88c fi } - func_gl_gnulib_m4code_fseterr () - { - if $gl_gnulib_enabled_fseterr; then :; else - gl_FUNC_FSETERR - gl_CONDITIONAL([GL_COND_OBJ_FSETERR], [test $ac_cv_func___fseterr = no]) - gl_gnulib_enabled_fseterr=true - fi - } func_gl_gnulib_m4code_getdelim () { if $gl_gnulib_enabled_getdelim; then :; else @@ -887,17 +811,6 @@ AC_DEFUN([gl_INIT], fi fi } - func_gl_gnulib_m4code_3f0e593033d1fc2c127581960f641b66 () - { - if $gl_gnulib_enabled_3f0e593033d1fc2c127581960f641b66; then :; else - gl_FUNC_ISNANF_NO_LIBM - if test $gl_func_isnanf_no_libm != yes; then - AC_LIBOBJ([isnanf]) - gl_PREREQ_ISNANF - fi - gl_gnulib_enabled_3f0e593033d1fc2c127581960f641b66=true - fi - } func_gl_gnulib_m4code_lchmod () { if $gl_gnulib_enabled_lchmod; then :; else @@ -1024,13 +937,6 @@ AC_DEFUN([gl_INIT], gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c=true fi } - func_gl_gnulib_m4code_size_max () - { - if $gl_gnulib_enabled_size_max; then :; else - gl_SIZE_MAX - gl_gnulib_enabled_size_max=true - fi - } func_gl_gnulib_m4code_strtoll () { if $gl_gnulib_enabled_strtoll; then :; else @@ -1051,44 +957,12 @@ AC_DEFUN([gl_INIT], gl_gnulib_enabled_utimens=true fi } - func_gl_gnulib_m4code_vasnprintf () - { - if $gl_gnulib_enabled_vasnprintf; then :; else - AC_REQUIRE([AC_C_RESTRICT]) - gl_FUNC_VASNPRINTF - gl_gnulib_enabled_vasnprintf=true - func_gl_gnulib_m4code_xsize - fi - } - func_gl_gnulib_m4code_ed5616be3593d355b981ffab56b9f37b () - { - if $gl_gnulib_enabled_ed5616be3593d355b981ffab56b9f37b; then :; else - gl_FUNC_VFPRINTF_POSIX - gl_STDIO_MODULE_INDICATOR([vfprintf-posix]) - gl_MODULE_INDICATOR([vfprintf-posix]) - gl_gnulib_enabled_ed5616be3593d355b981ffab56b9f37b=true - if test $REPLACE_VFPRINTF = 1; then - func_gl_gnulib_m4code_fseterr - fi - if test $REPLACE_VFPRINTF = 1; then - func_gl_gnulib_m4code_vasnprintf - fi - fi - } func_gl_gnulib_m4code_682e609604ccaac6be382e4ee3a4eaec () { if $gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec; then :; else gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec=true fi } - func_gl_gnulib_m4code_xsize () - { - if $gl_gnulib_enabled_xsize; then :; else - gl_XSIZE - gl_gnulib_enabled_xsize=true - func_gl_gnulib_m4code_size_max - fi - } if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then func_gl_gnulib_m4code_925677f0343de64b89a9f0c790b4104c fi @@ -1146,9 +1020,6 @@ AC_DEFUN([gl_INIT], if case $host_os in mingw*) false;; *) test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1;; esac; then func_gl_gnulib_m4code_open fi - if test $REPLACE_PRINTF = 1; then - func_gl_gnulib_m4code_ed5616be3593d355b981ffab56b9f37b - fi if test $HAVE_READLINKAT = 0 || test $REPLACE_READLINKAT = 1; then func_gl_gnulib_m4code_260941c0e5dc67ec9e87d1fb321c300b fi @@ -1158,9 +1029,6 @@ AC_DEFUN([gl_INIT], if test $ac_use_included_regex = yes; then func_gl_gnulib_m4code_fd38c7e463b54744b77b98aeafb4fa7c fi - if test $REPLACE_SIGNBIT = 1; then - func_gl_gnulib_m4code_3f0e593033d1fc2c127581960f641b66 - fi if { test $HAVE_DECL_STRTOIMAX = 0 || test $REPLACE_STRTOIMAX = 1; } && test $ac_cv_type_long_long_int = yes; then func_gl_gnulib_m4code_strtoll fi @@ -1176,19 +1044,12 @@ AC_DEFUN([gl_INIT], if test $HAVE_UTIMENSAT = 0 || test $REPLACE_UTIMENSAT = 1; then func_gl_gnulib_m4code_utimens fi - if test $HAVE_VASPRINTF = 0 || test $REPLACE_VASPRINTF = 1; then - func_gl_gnulib_m4code_vasnprintf - fi - if test $HAVE_VASPRINTF = 0 || test $REPLACE_VASPRINTF = 1; then - func_gl_gnulib_m4code_vasnprintf - fi m4_pattern_allow([^gl_GNULIB_ENABLED_]) AM_CONDITIONAL([gl_GNULIB_ENABLED_260941c0e5dc67ec9e87d1fb321c300b], [$gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b]) AM_CONDITIONAL([gl_GNULIB_ENABLED_cloexec], [$gl_gnulib_enabled_cloexec]) AM_CONDITIONAL([gl_GNULIB_ENABLED_dirfd], [$gl_gnulib_enabled_dirfd]) AM_CONDITIONAL([gl_GNULIB_ENABLED_925677f0343de64b89a9f0c790b4104c], [$gl_gnulib_enabled_925677f0343de64b89a9f0c790b4104c]) AM_CONDITIONAL([gl_GNULIB_ENABLED_euidaccess], [$gl_gnulib_enabled_euidaccess]) - AM_CONDITIONAL([gl_GNULIB_ENABLED_fseterr], [$gl_gnulib_enabled_fseterr]) AM_CONDITIONAL([gl_GNULIB_ENABLED_getdelim], [$gl_gnulib_enabled_getdelim]) AM_CONDITIONAL([gl_GNULIB_ENABLED_getdtablesize], [$gl_gnulib_enabled_getdtablesize]) AM_CONDITIONAL([gl_GNULIB_ENABLED_getgroups], [$gl_gnulib_enabled_getgroups]) @@ -1196,7 +1057,6 @@ AC_DEFUN([gl_INIT], AM_CONDITIONAL([gl_GNULIB_ENABLED_fd38c7e463b54744b77b98aeafb4fa7c], [$gl_gnulib_enabled_fd38c7e463b54744b77b98aeafb4fa7c]) AM_CONDITIONAL([gl_GNULIB_ENABLED_8444034ea779b88768865bb60b4fb8c9], [$gl_gnulib_enabled_8444034ea779b88768865bb60b4fb8c9]) AM_CONDITIONAL([gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1], [$gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1]) - AM_CONDITIONAL([gl_GNULIB_ENABLED_3f0e593033d1fc2c127581960f641b66], [$gl_gnulib_enabled_3f0e593033d1fc2c127581960f641b66]) AM_CONDITIONAL([gl_GNULIB_ENABLED_lchmod], [$gl_gnulib_enabled_lchmod]) AM_CONDITIONAL([gl_GNULIB_ENABLED_e80bf6f757095d2e5fc94dafb8f8fc8b], [$gl_gnulib_enabled_e80bf6f757095d2e5fc94dafb8f8fc8b]) AM_CONDITIONAL([gl_GNULIB_ENABLED_ef455225c00f5049c808c2eda3e76866], [$gl_gnulib_enabled_ef455225c00f5049c808c2eda3e76866]) @@ -1207,13 +1067,9 @@ AC_DEFUN([gl_INIT], AM_CONDITIONAL([gl_GNULIB_ENABLED_d3b2383720ee0e541357aa2aac598e2b], [$gl_gnulib_enabled_d3b2383720ee0e541357aa2aac598e2b]) AM_CONDITIONAL([gl_GNULIB_ENABLED_61bcaca76b3e6f9ae55d57a1c3193bc4], [$gl_gnulib_enabled_61bcaca76b3e6f9ae55d57a1c3193bc4]) AM_CONDITIONAL([gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c], [$gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c]) - AM_CONDITIONAL([gl_GNULIB_ENABLED_size_max], [$gl_gnulib_enabled_size_max]) AM_CONDITIONAL([gl_GNULIB_ENABLED_strtoll], [$gl_gnulib_enabled_strtoll]) AM_CONDITIONAL([gl_GNULIB_ENABLED_utimens], [$gl_gnulib_enabled_utimens]) - AM_CONDITIONAL([gl_GNULIB_ENABLED_vasnprintf], [$gl_gnulib_enabled_vasnprintf]) - AM_CONDITIONAL([gl_GNULIB_ENABLED_ed5616be3593d355b981ffab56b9f37b], [$gl_gnulib_enabled_ed5616be3593d355b981ffab56b9f37b]) AM_CONDITIONAL([gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec], [$gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec]) - AM_CONDITIONAL([gl_GNULIB_ENABLED_xsize], [$gl_gnulib_enabled_xsize]) # End of code from modules m4_ifval(gl_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ || @@ -1399,8 +1255,6 @@ AC_DEFUN([gl_FILE_LIST], [ lib/allocator.c lib/allocator.h lib/arg-nonnull.h - lib/asnprintf.c - lib/asprintf.c lib/assert.in.h lib/at-func.c lib/attribute.h @@ -1453,17 +1307,9 @@ AC_DEFUN([gl_FILE_LIST], [ lib/filevercmp.c lib/filevercmp.h lib/flexmember.h - lib/float+.h - lib/float.c - lib/float.in.h lib/fpending.c lib/fpending.h - lib/fpucw.h lib/free.c - lib/frexp.c - lib/frexpl.c - lib/fseterr.c - lib/fseterr.h lib/fstatat.c lib/fsusage.c lib/fsusage.h @@ -1498,14 +1344,6 @@ AC_DEFUN([gl_FILE_LIST], [ lib/intprops-internal.h lib/intprops.h lib/inttypes.in.h - lib/isnan.c - lib/isnand-nolibm.h - lib/isnand.c - lib/isnanf-nolibm.h - lib/isnanf.c - lib/isnanl-nolibm.h - lib/isnanl.c - lib/itold.c lib/lchmod.c lib/libc-config.h lib/limits.in.h @@ -1522,8 +1360,6 @@ AC_DEFUN([gl_FILE_LIST], [ lib/malloc/scratch_buffer_grow.c lib/malloc/scratch_buffer_grow_preserve.c lib/malloc/scratch_buffer_set_array_size.c - lib/math.c - lib/math.in.h lib/md5-stream.c lib/md5.c lib/md5.h @@ -1548,15 +1384,6 @@ AC_DEFUN([gl_FILE_LIST], [ lib/openat.h lib/pathmax.h lib/pipe2.c - lib/printf-args.c - lib/printf-args.h - lib/printf-frexp.c - lib/printf-frexp.h - lib/printf-frexpl.c - lib/printf-frexpl.h - lib/printf-parse.c - lib/printf-parse.h - lib/printf.c lib/pselect.c lib/pthread_sigmask.c lib/qcopy-acl.c @@ -1584,10 +1411,6 @@ AC_DEFUN([gl_FILE_LIST], [ lib/sig2str.h lib/sigdescr_np.c lib/signal.in.h - lib/signbitd.c - lib/signbitf.c - lib/signbitl.c - lib/size_max.h lib/stat-time.c lib/stat-time.h lib/stdckdint.in.h @@ -1632,22 +1455,15 @@ AC_DEFUN([gl_FILE_LIST], [ lib/utimens.c lib/utimens.h lib/utimensat.c - lib/vasnprintf.c - lib/vasnprintf.h - lib/vasprintf.c lib/verify.h - lib/vfprintf.c lib/vla.h lib/warn-on-use.h lib/xalloc-oversized.h - lib/xsize.c - lib/xsize.h m4/00gnulib.m4 m4/__inline.m4 m4/absolute-header.m4 m4/acl.m4 m4/alloca.m4 - m4/asm-underscore.m4 m4/assert_h.m4 m4/builtin-expect.m4 m4/byteswap.m4 @@ -1666,9 +1482,6 @@ AC_DEFUN([gl_FILE_LIST], [ m4/errno_h.m4 m4/euidaccess.m4 m4/execinfo.m4 - m4/exponentd.m4 - m4/exponentf.m4 - m4/exponentl.m4 m4/extensions.m4 m4/extern-inline.m4 m4/faccessat.m4 @@ -1679,13 +1492,9 @@ AC_DEFUN([gl_FILE_LIST], [ m4/fdopendir.m4 m4/filemode.m4 m4/flexmember.m4 - m4/float_h.m4 m4/fpending.m4 m4/fpieee.m4 m4/free.m4 - m4/frexp.m4 - m4/frexpl.m4 - m4/fseterr.m4 m4/fstatat.m4 m4/fsusage.m4 m4/fsync.m4 @@ -1704,15 +1513,9 @@ AC_DEFUN([gl_FILE_LIST], [ m4/group-member.m4 m4/ieee754-h.m4 m4/include_next.m4 - m4/intmax_t.m4 m4/inttypes.m4 - m4/inttypes_h.m4 - m4/isnand.m4 - m4/isnanf.m4 - m4/isnanl.m4 m4/largefile.m4 m4/lchmod.m4 - m4/ldexpl.m4 m4/libgmp.m4 m4/limits-h.m4 m4/locale-fr.m4 @@ -1720,7 +1523,6 @@ AC_DEFUN([gl_FILE_LIST], [ m4/malloc.m4 m4/manywarnings-c++.m4 m4/manywarnings.m4 - m4/math_h.m4 m4/mbstate_t.m4 m4/md5.m4 m4/memmem.m4 @@ -1744,10 +1546,6 @@ AC_DEFUN([gl_FILE_LIST], [ m4/pathmax.m4 m4/pid_t.m4 m4/pipe2.m4 - m4/printf-frexp.m4 - m4/printf-frexpl.m4 - m4/printf-posix.m4 - m4/printf.m4 m4/pselect.m4 m4/pthread_sigmask.m4 m4/rawmemchr.m4 @@ -1761,8 +1559,6 @@ AC_DEFUN([gl_FILE_LIST], [ m4/sig2str.m4 m4/sigdescr_np.m4 m4/signal_h.m4 - m4/signbit.m4 - m4/size_max.m4 m4/socklen.m4 m4/ssize_t.m4 m4/stat-time.m4 @@ -1770,7 +1566,6 @@ AC_DEFUN([gl_FILE_LIST], [ m4/stdalign.m4 m4/stddef_h.m4 m4/stdint.m4 - m4/stdint_h.m4 m4/stdio_h.m4 m4/stdlib_h.m4 m4/stpcpy.m4 @@ -1800,15 +1595,10 @@ AC_DEFUN([gl_FILE_LIST], [ m4/utimensat.m4 m4/utimes.m4 m4/vararrays.m4 - m4/vasnprintf.m4 - m4/vasprintf-posix.m4 - m4/vasprintf.m4 - m4/vfprintf-posix.m4 m4/warn-on-use.m4 m4/warnings.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/xattr.m4 - m4/xsize.m4 m4/zzgnulib.m4 ]) diff --git a/m4/intmax_t.m4 b/m4/intmax_t.m4 deleted file mode 100644 index ef32e1b9ca9..00000000000 --- a/m4/intmax_t.m4 +++ /dev/null @@ -1,59 +0,0 @@ -# intmax_t.m4 serial 9 -dnl Copyright (C) 1997-2004, 2006-2007, 2009-2023 Free Software Foundation, -dnl Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -AC_PREREQ([2.53]) - -# Define intmax_t to 'long' or 'long long' -# if it is not already defined in or . - -AC_DEFUN([gl_AC_TYPE_INTMAX_T], -[ - dnl For simplicity, we assume that a header file defines 'intmax_t' if and - dnl only if it defines 'uintmax_t'. - AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) - AC_REQUIRE([gl_AC_HEADER_STDINT_H]) - if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then - AC_DEFINE_UNQUOTED([intmax_t], [long long], - [Define to long or long long if and don't define.]) - else - AC_DEFINE([HAVE_INTMAX_T], [1], - [Define if you have the 'intmax_t' type in or .]) - fi -]) - -dnl An alternative would be to explicitly test for 'intmax_t'. - -AC_DEFUN([gt_AC_TYPE_INTMAX_T], -[ - AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) - AC_REQUIRE([gl_AC_HEADER_STDINT_H]) - AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ -#include -#include -#if HAVE_STDINT_H_WITH_UINTMAX -#include -#endif -#if HAVE_INTTYPES_H_WITH_UINTMAX -#include -#endif - ]], - [[intmax_t x = -1; return !x;]])], - [gt_cv_c_intmax_t=yes], - [gt_cv_c_intmax_t=no])]) - if test $gt_cv_c_intmax_t = yes; then - AC_DEFINE([HAVE_INTMAX_T], [1], - [Define if you have the 'intmax_t' type in or .]) - else - AC_DEFINE_UNQUOTED([intmax_t], [long long], - [Define to long or long long if and don't define.]) - fi -]) diff --git a/m4/inttypes_h.m4 b/m4/inttypes_h.m4 deleted file mode 100644 index 68c60e9dbb6..00000000000 --- a/m4/inttypes_h.m4 +++ /dev/null @@ -1,29 +0,0 @@ -# inttypes_h.m4 serial 10 -dnl Copyright (C) 1997-2004, 2006, 2008-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -# Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, -# doesn't clash with , and declares uintmax_t. - -AC_DEFUN([gl_AC_HEADER_INTTYPES_H], -[ - AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ -#include -#include - ]], - [[uintmax_t i = (uintmax_t) -1; return !i;]])], - [gl_cv_header_inttypes_h=yes], - [gl_cv_header_inttypes_h=no])]) - if test $gl_cv_header_inttypes_h = yes; then - AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1], - [Define if exists, doesn't clash with , - and declares uintmax_t. ]) - fi -]) diff --git a/m4/isnand.m4 b/m4/isnand.m4 deleted file mode 100644 index 95346f420b7..00000000000 --- a/m4/isnand.m4 +++ /dev/null @@ -1,96 +0,0 @@ -# isnand.m4 serial 12 -dnl Copyright (C) 2007-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Check how to get or define isnand(). - -AC_DEFUN([gl_FUNC_ISNAND], -[ - AC_REQUIRE([gl_MATH_H_DEFAULTS]) - ISNAND_LIBM= - gl_HAVE_ISNAND_NO_LIBM - if test $gl_cv_func_isnand_no_libm = no; then - gl_HAVE_ISNAND_IN_LIBM - if test $gl_cv_func_isnand_in_libm = yes; then - ISNAND_LIBM=-lm - fi - fi - dnl The variable gl_func_isnand set here is used by isnan.m4. - if test $gl_cv_func_isnand_no_libm = yes \ - || test $gl_cv_func_isnand_in_libm = yes; then - gl_func_isnand=yes - else - gl_func_isnand=no - HAVE_ISNAND=0 - fi - AC_SUBST([ISNAND_LIBM]) -]) - -dnl Check how to get or define isnand() without linking with libm. - -AC_DEFUN([gl_FUNC_ISNAND_NO_LIBM], -[ - gl_HAVE_ISNAND_NO_LIBM - gl_func_isnand_no_libm=$gl_cv_func_isnand_no_libm - if test $gl_cv_func_isnand_no_libm = yes; then - AC_DEFINE([HAVE_ISNAND_IN_LIBC], [1], - [Define if the isnan(double) function is available in libc.]) - fi -]) - -dnl Prerequisites of replacement isnand definition. It does not need -lm. -AC_DEFUN([gl_PREREQ_ISNAND], -[ - AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) -]) - -dnl Test whether isnand() can be used with libm. - -AC_DEFUN([gl_HAVE_ISNAND_IN_LIBM], -[ - AC_CACHE_CHECK([whether isnan(double) can be used with libm], - [gl_cv_func_isnand_in_libm], - [ - save_LIBS="$LIBS" - LIBS="$LIBS -lm" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #if (__GNUC__ >= 4) || (__clang_major__ >= 4) - # undef isnand - # define isnand(x) __builtin_isnan ((double)(x)) - #elif defined isnan - # undef isnand - # define isnand(x) isnan ((double)(x)) - #endif - double x;]], - [[return isnand (x);]])], - [gl_cv_func_isnand_in_libm=yes], - [gl_cv_func_isnand_in_libm=no]) - LIBS="$save_LIBS" - ]) -]) - -AC_DEFUN([gl_HAVE_ISNAND_NO_LIBM], -[ - AC_CACHE_CHECK([whether isnan(double) can be used without linking with libm], - [gl_cv_func_isnand_no_libm], - [ - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #if (__GNUC__ >= 4) || (__clang_major__ >= 4) - # undef isnand - # define isnand(x) __builtin_isnan ((double)(x)) - #else - # undef isnand - # define isnand(x) isnan ((double)(x)) - #endif - double x;]], - [[return isnand (x);]])], - [gl_cv_func_isnand_no_libm=yes], - [gl_cv_func_isnand_no_libm=no]) - ]) -]) diff --git a/m4/isnanf.m4 b/m4/isnanf.m4 deleted file mode 100644 index 01f7bbd20d8..00000000000 --- a/m4/isnanf.m4 +++ /dev/null @@ -1,197 +0,0 @@ -# isnanf.m4 serial 18 -dnl Copyright (C) 2007-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Check how to get or define isnanf(). - -AC_DEFUN([gl_FUNC_ISNANF], -[ - AC_REQUIRE([gl_MATH_H_DEFAULTS]) - ISNANF_LIBM= - gl_HAVE_ISNANF_NO_LIBM - if test $gl_cv_func_isnanf_no_libm = no; then - gl_HAVE_ISNANF_IN_LIBM - if test $gl_cv_func_isnanf_in_libm = yes; then - ISNANF_LIBM=-lm - fi - fi - dnl The variable gl_func_isnanf set here is used by isnan.m4. - if test $gl_cv_func_isnanf_no_libm = yes \ - || test $gl_cv_func_isnanf_in_libm = yes; then - save_LIBS="$LIBS" - LIBS="$LIBS $ISNANF_LIBM" - gl_ISNANF_WORKS - LIBS="$save_LIBS" - case "$gl_cv_func_isnanf_works" in - *yes) gl_func_isnanf=yes ;; - *) gl_func_isnanf=no; ISNANF_LIBM= ;; - esac - else - gl_func_isnanf=no - fi - if test $gl_func_isnanf != yes; then - HAVE_ISNANF=0 - fi - AC_SUBST([ISNANF_LIBM]) -]) - -dnl Check how to get or define isnanf() without linking with libm. - -AC_DEFUN([gl_FUNC_ISNANF_NO_LIBM], -[ - gl_HAVE_ISNANF_NO_LIBM - if test $gl_cv_func_isnanf_no_libm = yes; then - gl_ISNANF_WORKS - fi - if test $gl_cv_func_isnanf_no_libm = yes \ - && { case "$gl_cv_func_isnanf_works" in - *yes) true;; - *) false;; - esac - }; then - gl_func_isnanf_no_libm=yes - AC_DEFINE([HAVE_ISNANF_IN_LIBC], [1], - [Define if the isnan(float) function is available in libc.]) - else - gl_func_isnanf_no_libm=no - fi -]) - -dnl Prerequisites of replacement isnanf definition. It does not need -lm. -AC_DEFUN([gl_PREREQ_ISNANF], -[ - gl_FLOAT_EXPONENT_LOCATION -]) - -dnl Test whether isnanf() can be used without libm. -AC_DEFUN([gl_HAVE_ISNANF_NO_LIBM], -[ - AC_CACHE_CHECK([whether isnan(float) can be used without linking with libm], - [gl_cv_func_isnanf_no_libm], - [ - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #if (__GNUC__ >= 4) || (__clang_major__ >= 4) - # undef isnanf - # define isnanf(x) __builtin_isnan ((float)(x)) - #elif defined isnan - # undef isnanf - # define isnanf(x) isnan ((float)(x)) - #endif - float x;]], - [[return isnanf (x);]])], - [gl_cv_func_isnanf_no_libm=yes], - [gl_cv_func_isnanf_no_libm=no]) - ]) -]) - -dnl Test whether isnanf() can be used with libm. -AC_DEFUN([gl_HAVE_ISNANF_IN_LIBM], -[ - AC_CACHE_CHECK([whether isnan(float) can be used with libm], - [gl_cv_func_isnanf_in_libm], - [ - save_LIBS="$LIBS" - LIBS="$LIBS -lm" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #if (__GNUC__ >= 4) || (__clang_major__ >= 4) - # undef isnanf - # define isnanf(x) __builtin_isnan ((float)(x)) - #elif defined isnan - # undef isnanf - # define isnanf(x) isnan ((float)(x)) - #endif - float x;]], - [[return isnanf (x);]])], - [gl_cv_func_isnanf_in_libm=yes], - [gl_cv_func_isnanf_in_libm=no]) - LIBS="$save_LIBS" - ]) -]) - -dnl Test whether isnanf() rejects Infinity (this fails on Solaris 2.5.1), -dnl recognizes a NaN (this fails on IRIX 6.5 with cc), and recognizes a NaN -dnl with in-memory representation 0x7fbfffff (this fails on IRIX 6.5). -AC_DEFUN([gl_ISNANF_WORKS], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION]) - AC_CACHE_CHECK([whether isnan(float) works], [gl_cv_func_isnanf_works], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#if (__GNUC__ >= 4) || (__clang_major__ >= 4) -# undef isnanf -# define isnanf(x) __builtin_isnan ((float)(x)) -#elif defined isnan -# undef isnanf -# define isnanf(x) isnan ((float)(x)) -#endif -/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ -#ifdef __DECC -static float -NaN () -{ - static float zero = 0.0f; - return zero / zero; -} -#else -# define NaN() (0.0f / 0.0f) -#endif -#define NWORDS \ - ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -typedef union { unsigned int word[NWORDS]; float value; } memory_float; -int main() -{ - int result = 0; - - if (isnanf (1.0f / 0.0f)) - result |= 1; - - if (!isnanf (NaN ())) - result |= 2; - -#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT - /* The isnanf function should be immune against changes in the sign bit and - in the mantissa bits. The xor operation twiddles a bit that can only be - a sign bit or a mantissa bit. */ - if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0) - { - memory_float m; - - m.value = NaN (); - /* Set the bits below the exponent to 01111...111. */ - m.word[0] &= -1U << FLT_EXPBIT0_BIT; - m.word[0] |= (1U << (FLT_EXPBIT0_BIT - 1)) - 1; - if (!isnanf (m.value)) - result |= 4; - } -#endif - - return result; -}]])], - [gl_cv_func_isnanf_works=yes], - [gl_cv_func_isnanf_works=no], - [case "$host_os" in - irix* | solaris*) gl_cv_func_isnanf_works="guessing no" ;; - mingw*) # Guess yes on mingw, no on MSVC. - AC_EGREP_CPP([Known], [ -#ifdef __MINGW32__ - Known -#endif - ], - [gl_cv_func_isnanf_works="guessing yes"], - [gl_cv_func_isnanf_works="guessing no"]) - ;; - *) gl_cv_func_isnanf_works="guessing yes" ;; - esac - ]) - ]) -]) diff --git a/m4/isnanl.m4 b/m4/isnanl.m4 deleted file mode 100644 index bb39d02558f..00000000000 --- a/m4/isnanl.m4 +++ /dev/null @@ -1,248 +0,0 @@ -# isnanl.m4 serial 22 -dnl Copyright (C) 2007-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_ISNANL], -[ - AC_REQUIRE([gl_MATH_H_DEFAULTS]) - ISNANL_LIBM= - gl_HAVE_ISNANL_NO_LIBM - if test $gl_cv_func_isnanl_no_libm = no; then - gl_HAVE_ISNANL_IN_LIBM - if test $gl_cv_func_isnanl_in_libm = yes; then - ISNANL_LIBM=-lm - fi - fi - dnl The variable gl_func_isnanl set here is used by isnan.m4. - if test $gl_cv_func_isnanl_no_libm = yes \ - || test $gl_cv_func_isnanl_in_libm = yes; then - save_LIBS="$LIBS" - LIBS="$LIBS $ISNANL_LIBM" - gl_FUNC_ISNANL_WORKS - LIBS="$save_LIBS" - case "$gl_cv_func_isnanl_works" in - *yes) gl_func_isnanl=yes ;; - *) gl_func_isnanl=no; ISNANL_LIBM= ;; - esac - else - gl_func_isnanl=no - fi - if test $gl_func_isnanl != yes; then - HAVE_ISNANL=0 - fi - AC_SUBST([ISNANL_LIBM]) -]) - -AC_DEFUN([gl_FUNC_ISNANL_NO_LIBM], -[ - gl_HAVE_ISNANL_NO_LIBM - gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm - if test $gl_func_isnanl_no_libm = yes; then - gl_FUNC_ISNANL_WORKS - case "$gl_cv_func_isnanl_works" in - *yes) ;; - *) gl_func_isnanl_no_libm=no ;; - esac - fi - if test $gl_func_isnanl_no_libm = yes; then - AC_DEFINE([HAVE_ISNANL_IN_LIBC], [1], - [Define if the isnan(long double) function is available in libc.]) - fi -]) - -dnl Prerequisites of replacement isnanl definition. It does not need -lm. -AC_DEFUN([gl_PREREQ_ISNANL], -[ - gl_LONG_DOUBLE_EXPONENT_LOCATION - AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) -]) - -dnl Test whether isnanl() can be used without libm. -AC_DEFUN([gl_HAVE_ISNANL_NO_LIBM], -[ - AC_CACHE_CHECK([whether isnan(long double) can be used without linking with libm], - [gl_cv_func_isnanl_no_libm], - [ - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #if (__GNUC__ >= 4) || (__clang_major__ >= 4) - # undef isnanl - # define isnanl(x) __builtin_isnan ((long double)(x)) - #elif defined isnan - # undef isnanl - # define isnanl(x) isnan ((long double)(x)) - #endif - long double x;]], - [[return isnanl (x);]])], - [gl_cv_func_isnanl_no_libm=yes], - [gl_cv_func_isnanl_no_libm=no]) - ]) -]) - -dnl Test whether isnanl() can be used with libm. -AC_DEFUN([gl_HAVE_ISNANL_IN_LIBM], -[ - AC_CACHE_CHECK([whether isnan(long double) can be used with libm], - [gl_cv_func_isnanl_in_libm], - [ - save_LIBS="$LIBS" - LIBS="$LIBS -lm" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #if (__GNUC__ >= 4) || (__clang_major__ >= 4) - # undef isnanl - # define isnanl(x) __builtin_isnan ((long double)(x)) - #elif defined isnan - # undef isnanl - # define isnanl(x) isnan ((long double)(x)) - #endif - long double x;]], - [[return isnanl (x);]])], - [gl_cv_func_isnanl_in_libm=yes], - [gl_cv_func_isnanl_in_libm=no]) - LIBS="$save_LIBS" - ]) -]) - -dnl Test whether isnanl() recognizes all canonical numbers which are neither -dnl finite nor infinite. -AC_DEFUN([gl_FUNC_ISNANL_WORKS], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([gl_BIGENDIAN]) - AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether isnanl works], [gl_cv_func_isnanl_works], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -#if (__GNUC__ >= 4) || (__clang_major__ >= 4) -# undef isnanl -# define isnanl(x) __builtin_isnan ((long double)(x)) -#elif defined isnan -# undef isnanl -# define isnanl(x) isnan ((long double)(x)) -#endif -#define NWORDS \ - ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -typedef union { unsigned int word[NWORDS]; long double value; } - memory_long_double; -/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the - runtime type conversion. */ -#ifdef __sgi -static long double NaNl () -{ - double zero = 0.0; - return zero / zero; -} -#else -# define NaNl() (0.0L / 0.0L) -#endif -int main () -{ - int result = 0; - - if (!isnanl (NaNl ())) - result |= 1; - - { - memory_long_double m; - unsigned int i; - - /* The isnanl function should be immune against changes in the sign bit and - in the mantissa bits. The xor operation twiddles a bit that can only be - a sign bit or a mantissa bit (since the exponent never extends to - bit 31). */ - m.value = NaNl (); - m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); - for (i = 0; i < NWORDS; i++) - m.word[i] |= 1; - if (!isnanl (m.value)) - result |= 1; - } - -#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE -/* Representation of an 80-bit 'long double' as an initializer for a sequence - of 'unsigned int' words. */ -# ifdef WORDS_BIGENDIAN -# define LDBL80_WORDS(exponent,manthi,mantlo) \ - { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ - ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ - (unsigned int) (mantlo) << 16 \ - } -# else -# define LDBL80_WORDS(exponent,manthi,mantlo) \ - { mantlo, manthi, exponent } -# endif - { /* Quiet NaN. */ - static memory_long_double x = - { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; - if (!isnanl (x.value)) - result |= 2; - } - { - /* Signalling NaN. */ - static memory_long_double x = - { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; - if (!isnanl (x.value)) - result |= 2; - } - /* isnanl should return something even for noncanonical values. */ - { /* Pseudo-NaN. */ - static memory_long_double x = - { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; - if (isnanl (x.value) && !isnanl (x.value)) - result |= 4; - } - { /* Pseudo-Infinity. */ - static memory_long_double x = - { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; - if (isnanl (x.value) && !isnanl (x.value)) - result |= 8; - } - { /* Pseudo-Zero. */ - static memory_long_double x = - { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; - if (isnanl (x.value) && !isnanl (x.value)) - result |= 16; - } - { /* Unnormalized number. */ - static memory_long_double x = - { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; - if (isnanl (x.value) && !isnanl (x.value)) - result |= 32; - } - { /* Pseudo-Denormal. */ - static memory_long_double x = - { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; - if (isnanl (x.value) && !isnanl (x.value)) - result |= 64; - } -#endif - - return result; -}]])], - [gl_cv_func_isnanl_works=yes], - [gl_cv_func_isnanl_works=no], - [case "$host_os" in - mingw*) # Guess yes on mingw, no on MSVC. - AC_EGREP_CPP([Known], [ -#ifdef __MINGW32__ - Known -#endif - ], - [gl_cv_func_isnanl_works="guessing yes"], - [gl_cv_func_isnanl_works="guessing no"]) - ;; - *) gl_cv_func_isnanl_works="guessing yes" ;; - esac - ]) - ]) -]) diff --git a/m4/ldexpl.m4 b/m4/ldexpl.m4 deleted file mode 100644 index f2785d67c5b..00000000000 --- a/m4/ldexpl.m4 +++ /dev/null @@ -1,135 +0,0 @@ -# ldexpl.m4 serial 17 -dnl Copyright (C) 2007-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_LDEXPL], -[ - AC_REQUIRE([gl_MATH_H_DEFAULTS]) - AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) - AC_REQUIRE([gl_FUNC_ISNANL]) dnl for ISNANL_LIBM - - dnl Persuade glibc to declare ldexpl(). - AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - - dnl Check whether it's declared. - dnl Mac OS X 10.3 has ldexpl() in libc but doesn't declare it in . - AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [[#include ]]) - - LDEXPL_LIBM= - if test $HAVE_DECL_LDEXPL = 1; then - gl_CHECK_LDEXPL_NO_LIBM - if test $gl_cv_func_ldexpl_no_libm = no; then - AC_CACHE_CHECK([whether ldexpl() can be used with libm], - [gl_cv_func_ldexpl_in_libm], - [ - save_LIBS="$LIBS" - LIBS="$LIBS -lm" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include - long double x;]], - [[return ldexpl (x, -1) > 0;]])], - [gl_cv_func_ldexpl_in_libm=yes], - [gl_cv_func_ldexpl_in_libm=no]) - LIBS="$save_LIBS" - ]) - if test $gl_cv_func_ldexpl_in_libm = yes; then - LDEXPL_LIBM=-lm - fi - fi - if test $gl_cv_func_ldexpl_no_libm = yes \ - || test $gl_cv_func_ldexpl_in_libm = yes; then - save_LIBS="$LIBS" - LIBS="$LIBS $LDEXPL_LIBM" - gl_FUNC_LDEXPL_WORKS - LIBS="$save_LIBS" - case "$gl_cv_func_ldexpl_works" in - *yes) gl_func_ldexpl=yes ;; - *) gl_func_ldexpl=no; REPLACE_LDEXPL=1 ;; - esac - else - gl_func_ldexpl=no - fi - if test $gl_func_ldexpl = yes; then - AC_DEFINE([HAVE_LDEXPL], [1], - [Define if the ldexpl() function is available.]) - fi - fi - if test $HAVE_DECL_LDEXPL = 0 || test $gl_func_ldexpl = no; then - dnl Find libraries needed to link lib/ldexpl.c. - if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then - AC_REQUIRE([gl_FUNC_LDEXP]) - LDEXPL_LIBM="$LDEXP_LIBM" - else - LDEXPL_LIBM="$ISNANL_LIBM" - fi - fi - AC_SUBST([LDEXPL_LIBM]) -]) - -dnl Test whether ldexpl() can be used without linking with libm. -dnl Set gl_cv_func_ldexpl_no_libm to 'yes' or 'no' accordingly. -AC_DEFUN([gl_CHECK_LDEXPL_NO_LIBM], -[ - AC_CACHE_CHECK([whether ldexpl() can be used without linking with libm], - [gl_cv_func_ldexpl_no_libm], - [ - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include - long double x;]], - [[return ldexpl (x, -1) > 0;]])], - [gl_cv_func_ldexpl_no_libm=yes], - [gl_cv_func_ldexpl_no_libm=no]) - ]) -]) - -dnl Test whether ldexpl() works on finite numbers (this fails on AIX 5.1 -dnl and Mac OS X 10.4/PowerPC). -AC_DEFUN([gl_FUNC_LDEXPL_WORKS], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether ldexpl works], [gl_cv_func_ldexpl_works], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -extern -#ifdef __cplusplus -"C" -#endif -long double ldexpl (long double, int); -int main() -{ - int result = 0; - { - volatile long double x = 1.0; - volatile long double y = ldexpl (x, -1); - if (y != 0.5L) - result |= 1; - } - { - volatile long double x = 1.73205L; - volatile long double y = ldexpl (x, 0); - if (y != x) - result |= 2; - } - return result; -}]])], - [gl_cv_func_ldexpl_works=yes], - [gl_cv_func_ldexpl_works=no], - [ -changequote(,)dnl - case "$host_os" in - aix | aix[3-6]*) gl_cv_func_ldexpl_works="guessing no" ;; - # Guess yes on native Windows. - mingw*) gl_cv_func_ldexpl_works="guessing yes" ;; - *) gl_cv_func_ldexpl_works="guessing yes" ;; - esac -changequote([,])dnl - ]) - ]) -]) diff --git a/m4/math_h.m4 b/m4/math_h.m4 deleted file mode 100644 index d2e90ff1eb6..00000000000 --- a/m4/math_h.m4 +++ /dev/null @@ -1,391 +0,0 @@ -# math_h.m4 serial 125 -dnl Copyright (C) 2007-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN_ONCE([gl_MATH_H], -[ - AC_REQUIRE([gl_MATH_H_DEFAULTS]) - gl_CHECK_NEXT_HEADERS([math.h]) - - AC_CACHE_CHECK([whether NAN macro works], [gl_cv_header_math_nan_works], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[/* Solaris 10 has a broken definition of NAN. Other platforms - fail to provide NAN, or provide it only in C99 mode; this - test only needs to fail when NAN is provided but wrong. */ - float f = 1.0f; -#ifdef NAN - f = NAN; -#endif - return f == 0;]])], - [gl_cv_header_math_nan_works=yes], - [gl_cv_header_math_nan_works=no])]) - if test $gl_cv_header_math_nan_works = no; then - REPLACE_NAN=1 - fi - AC_CACHE_CHECK([whether HUGE_VAL works], [gl_cv_header_math_huge_val_works], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[/* Solaris 10 has a broken definition of HUGE_VAL. */ - double d = HUGE_VAL; - return d == 0;]])], - [gl_cv_header_math_huge_val_works=yes], - [gl_cv_header_math_huge_val_works=no])]) - if test $gl_cv_header_math_huge_val_works = no; then - REPLACE_HUGE_VAL=1 - fi - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[#include ]], - [acosf acosl asinf asinl atanf atanl - cbrt cbrtf cbrtl ceilf ceill copysign copysignf copysignl cosf cosl coshf - expf expl exp2 exp2f exp2l expm1 expm1f expm1l - fabsf fabsl floorf floorl fma fmaf fmal - fmod fmodf fmodl frexpf frexpl hypotf hypotl - ilogb ilogbf ilogbl - ldexpf ldexpl - log logf logl log10 log10f log10l log1p log1pf log1pl log2 log2f log2l - logb logbf logbl - modf modff modfl powf - remainder remainderf remainderl - rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl - tanf tanl tanhf trunc truncf truncl]) -]) - -# gl_MATH_MODULE_INDICATOR([modulename]) -# sets the shell variable that indicates the presence of the given module -# to a C preprocessor expression that will evaluate to 1. -# This macro invocation must not occur in macros that are AC_REQUIREd. -AC_DEFUN([gl_MATH_MODULE_INDICATOR], -[ - dnl Ensure to expand the default settings once only. - gl_MATH_H_REQUIRE_DEFAULTS - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -# Initializes the default values for AC_SUBSTed shell variables. -# This macro must not be AC_REQUIREd. It must only be invoked, and only -# outside of macros or in macros that are not AC_REQUIREd. -AC_DEFUN([gl_MATH_H_REQUIRE_DEFAULTS], -[ - m4_defun(GL_MODULE_INDICATOR_PREFIX[_MATH_H_MODULE_INDICATOR_DEFAULTS], [ - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACOSF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACOSL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ASINF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ASINL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATANF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATANL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATAN2F]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRT]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRTF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRTL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEIL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEILF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEILL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGN]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGNF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGNL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSHF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2F]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2L]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1F]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1L]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FABSF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FABSL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOOR]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOORF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOORL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMA]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMAF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMAL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMOD]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMODF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMODL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXPF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXP]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXPL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOT]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOTF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOTL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGB]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGBF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGBL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISFINITE]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISINF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNAN]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNANF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNAND]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNANL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LDEXPF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LDEXPL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10F]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10L]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1P]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1PF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1PL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2F]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2L]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGB]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGBF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGBL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODFF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODFL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POWF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDER]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDERF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDERL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINT]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINTF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINTL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUND]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUNDF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUNDL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGNBIT]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINHF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SQRTF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SQRTL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANL]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANHF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNC]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCF]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCL]) - dnl Support Microsoft deprecated alias function names by default. - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_J0], [1]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_J1], [1]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_JN], [1]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_Y0], [1]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_Y1], [1]) - gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_YN], [1]) - ]) - m4_require(GL_MODULE_INDICATOR_PREFIX[_MATH_H_MODULE_INDICATOR_DEFAULTS]) - AC_REQUIRE([gl_MATH_H_DEFAULTS]) -]) - -AC_DEFUN([gl_MATH_H_DEFAULTS], -[ - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_ACOSF=1; AC_SUBST([HAVE_ACOSF]) - HAVE_ACOSL=1; AC_SUBST([HAVE_ACOSL]) - HAVE_ASINF=1; AC_SUBST([HAVE_ASINF]) - HAVE_ASINL=1; AC_SUBST([HAVE_ASINL]) - HAVE_ATANF=1; AC_SUBST([HAVE_ATANF]) - HAVE_ATANL=1; AC_SUBST([HAVE_ATANL]) - HAVE_ATAN2F=1; AC_SUBST([HAVE_ATAN2F]) - HAVE_CBRT=1; AC_SUBST([HAVE_CBRT]) - HAVE_CBRTF=1; AC_SUBST([HAVE_CBRTF]) - HAVE_CBRTL=1; AC_SUBST([HAVE_CBRTL]) - HAVE_COPYSIGN=1; AC_SUBST([HAVE_COPYSIGN]) - HAVE_COPYSIGNL=1; AC_SUBST([HAVE_COPYSIGNL]) - HAVE_COSF=1; AC_SUBST([HAVE_COSF]) - HAVE_COSL=1; AC_SUBST([HAVE_COSL]) - HAVE_COSHF=1; AC_SUBST([HAVE_COSHF]) - HAVE_EXPF=1; AC_SUBST([HAVE_EXPF]) - HAVE_EXPL=1; AC_SUBST([HAVE_EXPL]) - HAVE_EXPM1=1; AC_SUBST([HAVE_EXPM1]) - HAVE_EXPM1F=1; AC_SUBST([HAVE_EXPM1F]) - HAVE_FABSF=1; AC_SUBST([HAVE_FABSF]) - HAVE_FABSL=1; AC_SUBST([HAVE_FABSL]) - HAVE_FMA=1; AC_SUBST([HAVE_FMA]) - HAVE_FMAF=1; AC_SUBST([HAVE_FMAF]) - HAVE_FMAL=1; AC_SUBST([HAVE_FMAL]) - HAVE_FMODF=1; AC_SUBST([HAVE_FMODF]) - HAVE_FMODL=1; AC_SUBST([HAVE_FMODL]) - HAVE_FREXPF=1; AC_SUBST([HAVE_FREXPF]) - HAVE_HYPOTF=1; AC_SUBST([HAVE_HYPOTF]) - HAVE_HYPOTL=1; AC_SUBST([HAVE_HYPOTL]) - HAVE_ILOGB=1; AC_SUBST([HAVE_ILOGB]) - HAVE_ILOGBF=1; AC_SUBST([HAVE_ILOGBF]) - HAVE_ILOGBL=1; AC_SUBST([HAVE_ILOGBL]) - HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF]) - HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND]) - HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL]) - HAVE_LDEXPF=1; AC_SUBST([HAVE_LDEXPF]) - HAVE_LOGF=1; AC_SUBST([HAVE_LOGF]) - HAVE_LOGL=1; AC_SUBST([HAVE_LOGL]) - HAVE_LOG10F=1; AC_SUBST([HAVE_LOG10F]) - HAVE_LOG10L=1; AC_SUBST([HAVE_LOG10L]) - HAVE_LOG1P=1; AC_SUBST([HAVE_LOG1P]) - HAVE_LOG1PF=1; AC_SUBST([HAVE_LOG1PF]) - HAVE_LOG1PL=1; AC_SUBST([HAVE_LOG1PL]) - HAVE_LOGBF=1; AC_SUBST([HAVE_LOGBF]) - HAVE_LOGBL=1; AC_SUBST([HAVE_LOGBL]) - HAVE_MODFF=1; AC_SUBST([HAVE_MODFF]) - HAVE_MODFL=1; AC_SUBST([HAVE_MODFL]) - HAVE_POWF=1; AC_SUBST([HAVE_POWF]) - HAVE_REMAINDER=1; AC_SUBST([HAVE_REMAINDER]) - HAVE_REMAINDERF=1; AC_SUBST([HAVE_REMAINDERF]) - HAVE_RINT=1; AC_SUBST([HAVE_RINT]) - HAVE_RINTL=1; AC_SUBST([HAVE_RINTL]) - HAVE_SINF=1; AC_SUBST([HAVE_SINF]) - HAVE_SINL=1; AC_SUBST([HAVE_SINL]) - HAVE_SINHF=1; AC_SUBST([HAVE_SINHF]) - HAVE_SQRTF=1; AC_SUBST([HAVE_SQRTF]) - HAVE_SQRTL=1; AC_SUBST([HAVE_SQRTL]) - HAVE_TANF=1; AC_SUBST([HAVE_TANF]) - HAVE_TANL=1; AC_SUBST([HAVE_TANL]) - HAVE_TANHF=1; AC_SUBST([HAVE_TANHF]) - HAVE_DECL_ACOSL=1; AC_SUBST([HAVE_DECL_ACOSL]) - HAVE_DECL_ASINL=1; AC_SUBST([HAVE_DECL_ASINL]) - HAVE_DECL_ATANL=1; AC_SUBST([HAVE_DECL_ATANL]) - HAVE_DECL_CBRTF=1; AC_SUBST([HAVE_DECL_CBRTF]) - HAVE_DECL_CBRTL=1; AC_SUBST([HAVE_DECL_CBRTL]) - HAVE_DECL_CEILF=1; AC_SUBST([HAVE_DECL_CEILF]) - HAVE_DECL_CEILL=1; AC_SUBST([HAVE_DECL_CEILL]) - HAVE_DECL_COPYSIGNF=1; AC_SUBST([HAVE_DECL_COPYSIGNF]) - HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL]) - HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL]) - HAVE_DECL_EXP2=1; AC_SUBST([HAVE_DECL_EXP2]) - HAVE_DECL_EXP2F=1; AC_SUBST([HAVE_DECL_EXP2F]) - HAVE_DECL_EXP2L=1; AC_SUBST([HAVE_DECL_EXP2L]) - HAVE_DECL_EXPM1L=1; AC_SUBST([HAVE_DECL_EXPM1L]) - HAVE_DECL_FLOORF=1; AC_SUBST([HAVE_DECL_FLOORF]) - HAVE_DECL_FLOORL=1; AC_SUBST([HAVE_DECL_FLOORL]) - HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL]) - HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL]) - HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL]) - HAVE_DECL_LOG10L=1; AC_SUBST([HAVE_DECL_LOG10L]) - HAVE_DECL_LOG2=1; AC_SUBST([HAVE_DECL_LOG2]) - HAVE_DECL_LOG2F=1; AC_SUBST([HAVE_DECL_LOG2F]) - HAVE_DECL_LOG2L=1; AC_SUBST([HAVE_DECL_LOG2L]) - HAVE_DECL_LOGB=1; AC_SUBST([HAVE_DECL_LOGB]) - HAVE_DECL_REMAINDER=1; AC_SUBST([HAVE_DECL_REMAINDER]) - HAVE_DECL_REMAINDERL=1; AC_SUBST([HAVE_DECL_REMAINDERL]) - HAVE_DECL_RINTF=1; AC_SUBST([HAVE_DECL_RINTF]) - HAVE_DECL_ROUND=1; AC_SUBST([HAVE_DECL_ROUND]) - HAVE_DECL_ROUNDF=1; AC_SUBST([HAVE_DECL_ROUNDF]) - HAVE_DECL_ROUNDL=1; AC_SUBST([HAVE_DECL_ROUNDL]) - HAVE_DECL_SINL=1; AC_SUBST([HAVE_DECL_SINL]) - HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL]) - HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL]) - HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC]) - HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF]) - HAVE_DECL_TRUNCL=1; AC_SUBST([HAVE_DECL_TRUNCL]) - REPLACE_ACOSF=0; AC_SUBST([REPLACE_ACOSF]) - REPLACE_ASINF=0; AC_SUBST([REPLACE_ASINF]) - REPLACE_ATANF=0; AC_SUBST([REPLACE_ATANF]) - REPLACE_ATAN2F=0; AC_SUBST([REPLACE_ATAN2F]) - REPLACE_CBRTF=0; AC_SUBST([REPLACE_CBRTF]) - REPLACE_CBRTL=0; AC_SUBST([REPLACE_CBRTL]) - REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL]) - REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF]) - REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL]) - REPLACE_COSF=0; AC_SUBST([REPLACE_COSF]) - REPLACE_COSHF=0; AC_SUBST([REPLACE_COSHF]) - REPLACE_EXPF=0; AC_SUBST([REPLACE_EXPF]) - REPLACE_EXPL=0; AC_SUBST([REPLACE_EXPL]) - REPLACE_EXPM1=0; AC_SUBST([REPLACE_EXPM1]) - REPLACE_EXPM1F=0; AC_SUBST([REPLACE_EXPM1F]) - REPLACE_EXPM1L=0; AC_SUBST([REPLACE_EXPM1L]) - REPLACE_EXP2=0; AC_SUBST([REPLACE_EXP2]) - REPLACE_EXP2L=0; AC_SUBST([REPLACE_EXP2L]) - REPLACE_FABSL=0; AC_SUBST([REPLACE_FABSL]) - REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR]) - REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF]) - REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL]) - REPLACE_FMA=0; AC_SUBST([REPLACE_FMA]) - REPLACE_FMAF=0; AC_SUBST([REPLACE_FMAF]) - REPLACE_FMAL=0; AC_SUBST([REPLACE_FMAL]) - REPLACE_FMOD=0; AC_SUBST([REPLACE_FMOD]) - REPLACE_FMODF=0; AC_SUBST([REPLACE_FMODF]) - REPLACE_FMODL=0; AC_SUBST([REPLACE_FMODL]) - REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF]) - REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP]) - REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL]) - REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL]) - REPLACE_HYPOT=0; AC_SUBST([REPLACE_HYPOT]) - REPLACE_HYPOTF=0; AC_SUBST([REPLACE_HYPOTF]) - REPLACE_HYPOTL=0; AC_SUBST([REPLACE_HYPOTL]) - REPLACE_ILOGB=0; AC_SUBST([REPLACE_ILOGB]) - REPLACE_ILOGBF=0; AC_SUBST([REPLACE_ILOGBF]) - REPLACE_ILOGBL=0; AC_SUBST([REPLACE_ILOGBL]) - REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE]) - REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF]) - REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN]) - REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL]) - REPLACE_LOG=0; AC_SUBST([REPLACE_LOG]) - REPLACE_LOGF=0; AC_SUBST([REPLACE_LOGF]) - REPLACE_LOGL=0; AC_SUBST([REPLACE_LOGL]) - REPLACE_LOG10=0; AC_SUBST([REPLACE_LOG10]) - REPLACE_LOG10F=0; AC_SUBST([REPLACE_LOG10F]) - REPLACE_LOG10L=0; AC_SUBST([REPLACE_LOG10L]) - REPLACE_LOG1P=0; AC_SUBST([REPLACE_LOG1P]) - REPLACE_LOG1PF=0; AC_SUBST([REPLACE_LOG1PF]) - REPLACE_LOG1PL=0; AC_SUBST([REPLACE_LOG1PL]) - REPLACE_LOG2=0; AC_SUBST([REPLACE_LOG2]) - REPLACE_LOG2F=0; AC_SUBST([REPLACE_LOG2F]) - REPLACE_LOG2L=0; AC_SUBST([REPLACE_LOG2L]) - REPLACE_LOGB=0; AC_SUBST([REPLACE_LOGB]) - REPLACE_LOGBF=0; AC_SUBST([REPLACE_LOGBF]) - REPLACE_LOGBL=0; AC_SUBST([REPLACE_LOGBL]) - REPLACE_MODF=0; AC_SUBST([REPLACE_MODF]) - REPLACE_MODFF=0; AC_SUBST([REPLACE_MODFF]) - REPLACE_MODFL=0; AC_SUBST([REPLACE_MODFL]) - REPLACE_NAN=0; AC_SUBST([REPLACE_NAN]) - REPLACE_REMAINDER=0; AC_SUBST([REPLACE_REMAINDER]) - REPLACE_REMAINDERF=0; AC_SUBST([REPLACE_REMAINDERF]) - REPLACE_REMAINDERL=0; AC_SUBST([REPLACE_REMAINDERL]) - REPLACE_RINTL=0; AC_SUBST([REPLACE_RINTL]) - REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND]) - REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF]) - REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL]) - REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT]) - REPLACE_SIGNBIT_USING_BUILTINS=0; AC_SUBST([REPLACE_SIGNBIT_USING_BUILTINS]) - REPLACE_SINF=0; AC_SUBST([REPLACE_SINF]) - REPLACE_SINHF=0; AC_SUBST([REPLACE_SINHF]) - REPLACE_SQRTF=0; AC_SUBST([REPLACE_SQRTF]) - REPLACE_SQRTL=0; AC_SUBST([REPLACE_SQRTL]) - REPLACE_TANF=0; AC_SUBST([REPLACE_TANF]) - REPLACE_TANHF=0; AC_SUBST([REPLACE_TANHF]) - REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC]) - REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF]) - REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL]) -]) - -# gl_LONG_DOUBLE_VS_DOUBLE -# determines whether 'long double' and 'double' have the same representation. -# Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines -# HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly. -# The currently known platforms where this is the case are: -# Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9. -AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE], -[ - AC_CACHE_CHECK([whether long double and double are the same], - [gl_cv_long_double_equals_double], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[#include ]], - [[typedef int check[sizeof (long double) == sizeof (double) - && LDBL_MANT_DIG == DBL_MANT_DIG - && LDBL_MAX_EXP == DBL_MAX_EXP - && LDBL_MIN_EXP == DBL_MIN_EXP - ? 1 : -1]; - ]])], - [gl_cv_long_double_equals_double=yes], - [gl_cv_long_double_equals_double=no]) - ]) - if test $gl_cv_long_double_equals_double = yes; then - AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1], - [Define to 1 if 'long double' and 'double' have the same representation.]) - HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1 - else - HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0 - fi - AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]) -]) diff --git a/m4/printf-frexp.m4 b/m4/printf-frexp.m4 deleted file mode 100644 index 8f5844a2c1c..00000000000 --- a/m4/printf-frexp.m4 +++ /dev/null @@ -1,38 +0,0 @@ -# printf-frexp.m4 serial 5 -dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Check how to define printf_frexp() without linking with libm. - -AC_DEFUN([gl_FUNC_PRINTF_FREXP], -[ - AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM]) - if test $gl_cv_func_frexp_no_libm = yes; then - gl_FUNC_FREXP_WORKS - case "$gl_cv_func_frexp_works" in - *yes) - AC_DEFINE([HAVE_FREXP_IN_LIBC], [1], - [Define if the frexp function is available in libc.]) - ;; - esac - fi - - AC_CACHE_CHECK([whether ldexp can be used without linking with libm], - [gl_cv_func_ldexp_no_libm], - [ - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include - double x; - int y;]], - [[return ldexp (x, y) < 1;]])], - [gl_cv_func_ldexp_no_libm=yes], - [gl_cv_func_ldexp_no_libm=no]) - ]) - if test $gl_cv_func_ldexp_no_libm = yes; then - AC_DEFINE([HAVE_LDEXP_IN_LIBC], [1], - [Define if the ldexp function is available in libc.]) - fi -]) diff --git a/m4/printf-frexpl.m4 b/m4/printf-frexpl.m4 deleted file mode 100644 index aee170ffd39..00000000000 --- a/m4/printf-frexpl.m4 +++ /dev/null @@ -1,48 +0,0 @@ -# printf-frexpl.m4 serial 10 -dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Check how to define printf_frexpl() without linking with libm. - -AC_DEFUN([gl_FUNC_PRINTF_FREXPL], -[ - AC_REQUIRE([gl_MATH_H_DEFAULTS]) - AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) - - dnl Subset of gl_FUNC_FREXPL_NO_LIBM. - gl_CHECK_FREXPL_NO_LIBM - if test $gl_cv_func_frexpl_no_libm = yes; then - gl_FUNC_FREXPL_WORKS - case "$gl_cv_func_frexpl_works" in - *yes) gl_func_frexpl_no_libm=yes ;; - *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; - esac - else - gl_func_frexpl_no_libm=no - dnl Set REPLACE_FREXPL here because the system may have frexpl in libm. - REPLACE_FREXPL=1 - fi - if test $gl_func_frexpl_no_libm = yes; then - AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1], - [Define if the frexpl function is available in libc.]) - dnl Also check whether it's declared. - dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in . - AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include ]]) - fi - - gl_CHECK_LDEXPL_NO_LIBM - if test $gl_cv_func_ldexpl_no_libm = yes; then - gl_FUNC_LDEXPL_WORKS - case "$gl_cv_func_ldexpl_works" in - *yes) - AC_DEFINE([HAVE_LDEXPL_IN_LIBC], [1], - [Define if the ldexpl function is available in libc.]) - dnl Also check whether it's declared. - dnl Mac OS X 10.3 has ldexpl() in libc but doesn't declare it in . - AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [[#include ]]) - ;; - esac - fi -]) diff --git a/m4/printf-posix.m4 b/m4/printf-posix.m4 deleted file mode 100644 index 9aebf4002d6..00000000000 --- a/m4/printf-posix.m4 +++ /dev/null @@ -1,36 +0,0 @@ -# printf-posix.m4 serial 5 -dnl Copyright (C) 2007-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_PRINTF_POSIX], -[ - AC_REQUIRE([gl_FUNC_PRINTF_IS_POSIX]) - if test $gl_cv_func_printf_posix = no; then - gl_PREREQ_VASNPRINTF_WITH_POSIX_EXTRAS - gl_REPLACE_VASNPRINTF - gl_REPLACE_PRINTF - fi -]) - -dnl Test whether printf is POSIX compliant. -dnl Result is gl_cv_func_printf_posix. -AC_DEFUN([gl_FUNC_PRINTF_IS_POSIX], -[ - AC_REQUIRE([gl_FUNC_VFPRINTF_IS_POSIX]) - gl_cv_func_printf_posix="$gl_cv_func_vfprintf_posix" -]) - -AC_DEFUN([gl_REPLACE_PRINTF], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - AC_REQUIRE([gl_ASM_SYMBOL_PREFIX]) - AC_LIBOBJ([printf]) - REPLACE_PRINTF=1 - AC_DEFINE([REPLACE_PRINTF_POSIX], [1], - [Define if printf is overridden by a POSIX compliant gnulib implementation.]) - gl_PREREQ_PRINTF -]) - -AC_DEFUN([gl_PREREQ_PRINTF], [:]) diff --git a/m4/printf.m4 b/m4/printf.m4 deleted file mode 100644 index 8b8f01067fc..00000000000 --- a/m4/printf.m4 +++ /dev/null @@ -1,2158 +0,0 @@ -# printf.m4 serial 84 -dnl Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Test whether the *printf family of functions supports the 'j', 'z', 't', -dnl 'L' size specifiers. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_sizes_c99. - -AC_DEFUN([gl_PRINTF_SIZES_C99], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([gl_AC_HEADER_STDINT_H]) - AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports size specifiers as in C99], - [gl_cv_func_printf_sizes_c99], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -#include -#if HAVE_STDINT_H_WITH_UINTMAX -# include -#endif -#if HAVE_INTTYPES_H_WITH_UINTMAX -# include -#endif -static char buf[100]; -int main () -{ - int result = 0; -#if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX - buf[0] = '\0'; - if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0 - || strcmp (buf, "12345671 33") != 0) - result |= 1; -#else - result |= 1; -#endif - buf[0] = '\0'; - if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0 - || strcmp (buf, "12345672 33") != 0) - result |= 2; - buf[0] = '\0'; - if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0 - || strcmp (buf, "12345673 33") != 0) - result |= 4; - buf[0] = '\0'; - if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0 - || strcmp (buf, "1.5 33") != 0) - result |= 8; - return result; -}]])], - [gl_cv_func_printf_sizes_c99=yes], - [gl_cv_func_printf_sizes_c99=no], - [ - case "$host_os" in -changequote(,)dnl - # Guess yes on glibc systems. - *-gnu* | gnu*) gl_cv_func_printf_sizes_c99="guessing yes";; - # Guess yes on musl systems. - *-musl* | midipix*) gl_cv_func_printf_sizes_c99="guessing yes";; - # Guess yes on FreeBSD >= 5. - freebsd[1-4].*) gl_cv_func_printf_sizes_c99="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";; - midnightbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_printf_sizes_c99="guessing no";; - darwin*) gl_cv_func_printf_sizes_c99="guessing yes";; - # Guess yes on OpenBSD >= 3.9. - openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) - gl_cv_func_printf_sizes_c99="guessing no";; - openbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; - # Guess yes on Solaris >= 2.10. - solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; - solaris*) gl_cv_func_printf_sizes_c99="guessing no";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_printf_sizes_c99="guessing no";; - netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; - # Guess yes on Android. - linux*-android*) gl_cv_func_printf_sizes_c99="guessing yes";; -changequote([,])dnl - # Guess yes on MSVC, no on mingw. - mingw*) AC_EGREP_CPP([Known], [ -#ifdef _MSC_VER - Known -#endif - ], - [gl_cv_func_printf_sizes_c99="guessing yes"], - [gl_cv_func_printf_sizes_c99="guessing no"]) - ;; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_printf_sizes_c99="$gl_cross_guess_normal";; - esac - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports the 'w8', 'w16', -dnl 'w32', 'w64', 'wf8', 'wf16', 'wf32', 'wf64' size specifiers. (ISO C23) -dnl Result is gl_cv_func_printf_sizes_c23. - -AC_DEFUN([gl_PRINTF_SIZES_C23], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([gl_AC_HEADER_STDINT_H]) - AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports size specifiers as in C23], - [gl_cv_func_printf_sizes_c23], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -#include -#if HAVE_STDINT_H_WITH_UINTMAX -# include -#endif -#if HAVE_INTTYPES_H_WITH_UINTMAX -# include -#endif -static char buf[100]; -int main () -{ - int result = 0; - buf[0] = '\0'; - if (sprintf (buf, "%w8u %d", (uint8_t) 123, 33, 44, 55) < 0 - || strcmp (buf, "123 33") != 0) - result |= 1; - buf[0] = '\0'; - if (sprintf (buf, "%wf8u %d", (uint_fast8_t) 123, 33, 44, 55) < 0 - || strcmp (buf, "123 33") != 0) - result |= 1; - buf[0] = '\0'; - if (sprintf (buf, "%w16u %d", (uint16_t) 12345, 33, 44, 55) < 0 - || strcmp (buf, "12345 33") != 0) - result |= 2; - buf[0] = '\0'; - if (sprintf (buf, "%wf16u %d", (uint_fast16_t) 12345, 33, 44, 55) < 0 - || strcmp (buf, "12345 33") != 0) - result |= 2; - buf[0] = '\0'; - if (sprintf (buf, "%w32u %d", (uint32_t) 12345671, 33, 44, 55) < 0 - || strcmp (buf, "12345671 33") != 0) - result |= 4; - buf[0] = '\0'; - if (sprintf (buf, "%wf32u %d", (uint_fast32_t) 12345671, 33, 44, 55) < 0 - || strcmp (buf, "12345671 33") != 0) - result |= 4; -#if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX - buf[0] = '\0'; - if (sprintf (buf, "%w64u %d", (uint64_t) 12345671, 33, 44, 55) < 0 - || strcmp (buf, "12345671 33") != 0) - result |= 8; - buf[0] = '\0'; - if (sprintf (buf, "%wf64u %d", (uint_fast64_t) 12345671, 33, 44, 55) < 0 - || strcmp (buf, "12345671 33") != 0) - result |= 8; -#else - result |= 8; -#endif - return result; -}]])], - [gl_cv_func_printf_sizes_c23=yes], - [gl_cv_func_printf_sizes_c23=no], - [ - case "$host_os" in - # Guess no on glibc systems. - *-gnu* | gnu*) gl_cv_func_printf_sizes_c23="guessing no";; - # Guess no on musl systems. - *-musl* | midipix*) gl_cv_func_printf_sizes_c23="guessing no";; - # Guess no on Android. - linux*-android*) gl_cv_func_printf_sizes_c23="guessing no";; - # Guess no on native Windows. - mingw*) gl_cv_func_printf_sizes_c23="guessing no";; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_printf_sizes_c23="$gl_cross_guess_normal";; - esac - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports 'long double' -dnl arguments together with the 'L' size specifier. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_long_double. - -AC_DEFUN([gl_PRINTF_LONG_DOUBLE], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports 'long double' arguments], - [gl_cv_func_printf_long_double], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[10000]; -int main () -{ - int result = 0; - buf[0] = '\0'; - if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0 - || strcmp (buf, "1.750000 33") != 0) - result |= 1; - buf[0] = '\0'; - if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0 - || strcmp (buf, "1.750000e+00 33") != 0) - result |= 2; - buf[0] = '\0'; - if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0 - || strcmp (buf, "1.75 33") != 0) - result |= 4; - return result; -}]])], - [gl_cv_func_printf_long_double=yes], - [gl_cv_func_printf_long_double=no], - [case "$host_os" in - # Guess no on BeOS. - beos*) gl_cv_func_printf_long_double="guessing no";; - # Guess yes on Android. - linux*-android*) gl_cv_func_printf_long_double="guessing yes";; - # Guess yes on MSVC, no on mingw. - mingw*) AC_EGREP_CPP([Known], [ -#ifdef _MSC_VER - Known -#endif - ], - [gl_cv_func_printf_long_double="guessing yes"], - [gl_cv_func_printf_long_double="guessing no"]) - ;; - *) gl_cv_func_printf_long_double="guessing yes";; - esac - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports infinite and NaN -dnl 'double' arguments and negative zero arguments in the %f, %e, %g -dnl directives. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_infinite. - -AC_DEFUN([gl_PRINTF_INFINITE], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports infinite 'double' arguments], - [gl_cv_func_printf_infinite], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static int -strisnan (const char *string, size_t start_index, size_t end_index) -{ - if (start_index < end_index) - { - if (string[start_index] == '-') - start_index++; - if (start_index + 3 <= end_index - && memcmp (string + start_index, "nan", 3) == 0) - { - start_index += 3; - if (start_index == end_index - || (string[start_index] == '(' && string[end_index - 1] == ')')) - return 1; - } - } - return 0; -} -static int -have_minus_zero () -{ - static double plus_zero = 0.0; - double minus_zero = - plus_zero; - return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; -} -static char buf[10000]; -static double zero = 0.0; -int main () -{ - int result = 0; - if (sprintf (buf, "%f", 1.0 / zero) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 1; - if (sprintf (buf, "%f", -1.0 / zero) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 1; - if (sprintf (buf, "%f", zero / zero) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - if (sprintf (buf, "%e", 1.0 / zero) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 4; - if (sprintf (buf, "%e", -1.0 / zero) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 4; - if (sprintf (buf, "%e", zero / zero) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 8; - if (sprintf (buf, "%g", 1.0 / zero) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 16; - if (sprintf (buf, "%g", -1.0 / zero) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 16; - if (sprintf (buf, "%g", zero / zero) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 32; - /* This test fails on HP-UX 10.20. */ - if (have_minus_zero ()) - if (sprintf (buf, "%g", - zero) < 0 - || strcmp (buf, "-0") != 0) - result |= 64; - return result; -}]])], - [gl_cv_func_printf_infinite=yes], - [gl_cv_func_printf_infinite=no], - [ - case "$host_os" in -changequote(,)dnl - # Guess yes on glibc systems. - *-gnu* | gnu*) gl_cv_func_printf_infinite="guessing yes";; - # Guess yes on musl systems. - *-musl* | midipix*) gl_cv_func_printf_infinite="guessing yes";; - # Guess yes on FreeBSD >= 6. - freebsd[1-5].*) gl_cv_func_printf_infinite="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";; - midnightbsd*) gl_cv_func_printf_infinite="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";; - darwin*) gl_cv_func_printf_infinite="guessing yes";; - # Guess yes on HP-UX >= 11. - hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";; - hpux*) gl_cv_func_printf_infinite="guessing yes";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_printf_infinite="guessing no";; - netbsd*) gl_cv_func_printf_infinite="guessing yes";; - # Guess yes on OpenBSD >= 6.0. - openbsd[1-5].*) gl_cv_func_printf_infinite="guessing no";; - openbsd*) gl_cv_func_printf_infinite="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_printf_infinite="guessing yes";; - # Guess no on Android. - linux*-android*) gl_cv_func_printf_infinite="guessing no";; -changequote([,])dnl - # Guess yes on MSVC, no on mingw. - mingw*) AC_EGREP_CPP([Known], [ -#ifdef _MSC_VER - Known -#endif - ], - [gl_cv_func_printf_infinite="guessing yes"], - [gl_cv_func_printf_infinite="guessing no"]) - ;; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_printf_infinite="$gl_cross_guess_normal";; - esac - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports infinite and NaN -dnl 'long double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_infinite_long_double. - -AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE], -[ - AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([gl_BIGENDIAN]) - AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - dnl The user can set or unset the variable gl_printf_safe to indicate - dnl that he wishes a safe handling of non-IEEE-754 'long double' values. - if test -n "$gl_printf_safe"; then - AC_DEFINE([CHECK_PRINTF_SAFE], [1], - [Define if you wish *printf() functions that have a safe handling of - non-IEEE-754 'long double' values.]) - fi - case "$gl_cv_func_printf_long_double" in - *yes) - AC_CACHE_CHECK([whether printf supports infinite 'long double' arguments], - [gl_cv_func_printf_infinite_long_double], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -]GL_NOCRASH[ -#include -#include -#include -static int -strisnan (const char *string, size_t start_index, size_t end_index) -{ - if (start_index < end_index) - { - if (string[start_index] == '-') - start_index++; - if (start_index + 3 <= end_index - && memcmp (string + start_index, "nan", 3) == 0) - { - start_index += 3; - if (start_index == end_index - || (string[start_index] == '(' && string[end_index - 1] == ')')) - return 1; - } - } - return 0; -} -static char buf[10000]; -static long double zeroL = 0.0L; -int main () -{ - int result = 0; - nocrash_init(); - if (sprintf (buf, "%Lf", 1.0L / zeroL) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Lf", -1.0L / zeroL) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Lf", zeroL / zeroL) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 1; - if (sprintf (buf, "%Le", 1.0L / zeroL) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Le", -1.0L / zeroL) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Le", zeroL / zeroL) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 1; - if (sprintf (buf, "%Lg", 1.0L / zeroL) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Lg", -1.0L / zeroL) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 1; -#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE -/* Representation of an 80-bit 'long double' as an initializer for a sequence - of 'unsigned int' words. */ -# ifdef WORDS_BIGENDIAN -# define LDBL80_WORDS(exponent,manthi,mantlo) \ - { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ - ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ - (unsigned int) (mantlo) << 16 \ - } -# else -# define LDBL80_WORDS(exponent,manthi,mantlo) \ - { mantlo, manthi, exponent } -# endif - { /* Quiet NaN. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - if (sprintf (buf, "%Le", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - if (sprintf (buf, "%Lg", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - } - { - /* Signalling NaN. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - if (sprintf (buf, "%Le", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - if (sprintf (buf, "%Lg", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - } - { /* Pseudo-NaN. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) <= 0) - result |= 4; - if (sprintf (buf, "%Le", x.value) <= 0) - result |= 4; - if (sprintf (buf, "%Lg", x.value) <= 0) - result |= 4; - } - { /* Pseudo-Infinity. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) <= 0) - result |= 8; - if (sprintf (buf, "%Le", x.value) <= 0) - result |= 8; - if (sprintf (buf, "%Lg", x.value) <= 0) - result |= 8; - } - { /* Pseudo-Zero. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) <= 0) - result |= 16; - if (sprintf (buf, "%Le", x.value) <= 0) - result |= 16; - if (sprintf (buf, "%Lg", x.value) <= 0) - result |= 16; - } - { /* Unnormalized number. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) <= 0) - result |= 32; - if (sprintf (buf, "%Le", x.value) <= 0) - result |= 32; - if (sprintf (buf, "%Lg", x.value) <= 0) - result |= 32; - } - { /* Pseudo-Denormal. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) <= 0) - result |= 64; - if (sprintf (buf, "%Le", x.value) <= 0) - result |= 64; - if (sprintf (buf, "%Lg", x.value) <= 0) - result |= 64; - } -#endif - return result; -}]])], - [gl_cv_func_printf_infinite_long_double=yes], - [gl_cv_func_printf_infinite_long_double=no], - [case "$host_cpu" in - # Guess no on ia64, x86_64, i386. - ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";; - *) - case "$host_os" in -changequote(,)dnl - # Guess yes on glibc systems. - *-gnu* | gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";; - # Guess yes on musl systems. - *-musl* | midipix*) gl_cv_func_printf_infinite_long_double="guessing yes";; - # Guess yes on FreeBSD >= 6. - freebsd[1-5].*) gl_cv_func_printf_infinite_long_double="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; - midnightbsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; - # Guess yes on HP-UX >= 11. - hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";; - hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";; - # Guess yes on OpenBSD >= 6.0. - openbsd[1-5].*) gl_cv_func_printf_infinite_long_double="guessing no";; - openbsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; - # Guess no on Android. - linux*-android*) gl_cv_func_printf_infinite_long_double="guessing no";; -changequote([,])dnl - # Guess yes on MSVC, no on mingw. - mingw*) AC_EGREP_CPP([Known], [ -#ifdef _MSC_VER - Known -#endif - ], - [gl_cv_func_printf_infinite_long_double="guessing yes"], - [gl_cv_func_printf_infinite_long_double="guessing no"]) - ;; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_printf_infinite_long_double="$gl_cross_guess_normal";; - esac - ;; - esac - ]) - ]) - ;; - *) - gl_cv_func_printf_infinite_long_double="irrelevant" - ;; - esac -]) - -dnl Test whether the *printf family of functions supports the 'a' and 'A' -dnl conversion specifier for hexadecimal output of floating-point numbers. -dnl (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_directive_a. - -AC_DEFUN([gl_PRINTF_DIRECTIVE_A], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the 'a' and 'A' directives], - [gl_cv_func_printf_directive_a], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[100]; -static double zero = 0.0; -int main () -{ - int result = 0; - if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 - || (strcmp (buf, "0x1.922p+1 33") != 0 - && strcmp (buf, "0x3.244p+0 33") != 0 - && strcmp (buf, "0x6.488p-1 33") != 0 - && strcmp (buf, "0xc.91p-2 33") != 0)) - result |= 1; - if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 - || (strcmp (buf, "-0X1.922P+1 33") != 0 - && strcmp (buf, "-0X3.244P+0 33") != 0 - && strcmp (buf, "-0X6.488P-1 33") != 0 - && strcmp (buf, "-0XC.91P-2 33") != 0)) - result |= 2; - /* This catches a FreeBSD 13.0 bug: it doesn't round. */ - if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 - || (strcmp (buf, "0x1.83p+0 33") != 0 - && strcmp (buf, "0x3.05p-1 33") != 0 - && strcmp (buf, "0x6.0ap-2 33") != 0 - && strcmp (buf, "0xc.14p-3 33") != 0)) - result |= 4; - /* This catches a Mac OS X 10.12.4 (Darwin 16.5) bug: it doesn't round. */ - if (sprintf (buf, "%.0a %d", 1.51, 33, 44, 55) < 0 - || (strcmp (buf, "0x2p+0 33") != 0 - && strcmp (buf, "0x3p-1 33") != 0 - && strcmp (buf, "0x6p-2 33") != 0 - && strcmp (buf, "0xcp-3 33") != 0)) - result |= 4; - /* This catches a FreeBSD 6.1 bug. See - */ - if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0 - || buf[0] == '0') - result |= 8; - /* This catches a Mac OS X 10.3.9 (Darwin 7.9) bug. */ - if (sprintf (buf, "%.1a", 1.999) < 0 - || (strcmp (buf, "0x1.0p+1") != 0 - && strcmp (buf, "0x2.0p+0") != 0 - && strcmp (buf, "0x4.0p-1") != 0 - && strcmp (buf, "0x8.0p-2") != 0)) - result |= 16; - /* This catches the same Mac OS X 10.3.9 (Darwin 7.9) bug and also a - glibc 2.4 bug . */ - if (sprintf (buf, "%.1La", 1.999L) < 0 - || (strcmp (buf, "0x1.0p+1") != 0 - && strcmp (buf, "0x2.0p+0") != 0 - && strcmp (buf, "0x4.0p-1") != 0 - && strcmp (buf, "0x8.0p-2") != 0)) - result |= 32; - return result; -}]])], - [gl_cv_func_printf_directive_a=yes], - [gl_cv_func_printf_directive_a=no], - [ - case "$host_os" in - # Guess yes on glibc >= 2.5 systems. - *-gnu* | gnu*) - AC_EGREP_CPP([BZ2908], [ - #include - #ifdef __GNU_LIBRARY__ - #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)) && !defined __UCLIBC__ - BZ2908 - #endif - #endif - ], - [gl_cv_func_printf_directive_a="guessing yes"], - [gl_cv_func_printf_directive_a="guessing no"]) - ;; - # Guess yes on musl systems. - *-musl* | midipix*) gl_cv_func_printf_directive_a="guessing yes";; - # Guess no on Android. - linux*-android*) gl_cv_func_printf_directive_a="guessing no";; - # Guess no on native Windows. - mingw*) gl_cv_func_printf_directive_a="guessing no";; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_printf_directive_a="$gl_cross_guess_normal";; - esac - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports the 'b' conversion -dnl specifier for binary output of integers. -dnl (ISO C23) -dnl Result is gl_cv_func_printf_directive_b. - -AC_DEFUN([gl_PRINTF_DIRECTIVE_B], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the 'b' directive], - [gl_cv_func_printf_directive_b], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[100]; -int main () -{ - int result = 0; - if (sprintf (buf, "%b %d", 12345, 33, 44, 55) < 0 - || strcmp (buf, "11000000111001 33") != 0) - result |= 1; - return result; -}]])], - [gl_cv_func_printf_directive_b=yes], - [gl_cv_func_printf_directive_b=no], - [ - case "$host_os" in - # Guess yes on glibc >= 2.35 systems. - *-gnu* | gnu*) - AC_EGREP_CPP([Lucky], [ - #include - #ifdef __GNU_LIBRARY__ - #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 35) || (__GLIBC__ > 2) - Lucky user - #endif - #endif - ], - [gl_cv_func_printf_directive_uppercase_b="guessing yes"], - [gl_cv_func_printf_directive_uppercase_b="guessing no"]) - ;; - # Guess no on musl systems. - *-musl* | midipix*) gl_cv_func_printf_directive_b="guessing no";; - # Guess no on Android. - linux*-android*) gl_cv_func_printf_directive_b="guessing no";; - # Guess no on native Windows. - mingw*) gl_cv_func_printf_directive_b="guessing no";; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_printf_directive_b="$gl_cross_guess_normal";; - esac - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports the 'B' conversion -dnl specifier for binary output of integers. -dnl (GNU, encouraged by ISO C23 § 7.23.6.1) -dnl Result is gl_cv_func_printf_directive_uppercase_b. - -AC_DEFUN([gl_PRINTF_DIRECTIVE_UPPERCASE_B], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the 'B' directive], - [gl_cv_func_printf_directive_uppercase_b], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[100]; -int main () -{ - int result = 0; - if (sprintf (buf, "%#B %d", 12345, 33, 44, 55) < 0 - || strcmp (buf, "0B11000000111001 33") != 0) - result |= 1; - return result; -}]])], - [gl_cv_func_printf_directive_uppercase_b=yes], - [gl_cv_func_printf_directive_uppercase_b=no], - [ - case "$host_os" in - # Guess yes on glibc >= 2.35 systems. - *-gnu* | gnu*) - AC_EGREP_CPP([Lucky], [ - #include - #ifdef __GNU_LIBRARY__ - #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 35) || (__GLIBC__ > 2) - Lucky user - #endif - #endif - ], - [gl_cv_func_printf_directive_uppercase_b="guessing yes"], - [gl_cv_func_printf_directive_uppercase_b="guessing no"]) - ;; - # Guess no on musl systems. - *-musl* | midipix*) gl_cv_func_printf_directive_uppercase_b="guessing no";; - # Guess no on Android. - linux*-android*) gl_cv_func_printf_directive_uppercase_b="guessing no";; - # Guess no on native Windows. - mingw*) gl_cv_func_printf_directive_uppercase_b="guessing no";; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_printf_directive_uppercase_b="$gl_cross_guess_normal";; - esac - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports the %F format -dnl directive. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_directive_f. - -AC_DEFUN([gl_PRINTF_DIRECTIVE_F], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the 'F' directive], - [gl_cv_func_printf_directive_f], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[100]; -static double zero = 0.0; -int main () -{ - int result = 0; - if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0 - || strcmp (buf, "1234567.000000 33") != 0) - result |= 1; - if (sprintf (buf, "%F", 1.0 / zero) < 0 - || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0)) - result |= 2; - /* This catches a Cygwin 1.5.x bug. */ - if (sprintf (buf, "%.F", 1234.0) < 0 - || strcmp (buf, "1234") != 0) - result |= 4; - return result; -}]])], - [gl_cv_func_printf_directive_f=yes], - [gl_cv_func_printf_directive_f=no], - [ - case "$host_os" in -changequote(,)dnl - # Guess yes on glibc systems. - *-gnu* | gnu*) gl_cv_func_printf_directive_f="guessing yes";; - # Guess yes on musl systems. - *-musl* | midipix*) gl_cv_func_printf_directive_f="guessing yes";; - # Guess yes on FreeBSD >= 6. - freebsd[1-5].*) gl_cv_func_printf_directive_f="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";; - midnightbsd*) gl_cv_func_printf_directive_f="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";; - darwin*) gl_cv_func_printf_directive_f="guessing yes";; - # Guess yes on OpenBSD >= 6.0. - openbsd[1-5].*) gl_cv_func_printf_directive_f="guessing no";; - openbsd*) gl_cv_func_printf_directive_f="guessing yes";; - # Guess yes on Solaris >= 2.10. - solaris2.[1-9][0-9]*) gl_cv_func_printf_directive_f="guessing yes";; - solaris*) gl_cv_func_printf_directive_f="guessing no";; - # Guess no on Android. - linux*-android*) gl_cv_func_printf_directive_f="guessing no";; -changequote([,])dnl - # Guess yes on MSVC, no on mingw. - mingw*) AC_EGREP_CPP([Known], [ -#ifdef _MSC_VER - Known -#endif - ], - [gl_cv_func_printf_directive_f="guessing yes"], - [gl_cv_func_printf_directive_f="guessing no"]) - ;; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_printf_directive_f="$gl_cross_guess_normal";; - esac - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports the %n format -dnl directive. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_directive_n. - -AC_DEFUN([gl_PRINTF_DIRECTIVE_N], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the 'n' directive], - [gl_cv_func_printf_directive_n], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -#ifdef _MSC_VER -#include -/* See page about "Parameter Validation" on msdn.microsoft.com. - - */ -static void cdecl -invalid_parameter_handler (const wchar_t *expression, - const wchar_t *function, - const wchar_t *file, unsigned int line, - uintptr_t dummy) -{ - exit (1); -} -#endif -static char fmtstring[10]; -static char buf[100]; -int main () -{ - int count = -1; -#ifdef _MSC_VER - _set_invalid_parameter_handler (invalid_parameter_handler); -#endif - /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) - support %n in format strings in read-only memory but not in writable - memory. */ - strcpy (fmtstring, "%d %n"); - if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0 - || strcmp (buf, "123 ") != 0 - || count != 4) - return 1; - return 0; -}]])], - [gl_cv_func_printf_directive_n=yes], - [gl_cv_func_printf_directive_n=no], - [case "$host_os" in - # Guess no on glibc when _FORTIFY_SOURCE >= 2. - *-gnu* | gnu*) AC_COMPILE_IFELSE( - [AC_LANG_SOURCE( - [[#if _FORTIFY_SOURCE >= 2 - error fail - #endif - ]])], - [gl_cv_func_printf_directive_n="guessing yes"], - [gl_cv_func_printf_directive_n="guessing no"]) - ;; - # Guess no on Android. - linux*-android*) gl_cv_func_printf_directive_n="guessing no";; - # Guess no on native Windows. - mingw*) gl_cv_func_printf_directive_n="guessing no";; - *) gl_cv_func_printf_directive_n="guessing yes";; - esac - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports the %ls format -dnl directive and in particular, when a precision is specified, whether -dnl the functions stop converting the wide string argument when the number -dnl of bytes that have been produced by this conversion equals or exceeds -dnl the precision. -dnl Result is gl_cv_func_printf_directive_ls. - -AC_DEFUN([gl_PRINTF_DIRECTIVE_LS], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the 'ls' directive], - [gl_cv_func_printf_directive_ls], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -int main () -{ - int result = 0; - char buf[100]; - /* Test whether %ls works at all. - This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on - Cygwin 1.5. */ - { - static const wchar_t wstring[] = { 'a', 'b', 'c', 0 }; - buf[0] = '\0'; - if (sprintf (buf, "%ls", wstring) < 0 - || strcmp (buf, "abc") != 0) - result |= 1; - } - /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an - assertion failure inside libc), but not on OpenBSD 4.0. */ - { - static const wchar_t wstring[] = { 'a', 0 }; - buf[0] = '\0'; - if (sprintf (buf, "%ls", wstring) < 0 - || strcmp (buf, "a") != 0) - result |= 2; - } - /* Test whether precisions in %ls are supported as specified in ISO C 99 - section 7.19.6.1: - "If a precision is specified, no more than that many bytes are written - (including shift sequences, if any), and the array shall contain a - null wide character if, to equal the multibyte character sequence - length given by the precision, the function would need to access a - wide character one past the end of the array." - This test fails on Solaris 10. */ - { - static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 }; - buf[0] = '\0'; - if (sprintf (buf, "%.2ls", wstring) < 0 - || strcmp (buf, "ab") != 0) - result |= 8; - } - return result; -}]])], - [gl_cv_func_printf_directive_ls=yes], - [gl_cv_func_printf_directive_ls=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on OpenBSD >= 6.0. - openbsd[1-5].*) gl_cv_func_printf_directive_ls="guessing no";; - openbsd*) gl_cv_func_printf_directive_ls="guessing yes";; - irix*) gl_cv_func_printf_directive_ls="guessing no";; - solaris*) gl_cv_func_printf_directive_ls="guessing no";; - cygwin*) gl_cv_func_printf_directive_ls="guessing no";; - beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";; - # Guess no on Android. - linux*-android*) gl_cv_func_printf_directive_ls="guessing no";; - # Guess yes on native Windows. - mingw*) gl_cv_func_printf_directive_ls="guessing yes";; - *) gl_cv_func_printf_directive_ls="guessing yes";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports the %lc format -dnl directive and in particular, when the argument is a null wide character, -dnl whether the functions don't produce a NUL byte. -dnl Result is gl_cv_func_printf_directive_lc. - -AC_DEFUN([gl_PRINTF_DIRECTIVE_LC], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the 'lc' directive correctly], - [gl_cv_func_printf_directive_lc], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -int main () -{ - int result = 0; - char buf[100]; - /* This test fails on glibc 2.35, FreeBSD 13.1, NetBSD 9.0, OpenBSD 7.2, - macOS 12.5, AIX 7.2, Solaris 11.4. - glibc 2.35 bug: */ - { - buf[0] = '\0'; - if (sprintf (buf, "%lc%lc%lc", (wint_t) 'a', (wint_t) 0, (wint_t) 'z') < 0 - || strcmp (buf, "az") != 0) - result |= 1; - } - return result; -}]])], - [gl_cv_func_printf_directive_lc=yes], - [gl_cv_func_printf_directive_lc=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on musl libc. - *-musl* | midipix*) gl_cv_func_printf_directive_lc="guessing yes";; - # Guess no otherwise. - *) gl_cv_func_printf_directive_lc="guessing no";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports POSIX/XSI format -dnl strings with positions. (POSIX:2001) -dnl Result is gl_cv_func_printf_positions. - -AC_DEFUN_ONCE([gl_PRINTF_POSITIONS], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports POSIX/XSI format strings with positions], - [gl_cv_func_printf_positions], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -/* The string "%2$d %1$d", with dollar characters protected from the shell's - dollar expansion (possibly an autoconf bug). */ -static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; -static char buf[100]; -int main () -{ - sprintf (buf, format, 33, 55); - return (strcmp (buf, "55 33") != 0); -}]])], - [gl_cv_func_printf_positions=yes], - [gl_cv_func_printf_positions=no], - [ -changequote(,)dnl - case "$host_os" in - netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) - gl_cv_func_printf_positions="guessing no";; - beos*) gl_cv_func_printf_positions="guessing no";; - # Guess yes on Android. - linux*-android*) gl_cv_func_printf_positions="guessing yes";; - # Guess no on native Windows. - mingw* | pw*) gl_cv_func_printf_positions="guessing no";; - *) gl_cv_func_printf_positions="guessing yes";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports POSIX/XSI format -dnl strings with the ' flag for grouping of decimal digits. (POSIX:2001) -dnl Result is gl_cv_func_printf_flag_grouping. - -AC_DEFUN([gl_PRINTF_FLAG_GROUPING], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the grouping flag], - [gl_cv_func_printf_flag_grouping], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[100]; -int main () -{ - if (sprintf (buf, "%'d %d", 1234567, 99) < 0 - || buf[strlen (buf) - 1] != '9') - return 1; - return 0; -}]])], - [gl_cv_func_printf_flag_grouping=yes], - [gl_cv_func_printf_flag_grouping=no], - [ -changequote(,)dnl - case "$host_os" in - cygwin*) gl_cv_func_printf_flag_grouping="guessing no";; - netbsd*) gl_cv_func_printf_flag_grouping="guessing no";; - # Guess no on Android. - linux*-android*) gl_cv_func_printf_flag_grouping="guessing no";; - # Guess no on native Windows. - mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";; - *) gl_cv_func_printf_flag_grouping="guessing yes";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports the - flag correctly. -dnl (ISO C99.) See -dnl -dnl Result is gl_cv_func_printf_flag_leftadjust. - -AC_DEFUN([gl_PRINTF_FLAG_LEFTADJUST], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the left-adjust flag correctly], - [gl_cv_func_printf_flag_leftadjust], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[100]; -int main () -{ - /* Check that a '-' flag is not annihilated by a negative width. */ - if (sprintf (buf, "a%-*sc", -3, "b") < 0 - || strcmp (buf, "ab c") != 0) - return 1; - return 0; -}]])], - [gl_cv_func_printf_flag_leftadjust=yes], - [gl_cv_func_printf_flag_leftadjust=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on HP-UX 11. - hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";; - # Guess no on HP-UX 10 and older. - hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";; - # Guess yes on Android. - linux*-android*) gl_cv_func_printf_flag_leftadjust="guessing yes";; - # Guess yes on native Windows. - mingw*) gl_cv_func_printf_flag_leftadjust="guessing yes";; - # Guess yes otherwise. - *) gl_cv_func_printf_flag_leftadjust="guessing yes";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports padding of non-finite -dnl values with the 0 flag correctly. (ISO C99 + TC1 + TC2.) See -dnl -dnl Result is gl_cv_func_printf_flag_zero. - -AC_DEFUN([gl_PRINTF_FLAG_ZERO], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the zero flag correctly], - [gl_cv_func_printf_flag_zero], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[100]; -static double zero = 0.0; -int main () -{ - if (sprintf (buf, "%010f", 1.0 / zero, 33, 44, 55) < 0 - || (strcmp (buf, " inf") != 0 - && strcmp (buf, " infinity") != 0)) - return 1; - return 0; -}]])], - [gl_cv_func_printf_flag_zero=yes], - [gl_cv_func_printf_flag_zero=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu* | gnu*) gl_cv_func_printf_flag_zero="guessing yes";; - # Guess yes on musl systems. - *-musl* | midipix*) gl_cv_func_printf_flag_zero="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_printf_flag_zero="guessing yes";; - # Guess no on Android. - linux*-android*) gl_cv_func_printf_flag_zero="guessing no";; - # Guess no on native Windows. - mingw*) gl_cv_func_printf_flag_zero="guessing no";; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_printf_flag_zero="$gl_cross_guess_normal";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports large precisions. -dnl On mingw, precisions larger than 512 are treated like 512, in integer, -dnl floating-point or pointer output. On Solaris 10/x86, precisions larger -dnl than 510 in floating-point output crash the program. On Solaris 10/SPARC, -dnl precisions larger than 510 in floating-point output yield wrong results. -dnl On AIX 7.1, precisions larger than 998 in floating-point output yield -dnl wrong results. On BeOS, precisions larger than 1044 crash the program. -dnl Result is gl_cv_func_printf_precision. - -AC_DEFUN([gl_PRINTF_PRECISION], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports large precisions], - [gl_cv_func_printf_precision], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[5000]; -int main () -{ - int result = 0; -#ifdef __BEOS__ - /* On BeOS, this would crash and show a dialog box. Avoid the crash. */ - return 1; -#endif - if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) - result |= 1; - if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5) - result |= 2; - if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5 - || buf[0] != '1') - result |= 4; - if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5 - || buf[0] != '1') - result |= 4; - return result; -}]])], - [gl_cv_func_printf_precision=yes], - [gl_cv_func_printf_precision=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess no only on Solaris, native Windows, and BeOS systems. - solaris*) gl_cv_func_printf_precision="guessing no" ;; - mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;; - beos*) gl_cv_func_printf_precision="guessing no" ;; - # Guess yes on Android. - linux*-android*) gl_cv_func_printf_precision="guessing yes" ;; - *) gl_cv_func_printf_precision="guessing yes" ;; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions recovers gracefully in case -dnl of an out-of-memory condition, or whether it crashes the entire program. -dnl Result is gl_cv_func_printf_enomem. - -AC_DEFUN([gl_PRINTF_ENOMEM], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([gl_MULTIARCH]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf survives out-of-memory conditions], - [gl_cv_func_printf_enomem], - [ - gl_cv_func_printf_enomem="guessing no" - if test "$cross_compiling" = no; then - if test $APPLE_UNIVERSAL_BUILD = 0; then - AC_LANG_CONFTEST([AC_LANG_SOURCE([[ -]GL_NOCRASH[ -#include -#include -#include -#include -#include -int main() -{ - struct rlimit limit; - int ret; - nocrash_init (); - /* Some printf implementations allocate temporary space with malloc. */ - /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ -#ifdef RLIMIT_DATA - if (getrlimit (RLIMIT_DATA, &limit) < 0) - return 77; - if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) - limit.rlim_max = 5000000; - limit.rlim_cur = limit.rlim_max; - if (setrlimit (RLIMIT_DATA, &limit) < 0) - return 77; -#endif - /* On Linux systems, malloc() is limited by RLIMIT_AS. */ -#ifdef RLIMIT_AS - if (getrlimit (RLIMIT_AS, &limit) < 0) - return 77; - if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) - limit.rlim_max = 5000000; - limit.rlim_cur = limit.rlim_max; - if (setrlimit (RLIMIT_AS, &limit) < 0) - return 77; -#endif - /* Some printf implementations allocate temporary space on the stack. */ -#ifdef RLIMIT_STACK - if (getrlimit (RLIMIT_STACK, &limit) < 0) - return 77; - if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) - limit.rlim_max = 5000000; - limit.rlim_cur = limit.rlim_max; - if (setrlimit (RLIMIT_STACK, &limit) < 0) - return 77; -#endif - ret = printf ("%.5000000f", 1.0); - return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); -} - ]])]) - if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then - (./conftest 2>&AS_MESSAGE_LOG_FD - result=$? - _AS_ECHO_LOG([\$? = $result]) - if test $result != 0 && test $result != 77; then result=1; fi - exit $result - ) >/dev/null 2>/dev/null - case $? in - 0) gl_cv_func_printf_enomem="yes" ;; - 77) gl_cv_func_printf_enomem="guessing no" ;; - *) gl_cv_func_printf_enomem="no" ;; - esac - else - gl_cv_func_printf_enomem="guessing no" - fi - rm -fr conftest* - else - dnl A universal build on Apple Mac OS X platforms. - dnl The result would be 'no' in 32-bit mode and 'yes' in 64-bit mode. - dnl But we need a configuration result that is valid in both modes. - gl_cv_func_printf_enomem="guessing no" - fi - fi - if test "$gl_cv_func_printf_enomem" = "guessing no"; then -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu* | gnu*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on Solaris. - solaris*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on AIX. - aix*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on HP-UX/hppa. - hpux*) case "$host_cpu" in - hppa*) gl_cv_func_printf_enomem="guessing yes";; - *) gl_cv_func_printf_enomem="guessing no";; - esac - ;; - # Guess yes on IRIX. - irix*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on OSF/1. - osf*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on Haiku. - haiku*) gl_cv_func_printf_enomem="guessing yes";; - # Guess no on Android. - linux*-android*) gl_cv_func_printf_enomem="guessing no";; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_printf_enomem="$gl_cross_guess_normal";; - esac -changequote([,])dnl - fi - ]) -]) - -dnl Test whether the snprintf function exists. (ISO C99, POSIX:2001) -dnl Result is ac_cv_func_snprintf. - -AC_DEFUN([gl_SNPRINTF_PRESENCE], -[ - AC_CHECK_FUNCS_ONCE([snprintf]) -]) - -dnl Test whether the string produced by the snprintf function is always NUL -dnl terminated. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_snprintf_truncation_c99. - -AC_DEFUN_ONCE([gl_SNPRINTF_TRUNCATION_C99], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_REQUIRE([gl_SNPRINTF_PRESENCE]) - AC_CACHE_CHECK([whether snprintf truncates the result as in C99], - [gl_cv_func_snprintf_truncation_c99], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#if HAVE_SNPRINTF -# define my_snprintf snprintf -#else -# include -static int my_snprintf (char *buf, int size, const char *format, ...) -{ - va_list args; - int ret; - va_start (args, format); - ret = vsnprintf (buf, size, format, args); - va_end (args); - return ret; -} -#endif -static char buf[100]; -int main () -{ - strcpy (buf, "ABCDEF"); - my_snprintf (buf, 3, "%d %d", 4567, 89); - if (memcmp (buf, "45\0DEF", 6) != 0) - return 1; - return 0; -}]])], - [gl_cv_func_snprintf_truncation_c99=yes], - [gl_cv_func_snprintf_truncation_c99=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu* | gnu*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on musl systems. - *-musl* | midipix*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on FreeBSD >= 5. - freebsd[1-4].*) gl_cv_func_snprintf_truncation_c99="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - midnightbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_snprintf_truncation_c99="guessing no";; - darwin*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on OpenBSD >= 3.9. - openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) - gl_cv_func_snprintf_truncation_c99="guessing no";; - openbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on Solaris >= 2.6. - solaris2.[0-5] | solaris2.[0-5].*) - gl_cv_func_snprintf_truncation_c99="guessing no";; - solaris*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on AIX >= 4. - aix[1-3]*) gl_cv_func_snprintf_truncation_c99="guessing no";; - aix*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on HP-UX >= 11. - hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";; - hpux*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on IRIX >= 6.5. - irix6.5) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on OSF/1 >= 5. - osf[3-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";; - osf*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_snprintf_truncation_c99="guessing no";; - netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on Android. - linux*-android*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess no on native Windows. - mingw*) gl_cv_func_snprintf_truncation_c99="guessing no";; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_snprintf_truncation_c99="$gl_cross_guess_normal";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the return value of the snprintf function is the number -dnl of bytes (excluding the terminating NUL) that would have been produced -dnl if the buffer had been large enough. (ISO C99, POSIX:2001) -dnl For example, this test program fails on IRIX 6.5: -dnl --------------------------------------------------------------------- -dnl #include -dnl int main() -dnl { -dnl static char buf[8]; -dnl int retval = snprintf (buf, 3, "%d", 12345); -dnl return retval >= 0 && retval < 3; -dnl } -dnl --------------------------------------------------------------------- -dnl Result is gl_cv_func_snprintf_retval_c99. - -AC_DEFUN_ONCE([gl_SNPRINTF_RETVAL_C99], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_REQUIRE([gl_SNPRINTF_PRESENCE]) - AC_CACHE_CHECK([whether snprintf returns a byte count as in C99], - [gl_cv_func_snprintf_retval_c99], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#if HAVE_SNPRINTF -# define my_snprintf snprintf -#else -# include -static int my_snprintf (char *buf, int size, const char *format, ...) -{ - va_list args; - int ret; - va_start (args, format); - ret = vsnprintf (buf, size, format, args); - va_end (args); - return ret; -} -#endif -static char buf[100]; -int main () -{ - strcpy (buf, "ABCDEF"); - if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7) - return 1; - if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7) - return 2; - if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7) - return 3; - return 0; -}]])], - [gl_cv_func_snprintf_retval_c99=yes], - [gl_cv_func_snprintf_retval_c99=no], - [case "$host_os" in -changequote(,)dnl - # Guess yes on glibc systems. - *-gnu* | gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on musl systems. - *-musl* | midipix*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on FreeBSD >= 5. - freebsd[1-4].*) gl_cv_func_snprintf_retval_c99="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; - midnightbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; - darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on OpenBSD >= 3.9. - openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) - gl_cv_func_snprintf_retval_c99="guessing no";; - openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on Solaris >= 2.10. - solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; - solaris*) gl_cv_func_printf_sizes_c99="guessing no";; - # Guess yes on AIX >= 4. - aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; - aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_snprintf_retval_c99="guessing no";; - netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on Android. - linux*-android*) gl_cv_func_snprintf_retval_c99="guessing yes";; -changequote([,])dnl - # Guess yes on MSVC, no on mingw. - mingw*) AC_EGREP_CPP([Known], [ -#ifdef _MSC_VER - Known -#endif - ], - [gl_cv_func_snprintf_retval_c99="guessing yes"], - [gl_cv_func_snprintf_retval_c99="guessing no"]) - ;; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_snprintf_retval_c99="$gl_cross_guess_normal";; - esac - ]) - ]) -]) - -dnl Test whether the snprintf function supports the %n format directive -dnl also in truncated portions of the format string. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_snprintf_directive_n. - -AC_DEFUN([gl_SNPRINTF_DIRECTIVE_N], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_REQUIRE([gl_SNPRINTF_PRESENCE]) - AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive], - [gl_cv_func_snprintf_directive_n], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#if HAVE_SNPRINTF -# define my_snprintf snprintf -#else -# include -static int my_snprintf (char *buf, int size, const char *format, ...) -{ - va_list args; - int ret; - va_start (args, format); - ret = vsnprintf (buf, size, format, args); - va_end (args); - return ret; -} -#endif -static char fmtstring[10]; -static char buf[100]; -int main () -{ - int count = -1; - /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) - support %n in format strings in read-only memory but not in writable - memory. */ - strcpy (fmtstring, "%d %n"); - my_snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55); - if (count != 6) - return 1; - return 0; -}]])], - [gl_cv_func_snprintf_directive_n=yes], - [gl_cv_func_snprintf_directive_n=no], - [ - case "$host_os" in - # Guess no on glibc when _FORTIFY_SOURCE >= 2. - *-gnu* | gnu*) AC_COMPILE_IFELSE( - [AC_LANG_SOURCE( - [[#if _FORTIFY_SOURCE >= 2 - error fail - #endif - ]])], - [gl_cv_func_snprintf_directive_n="guessing yes"], - [gl_cv_func_snprintf_directive_n="guessing no"]) - ;; -changequote(,)dnl - # Guess yes on musl systems. - *-musl* | midipix*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on FreeBSD >= 5. - freebsd[1-4].*) gl_cv_func_snprintf_directive_n="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";; - midnightbsd*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_snprintf_directive_n="guessing no";; - darwin*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on Solaris >= 2.6. - solaris2.[0-5] | solaris2.[0-5].*) - gl_cv_func_snprintf_directive_n="guessing no";; - solaris*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on AIX >= 4. - aix[1-3]*) gl_cv_func_snprintf_directive_n="guessing no";; - aix*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on IRIX >= 6.5. - irix6.5) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on OSF/1 >= 5. - osf[3-4]*) gl_cv_func_snprintf_directive_n="guessing no";; - osf*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_snprintf_directive_n="guessing no";; - netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess no on Android. - linux*-android*) gl_cv_func_snprintf_directive_n="guessing no";; - # Guess no on native Windows. - mingw*) gl_cv_func_snprintf_directive_n="guessing no";; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_snprintf_directive_n="$gl_cross_guess_normal";; -changequote([,])dnl - esac - ]) - ]) -]) - -dnl Test whether the snprintf function, when passed a size = 1, writes any -dnl output without bounds in this case, behaving like sprintf. This is the -dnl case on Linux libc5. -dnl Result is gl_cv_func_snprintf_size1. - -AC_DEFUN([gl_SNPRINTF_SIZE1], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_REQUIRE([gl_SNPRINTF_PRESENCE]) - AC_CACHE_CHECK([whether snprintf respects a size of 1], - [gl_cv_func_snprintf_size1], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#if HAVE_SNPRINTF -# define my_snprintf snprintf -#else -# include -static int my_snprintf (char *buf, int size, const char *format, ...) -{ - va_list args; - int ret; - va_start (args, format); - ret = vsnprintf (buf, size, format, args); - va_end (args); - return ret; -} -#endif -int main() -{ - static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; - my_snprintf (buf, 1, "%d", 12345); - return buf[1] != 'E'; -}]])], - [gl_cv_func_snprintf_size1=yes], - [gl_cv_func_snprintf_size1=no], - [case "$host_os" in - # Guess yes on Android. - linux*-android*) gl_cv_func_snprintf_size1="guessing yes" ;; - # Guess yes on native Windows. - mingw*) gl_cv_func_snprintf_size1="guessing yes" ;; - *) gl_cv_func_snprintf_size1="guessing yes" ;; - esac - ]) - ]) -]) - -dnl Test whether the vsnprintf function, when passed a zero size, produces no -dnl output. (ISO C99, POSIX:2001) -dnl For example, snprintf nevertheless writes a NUL byte in this case -dnl on OSF/1 5.1: -dnl --------------------------------------------------------------------- -dnl #include -dnl int main() -dnl { -dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; -dnl snprintf (buf, 0, "%d", 12345); -dnl return buf[0] != 'D'; -dnl } -dnl --------------------------------------------------------------------- -dnl And vsnprintf writes any output without bounds in this case, behaving like -dnl vsprintf, on HP-UX 11 and OSF/1 5.1: -dnl --------------------------------------------------------------------- -dnl #include -dnl #include -dnl static int my_snprintf (char *buf, int size, const char *format, ...) -dnl { -dnl va_list args; -dnl int ret; -dnl va_start (args, format); -dnl ret = vsnprintf (buf, size, format, args); -dnl va_end (args); -dnl return ret; -dnl } -dnl int main() -dnl { -dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; -dnl my_snprintf (buf, 0, "%d", 12345); -dnl return buf[0] != 'D'; -dnl } -dnl --------------------------------------------------------------------- -dnl Result is gl_cv_func_vsnprintf_zerosize_c99. - -AC_DEFUN([gl_VSNPRINTF_ZEROSIZE_C99], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether vsnprintf respects a zero size as in C99], - [gl_cv_func_vsnprintf_zerosize_c99], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static int my_snprintf (char *buf, int size, const char *format, ...) -{ - va_list args; - int ret; - va_start (args, format); - ret = vsnprintf (buf, size, format, args); - va_end (args); - return ret; -} -int main() -{ - static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; - my_snprintf (buf, 0, "%d", 12345); - return buf[0] != 'D'; -}]])], - [gl_cv_func_vsnprintf_zerosize_c99=yes], - [gl_cv_func_vsnprintf_zerosize_c99=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu* | gnu*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on musl systems. - *-musl* | midipix*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on FreeBSD >= 5. - freebsd[1-4].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - midnightbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; - darwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on Cygwin. - cygwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on Solaris >= 2.6. - solaris2.[0-5] | solaris2.[0-5].*) - gl_cv_func_vsnprintf_zerosize_c99="guessing no";; - solaris*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on AIX >= 4. - aix[1-3]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; - aix*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on IRIX >= 6.5. - irix6.5) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_vsnprintf_zerosize_c99="guessing no";; - netbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on Android. - linux*-android*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on native Windows. - mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_vsnprintf_zerosize_c99="$gl_cross_guess_normal";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the swprintf function works correctly when it produces output -dnl that contains null wide characters. -dnl Result is gl_cv_func_swprintf_works. - -AC_DEFUN([gl_SWPRINTF_WORKS], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CHECK_FUNCS_ONCE([swprintf]) - AC_CACHE_CHECK([whether swprintf works], - [gl_cv_func_swprintf_works], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#ifndef __USE_MINGW_ANSI_STDIO -# define __USE_MINGW_ANSI_STDIO 1 -#endif -#include -#include -int main() -{ - int result = 0; - { /* This test fails on musl libc 1.2.3, FreeBSD, NetBSD, OpenBSD, macOS, AIX. */ - wchar_t buf[5] = { 0xBEEF, 0xBEEF, 0xBEEF, 0xBEEF, 0xBEEF }; - int ret = swprintf (buf, 4, L"%cz", '\0'); - /* Expected result: - ret = 2, buf[0] = 0x0, buf[1] = 0x7a, buf[2] = 0x0, buf[3] = 0xbeef - musl libc 1.2.3: - ret = 2, buf[0] = 0x0, buf[1] = 0x0, buf[2] = 0x0, buf[3] = 0x0 - Reported at . - FreeBSD 13.1, NetBSD 9.0, OpenBSD 7.2, macOS 12.5, AIX 7.2: - ret = 2, buf[0] = 0x0, buf[1] = 0xbeef, buf[2] = 0xbeef, buf[3] = 0xbeef - */ - if (ret < 0 || buf[1] != 'z') - result |= 1; - } - { /* This test fails on mingw. */ - wchar_t buf[2]; - int ret = swprintf (buf, 2, L"%lc", (wint_t)0); - /* Expected: ret = 1 - mingw: ret = 0 - */ - if (ret != 1) - result |= 2; - } - return result; -}]])], - [gl_cv_func_swprintf_works=yes], - [gl_cv_func_swprintf_works=no], - [case "$host_os" in - # Guess yes on glibc systems. - *-gnu* | gnu*) gl_cv_func_swprintf_works="guessing yes";; - # Guess no on musl systems. - *-musl* | midipix*) gl_cv_func_swprintf_works="guessing no";; - # Guess no on FreeBSD, NetBSD, OpenBSD, macOS, AIX. - freebsd* | midnightbsd* | netbsd* | openbsd* | darwin* | aix*) - gl_cv_func_swprintf_works="guessing no";; - # Guess no on native Windows. - mingw* | pw*) gl_cv_func_swprintf_works="guessing no";; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_swprintf_works="$gl_cross_guess_normal";; - esac - ]) - ]) -]) - -dnl Test whether the *wprintf family of functions supports the 'a' and 'A' -dnl conversion specifier for hexadecimal output of 'long double' numbers. -dnl (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_swprintf_directive_la. - -AC_DEFUN([gl_SWPRINTF_DIRECTIVE_LA], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether swprintf supports the 'La' and 'LA' directives], - [gl_cv_func_swprintf_directive_la], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static wchar_t buf[100]; -int main () -{ - int result = 0; - /* This catches a glibc 2.15 and Haiku 2022 bug. */ - if (swprintf (buf, sizeof (buf) / sizeof (wchar_t), - L"%La %d", 3.1416015625L, 33, 44, 55) < 0 - || (wcscmp (buf, L"0x1.922p+1 33") != 0 - && wcscmp (buf, L"0x3.244p+0 33") != 0 - && wcscmp (buf, L"0x6.488p-1 33") != 0 - && wcscmp (buf, L"0xc.91p-2 33") != 0)) - result |= 1; - return result; -}]])], - [gl_cv_func_swprintf_directive_la=yes], - [gl_cv_func_swprintf_directive_la=no], - [case "$host_os" in - # Guess yes on glibc >= 2.17 systems. - *-gnu* | gnu*) - AC_EGREP_CPP([Unlucky], [ - #include - #ifdef __GNU_LIBRARY__ - #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 16) || (__GLIBC__ > 2)) && !defined __UCLIBC__ - Unlucky - #endif - #endif - ], - [gl_cv_func_swprintf_directive_la="guessing yes"], - [gl_cv_func_swprintf_directive_la="guessing no"]) - ;; - # Guess yes on musl systems. - *-musl* | midipix*) gl_cv_func_swprintf_directive_la="guessing yes";; - # Guess yes on Android. - linux*-android*) gl_cv_func_swprintf_directive_la="guessing yes";; - # Guess no on native Windows. - mingw*) gl_cv_func_swprintf_directive_la="guessing no";; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_swprintf_directive_la="$gl_cross_guess_normal";; - esac - ]) - ]) -]) - -dnl Test whether the *wprintf family of functions supports the 'lc' conversion -dnl specifier for all wide characters. -dnl (ISO C11, POSIX:2001) -dnl Result is gl_cv_func_swprintf_directive_lc. - -AC_DEFUN([gl_SWPRINTF_DIRECTIVE_LC], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether swprintf supports the 'lc' directive], - [gl_cv_func_swprintf_directive_lc], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static wchar_t buf[100]; -static wint_t L_invalid = (wchar_t) 0x76543210; -int main () -{ - int result = 0; - /* This catches a musl libc 1.2.4, Android bug. - Reported at . */ - if (swprintf (buf, sizeof (buf) / sizeof (wchar_t), - L"%lc %d", L_invalid, 33, 44, 55) < 0) - result |= 1; - return result; -}]])], - [gl_cv_func_swprintf_directive_lc=yes], - [gl_cv_func_swprintf_directive_lc=no], - [case "$host_os" in - # Guess yes on glibc systems. - *-gnu* | gnu*) gl_cv_func_swprintf_directive_lc="guessing yes";; - # Guess no on musl systems. - *-musl* | midipix*) gl_cv_func_swprintf_directive_lc="guessing no";; - # Guess no on Android. - linux*-android*) gl_cv_func_swprintf_directive_lc="guessing no";; - # Guess yes on native Windows. - mingw*) gl_cv_func_swprintf_directive_lc="guessing yes";; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_swprintf_directive_lc="$gl_cross_guess_normal";; - esac - ]) - ]) -]) - -dnl The results of these tests on various platforms are: -dnl -dnl 1 = gl_PRINTF_SIZES_C99 -dnl 2 = gl_PRINTF_SIZES_C23 -dnl 3 = gl_PRINTF_LONG_DOUBLE -dnl 4 = gl_PRINTF_INFINITE -dnl 5 = gl_PRINTF_INFINITE_LONG_DOUBLE -dnl 6 = gl_PRINTF_DIRECTIVE_A -dnl 7 = gl_PRINTF_DIRECTIVE_B -dnl 8 = gl_PRINTF_DIRECTIVE_UPPERCASE_B -dnl 9 = gl_PRINTF_DIRECTIVE_F -dnl 10 = gl_PRINTF_DIRECTIVE_N -dnl 11 = gl_PRINTF_DIRECTIVE_LS -dnl 12 = gl_PRINTF_DIRECTIVE_LC -dnl 13 = gl_PRINTF_POSITIONS -dnl 14 = gl_PRINTF_FLAG_GROUPING -dnl 15 = gl_PRINTF_FLAG_LEFTADJUST -dnl 16 = gl_PRINTF_FLAG_ZERO -dnl 17 = gl_PRINTF_PRECISION -dnl 18 = gl_PRINTF_ENOMEM -dnl 19 = gl_SNPRINTF_PRESENCE -dnl 20 = gl_SNPRINTF_TRUNCATION_C99 -dnl 21 = gl_SNPRINTF_RETVAL_C99 -dnl 22 = gl_SNPRINTF_DIRECTIVE_N -dnl 23 = gl_SNPRINTF_SIZE1 -dnl 24 = gl_VSNPRINTF_ZEROSIZE_C99 -dnl 25 = gl_SWPRINTF_WORKS -dnl 26 = gl_SWPRINTF_DIRECTIVE_LA -dnl 27 = gl_SWPRINTF_DIRECTIVE_LC -dnl -dnl 1 = checking whether printf supports size specifiers as in C99... -dnl 2 = checking whether printf supports size specifiers as in C23... -dnl 3 = checking whether printf supports 'long double' arguments... -dnl 4 = checking whether printf supports infinite 'double' arguments... -dnl 5 = checking whether printf supports infinite 'long double' arguments... -dnl 6 = checking whether printf supports the 'a' and 'A' directives... -dnl 7 = checking whether printf supports the 'b' directive... -dnl 8 = checking whether printf supports the 'B' directive... -dnl 9 = checking whether printf supports the 'F' directive... -dnl 10 = checking whether printf supports the 'n' directive... -dnl 11 = checking whether printf supports the 'ls' directive... -dnl 12 = checking whether printf supports the 'lc' directive correctly... -dnl 13 = checking whether printf supports POSIX/XSI format strings with positions... -dnl 14 = checking whether printf supports the grouping flag... -dnl 15 = checking whether printf supports the left-adjust flag correctly... -dnl 16 = checking whether printf supports the zero flag correctly... -dnl 17 = checking whether printf supports large precisions... -dnl 18 = checking whether printf survives out-of-memory conditions... -dnl 19 = checking for snprintf... -dnl 20 = checking whether snprintf truncates the result as in C99... -dnl 21 = checking whether snprintf returns a byte count as in C99... -dnl 22 = checking whether snprintf fully supports the 'n' directive... -dnl 23 = checking whether snprintf respects a size of 1... -dnl 24 = checking whether vsnprintf respects a zero size as in C99... -dnl 25 = checking whether swprintf works... -dnl 26 = checking whether swprintf supports the 'La' and 'LA' directives... -dnl 27 = checking whether swprintf supports the 'lc' directive... -dnl -dnl . = yes, # = no. -dnl -dnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 -dnl musl libc 1.2.3 . # . . . . # # . . . . . . . . . . . . . . . . # . # -dnl glibc 2.35 . # . . . . . . . . . # . . . . . . . . . . . . . . . -dnl glibc 2.5 . # . . . . # # . . . # . . . . . . . . . . . . . # . -dnl glibc 2.3.6 . # . . . # # # . . . # . . . . . . . . . . . . . # . -dnl FreeBSD 13.0 . # . . . # # # . . . # . . . . . # . . . . . . # . # -dnl FreeBSD 5.4, 6.1 . # . . . # # # . . . # . . . # . # . . . . . . # ? ? -dnl Mac OS X 10.13.5 . # . . # # # # . # . # . . . . . . . . . # . . # ? ? -dnl Mac OS X 10.5.8 . # . . # # # # . . . # . . . # . . . . . . . . # ? ? -dnl Mac OS X 10.3.9 . # . . . # # # . . . # . . . # . # . . . . . . # ? ? -dnl OpenBSD 6.0, 6.7 . # . . . # # # . . . # . . . . . # . . . . . . # . # -dnl OpenBSD 3.9, 4.0 . # . # # # # # # . # # . # . # . # . . . . . . # ? ? -dnl Cygwin 1.7.0 (2009) . # . . # . # # . . ? ? . . . . . ? . . . . . . ? ? ? -dnl Cygwin 1.5.25 (2008) . # . . # # # # . . # ? . . . . . # . . . . . . ? ? ? -dnl Cygwin 1.5.19 (2006) # # . . # # # # # . # ? . # . # # # . . . . . . ? ? ? -dnl Solaris 11.4 . # . # # # # # . . # # . . . # . . . . . . . . . # . -dnl Solaris 11.3 . # . . . # # # . . # # . . . . . . . . . . . . . # . -dnl Solaris 11.0 . # . # # # # # . . # # . . . # . . . . . . . . ? ? ? -dnl Solaris 10 . # . # # # # # . . # # . . . # # . . . . . . . . # . -dnl Solaris 2.6 ... 9 # # . # # # # # # . # # . . . # # . . . # . . . ? ? ? -dnl Solaris 2.5.1 # # . # # # # # # . # # . . . # . . # # # # # # ? ? ? -dnl AIX 7.1 . # . # # # # # . . . # . . . # # . . . . . . . # . . -dnl AIX 5.2 . # . # # # # # . . . # . . . # . . . . . . . . # ? ? -dnl AIX 4.3.2, 5.1 # # . # # # # # # . . # . . . # . . . . # . . . # ? ? -dnl HP-UX 11.31 . # . . . # # # . . . ? . . . # . . . . # # . . ? ? ? -dnl HP-UX 11.{00,11,23} # # . . . # # # # . . ? . . . # . . . . # # . # ? ? ? -dnl HP-UX 10.20 # # . # . # # # # . ? ? . . # # . . . . # # ? # ? ? ? -dnl IRIX 6.5 # # . # # # # # # . # # . . . # . . . . # . . . # ? ? -dnl OSF/1 5.1 # # . # # # # # # . . ? . . . # . . . . # . . # ? ? ? -dnl OSF/1 4.0d # # . # # # # # # . . ? . . . # . . # # # # # # ? ? ? -dnl NetBSD 9.0 . # . . . # # # . . . # . . . . . . . . . . . . # . # -dnl NetBSD 5.0 . # . . # # # # . . . # . . . # . # . . . . . . # ? ? -dnl NetBSD 4.0 . # ? ? ? ? # # ? . ? # . ? ? ? ? ? . . . ? ? ? # ? ? -dnl NetBSD 3.0 . # . . . # # # # . ? # # # ? # . # . . . . . . # ? ? -dnl Haiku . # . . # # # # # . # ? . . . . . ? . . ? . . . . # . -dnl BeOS # # # . # # # # # . ? ? # . ? . # ? . . ? . . . ? ? ? -dnl Android 4.3 . # . # # # # # # # # ? . # . # . # . . . # . . ? ? ? -dnl old mingw / msvcrt # # # # # # # # # . . ? # # . # # ? . # # # . . # ? ? -dnl MSVC 9 # # # # # # # # # # . ? # # . # # ? # # # # . . # ? ? -dnl mingw 2009-2011 . # # . # . # # . . . ? # # . . . ? . . . . . . # ? ? -dnl mingw-w64 2011 # # # # # # # # # . . ? # # . # # ? . # # # . . # ? ? diff --git a/m4/signbit.m4 b/m4/signbit.m4 deleted file mode 100644 index 2fea73f854c..00000000000 --- a/m4/signbit.m4 +++ /dev/null @@ -1,393 +0,0 @@ -# signbit.m4 serial 21 -dnl Copyright (C) 2007-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_SIGNBIT], -[ - AC_REQUIRE([gl_MATH_H_DEFAULTS]) - AC_REQUIRE([AC_CANONICAL_HOST]) - AC_CACHE_CHECK([for signbit macro], [gl_cv_func_signbit], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -/* If signbit is defined as a function, don't use it, since calling it for - 'float' or 'long double' arguments would involve conversions. - If signbit is not declared at all but exists as a library function, don't - use it, since the prototype may not match. - If signbit is not declared at all but exists as a compiler built-in, don't - use it, since it's preferable to use __builtin_signbit* (no warnings, - no conversions). */ -#ifndef signbit -# error "signbit should be a macro" -#endif -#include -]gl_SIGNBIT_TEST_PROGRAM -])], - [gl_cv_func_signbit=yes], - [gl_cv_func_signbit=no], - [case "$host_os" in - # Guess yes on glibc systems. - *-gnu* | gnu*) gl_cv_func_signbit="guessing yes" ;; - # Guess yes on musl systems. - *-musl* | midipix*) gl_cv_func_signbit="guessing yes" ;; - # Guess yes on native Windows. - mingw*) gl_cv_func_signbit="guessing yes" ;; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_signbit="$gl_cross_guess_normal" ;; - esac - ]) - ]) - dnl GCC >= 4.0 and clang provide three built-ins for signbit. - dnl They can be used without warnings, also in C++, regardless of . - dnl But they may expand to calls to functions, which may or may not be in - dnl libc. - AC_CACHE_CHECK([for signbit compiler built-ins], - [gl_cv_func_signbit_builtins], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#if (__GNUC__ >= 4) || (__clang_major__ >= 4) -# define signbit(x) \ - (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ - sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ - __builtin_signbitf (x)) -#else -# error "signbit should be three compiler built-ins" -#endif -#include -]gl_SIGNBIT_TEST_PROGRAM -])], - [gl_cv_func_signbit_builtins=yes], - [gl_cv_func_signbit_builtins=no], - [case "$host_os" in - # Guess yes on glibc systems. - *-gnu* | gnu*) gl_cv_func_signbit_builtins="guessing yes" ;; - # Guess yes on musl systems. - *-musl* | midipix*) gl_cv_func_signbit_builtins="guessing yes" ;; - # Guess yes on mingw, no on MSVC. - mingw*) if test -n "$GCC"; then - gl_cv_func_signbit_builtins="guessing yes" - else - gl_cv_func_signbit_builtins="guessing no" - fi - ;; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_signbit_builtins="$gl_cross_guess_normal" ;; - esac - ]) - ]) - dnl Use the compiler built-ins whenever possible, because they are more - dnl efficient than the system library functions (if they exist). - case "$gl_cv_func_signbit_builtins" in - *yes) - REPLACE_SIGNBIT_USING_BUILTINS=1 - ;; - *) - case "$gl_cv_func_signbit" in - *yes) ;; - *) - dnl REPLACE_SIGNBIT=1 makes sure the signbit[fdl] functions get built. - REPLACE_SIGNBIT=1 - ;; - esac - ;; - esac - dnl On Solaris 10, with CC in C++ mode, signbit is not available although - dnl is with cc in C mode. This cannot be worked around by defining - dnl _XOPEN_SOURCE=600, because the latter does not work in C++ mode on - dnl Solaris 11.0. Therefore use the replacement functions on Solaris. - case "$host_os" in - solaris*) - REPLACE_SIGNBIT=1 - ;; - esac - if test $REPLACE_SIGNBIT = 1; then - gl_FLOAT_SIGN_LOCATION - gl_DOUBLE_SIGN_LOCATION - gl_LONG_DOUBLE_SIGN_LOCATION - if test "$gl_cv_cc_float_signbit" = unknown; then - dnl Test whether copysignf() is declared. - AC_CHECK_DECLS([copysignf], , , [[#include ]]) - if test "$ac_cv_have_decl_copysignf" = yes; then - dnl Test whether copysignf() can be used without libm. - AC_CACHE_CHECK([whether copysignf can be used without linking with libm], - [gl_cv_func_copysignf_no_libm], - [ - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include - float x, y;]], - [[return copysignf (x, y) < 0;]])], - [gl_cv_func_copysignf_no_libm=yes], - [gl_cv_func_copysignf_no_libm=no]) - ]) - if test $gl_cv_func_copysignf_no_libm = yes; then - AC_DEFINE([HAVE_COPYSIGNF_IN_LIBC], [1], - [Define if the copysignf function is declared in and available in libc.]) - fi - fi - fi - if test "$gl_cv_cc_double_signbit" = unknown; then - dnl Test whether copysign() is declared. - AC_CHECK_DECLS([copysign], , , [[#include ]]) - if test "$ac_cv_have_decl_copysign" = yes; then - dnl Test whether copysign() can be used without libm. - AC_CACHE_CHECK([whether copysign can be used without linking with libm], - [gl_cv_func_copysign_no_libm], - [ - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include - double x, y;]], - [[return copysign (x, y) < 0;]])], - [gl_cv_func_copysign_no_libm=yes], - [gl_cv_func_copysign_no_libm=no]) - ]) - if test $gl_cv_func_copysign_no_libm = yes; then - AC_DEFINE([HAVE_COPYSIGN_IN_LIBC], [1], - [Define if the copysign function is declared in and available in libc.]) - fi - fi - fi - if test "$gl_cv_cc_long_double_signbit" = unknown; then - dnl Test whether copysignl() is declared. - AC_CHECK_DECLS([copysignl], , , [[#include ]]) - if test "$ac_cv_have_decl_copysignl" = yes; then - dnl Test whether copysignl() can be used without libm. - AC_CACHE_CHECK([whether copysignl can be used without linking with libm], - [gl_cv_func_copysignl_no_libm], - [ - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include - long double x, y;]], - [[return copysignl (x, y) < 0;]])], - [gl_cv_func_copysignl_no_libm=yes], - [gl_cv_func_copysignl_no_libm=no]) - ]) - if test $gl_cv_func_copysignl_no_libm = yes; then - AC_DEFINE([HAVE_COPYSIGNL_IN_LIBC], [1], - [Define if the copysignl function is declared in and available in libc.]) - fi - fi - fi - fi -]) - -AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [[ -/* Global variables. - Needed because GCC 4 constant-folds __builtin_signbitl (literal) - but cannot constant-fold __builtin_signbitl (variable). */ -float vf; -double vd; -long double vl; -int main () -{ -/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. - So we use -p0f and -p0d instead. */ -float p0f = 0.0f; -float m0f = -p0f; -double p0d = 0.0; -double m0d = -p0d; -/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. - So we use another constant expression instead. - But that expression does not work on other platforms, such as when - cross-compiling to PowerPC on Mac OS X 10.5. */ -long double p0l = 0.0L; -#if defined __hpux || defined __sgi -long double m0l = -LDBL_MIN * LDBL_MIN; -#else -long double m0l = -p0l; -#endif - int result = 0; - if (signbit (vf)) /* link check */ - vf++; - { - float plus_inf = 1.0f / p0f; - float minus_inf = -1.0f / p0f; - if (!(!signbit (255.0f) - && signbit (-255.0f) - && !signbit (p0f) - && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) - && !signbit (plus_inf) - && signbit (minus_inf))) - result |= 1; - } - if (signbit (vd)) /* link check */ - vd++; - { - double plus_inf = 1.0 / p0d; - double minus_inf = -1.0 / p0d; - if (!(!signbit (255.0) - && signbit (-255.0) - && !signbit (p0d) - && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) - && !signbit (plus_inf) - && signbit (minus_inf))) - result |= 2; - } - if (signbit (vl)) /* link check */ - vl++; - { - long double plus_inf = 1.0L / p0l; - long double minus_inf = -1.0L / p0l; - if (signbit (255.0L)) - result |= 4; - if (!signbit (-255.0L)) - result |= 4; - if (signbit (p0l)) - result |= 8; - if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l))) - result |= 16; - if (signbit (plus_inf)) - result |= 32; - if (!signbit (minus_inf)) - result |= 64; - } - return result; -} -]]) - -AC_DEFUN([gl_FLOAT_SIGN_LOCATION], -[ - gl_FLOATTYPE_SIGN_LOCATION([float], [gl_cv_cc_float_signbit], [f], [FLT]) -]) - -AC_DEFUN([gl_DOUBLE_SIGN_LOCATION], -[ - gl_FLOATTYPE_SIGN_LOCATION([double], [gl_cv_cc_double_signbit], [], [DBL]) -]) - -AC_DEFUN([gl_LONG_DOUBLE_SIGN_LOCATION], -[ - gl_FLOATTYPE_SIGN_LOCATION([long double], [gl_cv_cc_long_double_signbit], [L], [LDBL]) -]) - -AC_DEFUN([gl_FLOATTYPE_SIGN_LOCATION], -[ - AC_CACHE_CHECK([where to find the sign bit in a '$1'], - [$2], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#define NWORDS \ - ((sizeof ($1) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -typedef union { $1 value; unsigned int word[NWORDS]; } - memory_float; -static memory_float plus = { 1.0$3 }; -static memory_float minus = { -1.0$3 }; -int main () -{ - size_t j, k, i; - unsigned int m; - FILE *fp = fopen ("conftest.out", "w"); - if (fp == NULL) - return 1; - /* Find the different bit. */ - k = 0; m = 0; - for (j = 0; j < NWORDS; j++) - { - unsigned int x = plus.word[j] ^ minus.word[j]; - if ((x & (x - 1)) || (x && m)) - { - /* More than one bit difference. */ - fprintf (fp, "unknown"); - fclose (fp); - return 2; - } - if (x) - { - k = j; - m = x; - } - } - if (m == 0) - { - /* No difference. */ - fprintf (fp, "unknown"); - fclose (fp); - return 3; - } - /* Now m = plus.word[k] ^ ~minus.word[k]. */ - if (plus.word[k] & ~minus.word[k]) - { - /* Oh? The sign bit is set in the positive and cleared in the negative - numbers? */ - fprintf (fp, "unknown"); - fclose (fp); - return 4; - } - for (i = 0; ; i++) - if ((m >> i) & 1) - break; - fprintf (fp, "word %d bit %d", (int) k, (int) i); - if (fclose (fp) != 0) - return 5; - return 0; -} - ]])], - [$2=`cat conftest.out`], - [$2="unknown"], - [ - dnl When cross-compiling, we don't know. It depends on the - dnl ABI and compiler version. There are too many cases. - $2="unknown" - ]) - rm -f conftest.out - ]) - case "$]$2[" in - word*bit*) - word=`echo "$]$2[" | sed -e 's/word //' -e 's/ bit.*//'` - bit=`echo "$]$2[" | sed -e 's/word.*bit //'` - AC_DEFINE_UNQUOTED([$4][_SIGNBIT_WORD], [$word], - [Define as the word index where to find the sign of '$1'.]) - AC_DEFINE_UNQUOTED([$4][_SIGNBIT_BIT], [$bit], - [Define as the bit index in the word where to find the sign of '$1'.]) - ;; - esac -]) - -# Expands to code that defines a function signbitf(float). -# It extracts the sign bit of a non-NaN value. -AC_DEFUN([gl_FLOAT_SIGNBIT_CODE], -[ - gl_FLOATTYPE_SIGNBIT_CODE([float], [f], [f]) -]) - -# Expands to code that defines a function signbitd(double). -# It extracts the sign bit of a non-NaN value. -AC_DEFUN([gl_DOUBLE_SIGNBIT_CODE], -[ - gl_FLOATTYPE_SIGNBIT_CODE([double], [d], []) -]) - -# Expands to code that defines a function signbitl(long double). -# It extracts the sign bit of a non-NaN value. -AC_DEFUN([gl_LONG_DOUBLE_SIGNBIT_CODE], -[ - gl_FLOATTYPE_SIGNBIT_CODE([long double], [l], [L]) -]) - -AC_DEFUN([gl_FLOATTYPE_SIGNBIT_CODE], -[[ -static int -signbit$2 ($1 value) -{ - typedef union { $1 f; unsigned char b[sizeof ($1)]; } float_union; - static float_union plus_one = { 1.0$3 }; /* unused bits are zero here */ - static float_union minus_one = { -1.0$3 }; /* unused bits are zero here */ - /* Compute the sign bit mask as the XOR of plus_one and minus_one. */ - float_union u; - unsigned int i; - u.f = value; - for (i = 0; i < sizeof ($1); i++) - if (u.b[i] & (plus_one.b[i] ^ minus_one.b[i])) - return 1; - return 0; -} -]]) diff --git a/m4/size_max.m4 b/m4/size_max.m4 deleted file mode 100644 index 0763366dfc3..00000000000 --- a/m4/size_max.m4 +++ /dev/null @@ -1,75 +0,0 @@ -# size_max.m4 serial 12 -dnl Copyright (C) 2003, 2005-2006, 2008-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -AC_PREREQ([2.61]) - -AC_DEFUN([gl_SIZE_MAX], -[ - AC_CHECK_HEADERS([stdint.h]) - dnl First test whether the system already has SIZE_MAX. - AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [ - gl_cv_size_max=no - AC_EGREP_CPP([Found it], [ -#include -#if HAVE_STDINT_H -#include -#endif -#ifdef SIZE_MAX -Found it -#endif -], [gl_cv_size_max=yes]) - if test $gl_cv_size_max != yes; then - dnl Define it ourselves. Here we assume that the type 'size_t' is not wider - dnl than the type 'unsigned long'. Try hard to find a definition that can - dnl be used in a preprocessor #if, i.e. doesn't contain a cast. - AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1], - [#include -#include ], [size_t_bits_minus_1=]) - AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)], - [#include ], [fits_in_uint=]) - if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then - if test $fits_in_uint = 1; then - dnl Even though SIZE_MAX fits in an unsigned int, it must be of type - dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - extern size_t foo; - extern unsigned long foo; - ]], - [[]])], - [fits_in_uint=0]) - fi - dnl We cannot use 'expr' to simplify this expression, because 'expr' - dnl works only with 'long' integers in the host environment, while we - dnl might be cross-compiling from a 32-bit platform to a 64-bit platform. - if test $fits_in_uint = 1; then - gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" - else - gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" - fi - else - dnl Shouldn't happen, but who knows... - gl_cv_size_max='((size_t)~(size_t)0)' - fi - fi - ]) - if test "$gl_cv_size_max" != yes; then - AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max], - [Define as the maximum value of type 'size_t', if the system doesn't define it.]) - fi - dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after - dnl . Remember that the #undef in AH_VERBATIM gets replaced with - dnl #define by AC_DEFINE_UNQUOTED. - AH_VERBATIM([SIZE_MAX], -[/* Define as the maximum value of type 'size_t', if the system doesn't define - it. */ -#ifndef SIZE_MAX -# undef SIZE_MAX -#endif]) -]) diff --git a/m4/stdint_h.m4 b/m4/stdint_h.m4 deleted file mode 100644 index 70349f6cb21..00000000000 --- a/m4/stdint_h.m4 +++ /dev/null @@ -1,27 +0,0 @@ -# stdint_h.m4 serial 9 -dnl Copyright (C) 1997-2004, 2006, 2008-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -# Define HAVE_STDINT_H_WITH_UINTMAX if exists, -# doesn't clash with , and declares uintmax_t. - -AC_DEFUN([gl_AC_HEADER_STDINT_H], -[ - AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #include ]], - [[uintmax_t i = (uintmax_t) -1; return !i;]])], - [gl_cv_header_stdint_h=yes], - [gl_cv_header_stdint_h=no])]) - if test $gl_cv_header_stdint_h = yes; then - AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1], - [Define if exists, doesn't clash with , - and declares uintmax_t. ]) - fi -]) diff --git a/m4/vasnprintf.m4 b/m4/vasnprintf.m4 deleted file mode 100644 index df87b9e7986..00000000000 --- a/m4/vasnprintf.m4 +++ /dev/null @@ -1,462 +0,0 @@ -# vasnprintf.m4 serial 50 -dnl Copyright (C) 2002-2004, 2006-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_VASNPRINTF], -[ - AC_CHECK_FUNCS_ONCE([vasnprintf]) - if test $ac_cv_func_vasnprintf = no; then - gl_REPLACE_VASNPRINTF - fi -]) - -AC_DEFUN([gl_REPLACE_VASNPRINTF], -[ - AC_CHECK_FUNCS_ONCE([vasnprintf]) - AC_LIBOBJ([vasnprintf]) - AC_LIBOBJ([printf-args]) - AC_LIBOBJ([printf-parse]) - AC_LIBOBJ([asnprintf]) - if test $ac_cv_func_vasnprintf = yes; then - AC_DEFINE([REPLACE_VASNPRINTF], [1], - [Define if vasnprintf exists but is overridden by gnulib.]) - fi - gl_PREREQ_PRINTF_ARGS - gl_PREREQ_PRINTF_PARSE - gl_PREREQ_VASNPRINTF - gl_PREREQ_ASNPRINTF -]) - -AC_DEFUN([gl_FUNC_VASNWPRINTF], -[ - AC_LIBOBJ([printf-args]) - gl_PREREQ_PRINTF_ARGS - gl_PREREQ_PRINTF_PARSE - gl_PREREQ_VASNWPRINTF - gl_PREREQ_ASNPRINTF -]) - -# Prerequisites of lib/printf-args.h, lib/printf-args.c. -AC_DEFUN([gl_PREREQ_PRINTF_ARGS], -[ - AC_REQUIRE([gt_TYPE_WCHAR_T]) - AC_REQUIRE([gt_TYPE_WINT_T]) -]) - -# Prerequisites of lib/printf-parse.h, lib/printf-parse.c. -# Prerequisites of lib/wprintf-parse.h, lib/wprintf-parse.c. -AC_DEFUN([gl_PREREQ_PRINTF_PARSE], -[ - AC_REQUIRE([gl_FEATURES_H]) - AC_REQUIRE([gt_TYPE_WCHAR_T]) - AC_REQUIRE([gt_TYPE_WINT_T]) - AC_REQUIRE([AC_TYPE_SIZE_T]) - AC_CHECK_TYPE([ptrdiff_t], , - [AC_DEFINE([ptrdiff_t], [long], - [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) - ]) - AC_REQUIRE([gt_AC_TYPE_INTMAX_T]) -]) - -# Prerequisites of lib/vasnprintf.c if !WIDE_CHAR_VERSION. -AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF], -[ - AC_CHECK_FUNCS([snprintf strnlen wcrtomb]) - dnl Use the _snprintf function only if it is declared (because on NetBSD it - dnl is defined as a weak alias of snprintf; we prefer to use the latter). - AC_CHECK_DECLS([_snprintf], , , [[#include ]]) - dnl We can avoid a lot of code by assuming that snprintf's return value - dnl conforms to ISO C99. So check that. - AC_REQUIRE([gl_SNPRINTF_RETVAL_C99]) - case "$gl_cv_func_snprintf_retval_c99" in - *yes) - AC_DEFINE([HAVE_SNPRINTF_RETVAL_C99], [1], - [Define if the return value of the snprintf function is the number of - of bytes (excluding the terminating NUL) that would have been produced - if the buffer had been large enough.]) - ;; - esac - dnl Additionally, the use of %n can be eliminated by assuming that snprintf - dnl always produces NUL-terminated strings (no truncation). - AC_REQUIRE([gl_SNPRINTF_TRUNCATION_C99]) - case "$gl_cv_func_snprintf_truncation_c99" in - *yes) - AC_DEFINE([HAVE_SNPRINTF_TRUNCATION_C99], [1], - [Define if the string produced by the snprintf function is always NUL - terminated.]) - ;; - esac - gl_PREREQ_VASNXPRINTF -]) - -# Prerequisites of lib/vasnwprintf.c. -AC_DEFUN_ONCE([gl_PREREQ_VASNWPRINTF], -[ - AC_CHECK_FUNCS_ONCE([swprintf wcsnlen mbrtowc]) - AC_CHECK_DECLS([_snwprintf], , , [[#include ]]) - AC_CHECK_DECLS([wcsnlen], , , [[#include ]]) - gl_SWPRINTF_WORKS - case "$gl_cv_func_swprintf_works" in - *yes) - AC_DEFINE([HAVE_WORKING_SWPRINTF], [1], - [Define if the swprintf function works correctly when it produces output - that contains null wide characters.]) - ;; - esac - gl_MBRTOWC_C_LOCALE - case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in - *yes) - AC_CACHE_CHECK([whether swprintf in the C locale is free of encoding errors], - [gl_cv_func_swprintf_C_locale_sans_EILSEQ], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#ifndef __USE_MINGW_ANSI_STDIO -# define __USE_MINGW_ANSI_STDIO 1 -#endif -#include -#include -int main() -{ - int result = 0; - { /* This test fails on glibc 2.35, musl libc 1.2.4, FreeBSD 13.2, NetBSD 9.3, - OpenBSD 7.2, Cygwin 2.9.0. - Reported at . */ - wchar_t buf[12]; - int ret = swprintf (buf, 12, L"%c", '\377'); - if (ret < 0) - result |= 1; - } - return result; -}]])], - [gl_cv_func_swprintf_C_locale_sans_EILSEQ=yes], - [gl_cv_func_swprintf_C_locale_sans_EILSEQ=no], - [case "$host_os" in - # Guess no on glibc systems. - *-gnu* | gnu*) gl_cv_func_swprintf_C_locale_sans_EILSEQ="guessing yes";; - # Guess no on musl systems. - *-musl* | midipix*) gl_cv_func_swprintf_C_locale_sans_EILSEQ="guessing no";; - # If we don't know, obey --enable-cross-guesses. - *) gl_cv_func_swprintf_C_locale_sans_EILSEQ="$gl_cross_guess_normal";; - esac - ]) - ]) - ;; - esac - if case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in - *yes) false ;; - *) true ;; - esac \ - || case "$gl_cv_func_swprintf_C_locale_sans_EILSEQ" in - *yes) false ;; - *) true ;; - esac; then - AC_DEFINE([NEED_WPRINTF_DIRECTIVE_C], [1], - [Define if the vasnwprintf implementation needs special code for - the 'c' directive.]) - fi - gl_SWPRINTF_DIRECTIVE_LA - case "$gl_cv_func_swprintf_directive_la" in - *yes) ;; - *) - AC_DEFINE([NEED_WPRINTF_DIRECTIVE_LA], [1], - [Define if the vasnwprintf implementation needs special code for - the 'a' directive with 'long double' arguments.]) - ;; - esac - gl_SWPRINTF_DIRECTIVE_LC - case "$gl_cv_func_swprintf_directive_lc" in - *yes) ;; - *) - AC_DEFINE([NEED_WPRINTF_DIRECTIVE_LC], [1], - [Define if the vasnwprintf implementation needs special code for - the 'lc' directive.]) - ;; - esac - gl_MUSL_LIBC - gl_PREREQ_VASNXPRINTF -]) - -# Common prerequisites of lib/vasnprintf.c and lib/vasnwprintf.c. -AC_DEFUN_ONCE([gl_PREREQ_VASNXPRINTF], -[ - AC_REQUIRE([AC_FUNC_ALLOCA]) - AC_REQUIRE([gt_TYPE_WCHAR_T]) - AC_REQUIRE([gt_TYPE_WINT_T]) - AC_CHECK_FUNCS([wcslen]) - dnl Knowing DBL_EXPBIT0_WORD and DBL_EXPBIT0_BIT enables an optimization - dnl in the code for NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE. - AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting 'long double' -# arguments. -AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE], -[ - AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) - case "$gl_cv_func_printf_long_double" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - 'long double' arguments.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double' -# arguments. -AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE], -[ - AC_REQUIRE([gl_PRINTF_INFINITE]) - case "$gl_cv_func_printf_infinite" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - infinite 'double' arguments.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double' -# arguments. -AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE], -[ - AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) - dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if - dnl NEED_PRINTF_LONG_DOUBLE is already set. - AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE]) - case "$gl_cv_func_printf_long_double" in - *yes) - case "$gl_cv_func_printf_infinite_long_double" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - infinite 'long double' arguments.]) - ;; - esac - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive. -AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A], -[ - AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) - case "$gl_cv_func_printf_directive_a" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], [1], - [Define if the vasnprintf implementation needs special code for - the 'a' and 'A' directives.]) - gl_CHECK_FUNCS_ANDROID([nl_langinfo], [[#include ]]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the 'b' directive. -AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_B], -[ - AC_REQUIRE([gl_PRINTF_DIRECTIVE_B]) - case "$gl_cv_func_printf_directive_b" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_DIRECTIVE_B], [1], - [Define if the vasnprintf implementation needs special code for - the 'b' directive.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive. -AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F], -[ - AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) - case "$gl_cv_func_printf_directive_f" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], [1], - [Define if the vasnprintf implementation needs special code for - the 'F' directive.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive. -AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS], -[ - AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) - case "$gl_cv_func_printf_directive_ls" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1], - [Define if the vasnprintf implementation needs special code for - the 'ls' directive.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the 'lc' directive. -AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LC], -[ - AC_REQUIRE([gl_PRINTF_DIRECTIVE_LC]) - case "$gl_cv_func_printf_directive_lc" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_DIRECTIVE_LC], [1], - [Define if the vasnprintf implementation needs special code for - the 'lc' directive.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the ' flag. -AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING], -[ - AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) - case "$gl_cv_func_printf_flag_grouping" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], [1], - [Define if the vasnprintf implementation needs special code for the - ' flag.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag. -AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST], -[ - AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) - case "$gl_cv_func_printf_flag_leftadjust" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], [1], - [Define if the vasnprintf implementation needs special code for the - '-' flag.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag. -AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO], -[ - AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) - case "$gl_cv_func_printf_flag_zero" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_FLAG_ZERO], [1], - [Define if the vasnprintf implementation needs special code for the - 0 flag.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting large precisions. -AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION], -[ - AC_REQUIRE([gl_PRINTF_PRECISION]) - case "$gl_cv_func_printf_precision" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], [1], - [Define if the vasnprintf implementation needs special code for - supporting large precisions without arbitrary bounds.]) - AC_DEFINE([NEED_PRINTF_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - 'double' arguments.]) - AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - 'long double' arguments.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory -# conditions. -AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM], -[ - AC_REQUIRE([gl_PRINTF_ENOMEM]) - case "$gl_cv_func_printf_enomem" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_ENOMEM], [1], - [Define if the vasnprintf implementation needs special code for - surviving out-of-memory conditions.]) - AC_DEFINE([NEED_PRINTF_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - 'double' arguments.]) - AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - 'long double' arguments.]) - ;; - esac -]) - -# Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance. -AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_POSIX_EXTRAS], -[ - AC_REQUIRE([gl_PREREQ_VASNPRINTF]) - gl_PREREQ_VASNPRINTF_LONG_DOUBLE - gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE - gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE - gl_PREREQ_VASNPRINTF_DIRECTIVE_A - gl_PREREQ_VASNPRINTF_DIRECTIVE_B - gl_PREREQ_VASNPRINTF_DIRECTIVE_F - gl_PREREQ_VASNPRINTF_DIRECTIVE_LS - gl_PREREQ_VASNPRINTF_DIRECTIVE_LC - gl_PREREQ_VASNPRINTF_FLAG_GROUPING - gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST - gl_PREREQ_VASNPRINTF_FLAG_ZERO - gl_PREREQ_VASNPRINTF_PRECISION - gl_PREREQ_VASNPRINTF_ENOMEM -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the 'B' directive. -AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_UPPERCASE_B], -[ - AC_REQUIRE([gl_PRINTF_DIRECTIVE_UPPERCASE_B]) - case "$gl_cv_func_printf_directive_uppercase_b" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_DIRECTIVE_UPPERCASE_B], [1], - [Define if the vasnprintf implementation needs special code for - the 'B' directive.]) - ;; - esac -]) - -# Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance -# and GNU compatibility. -AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_GNU_EXTRAS], -[ - gl_PREREQ_VASNPRINTF_WITH_POSIX_EXTRAS - AC_DEFINE([SUPPORT_GNU_PRINTF_DIRECTIVES], [1], - [Define if the vasnprintf implementation should support GNU compatible - printf directives.]) - gl_PREREQ_VASNPRINTF_DIRECTIVE_UPPERCASE_B -]) - -# Prerequisites of lib/asnprintf.c. -# Prerequisites of lib/asnwprintf.c. -AC_DEFUN([gl_PREREQ_ASNPRINTF], -[ -]) diff --git a/m4/vasprintf-posix.m4 b/m4/vasprintf-posix.m4 deleted file mode 100644 index 3c7a6540bd1..00000000000 --- a/m4/vasprintf-posix.m4 +++ /dev/null @@ -1,113 +0,0 @@ -# vasprintf-posix.m4 serial 17 -dnl Copyright (C) 2007-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_VASPRINTF_POSIX], -[ - AC_REQUIRE([gl_FUNC_VASPRINTF_IS_POSIX]) - if test $gl_cv_func_vasprintf_posix = no; then - gl_PREREQ_VASNPRINTF_WITH_POSIX_EXTRAS - gl_REPLACE_VASNPRINTF - gl_REPLACE_VASPRINTF - fi -]) - -dnl Test whether vasprintf exists and is POSIX compliant. -dnl Result is gl_cv_func_vasprintf_posix. -AC_DEFUN([gl_FUNC_VASPRINTF_IS_POSIX], -[ - AC_REQUIRE([gl_PRINTF_SIZES_C99]) - AC_REQUIRE([gl_PRINTF_SIZES_C23]) - AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) - AC_REQUIRE([gl_PRINTF_INFINITE]) - AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) - AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) - AC_REQUIRE([gl_PRINTF_DIRECTIVE_B]) - AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) - AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) - AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) - AC_REQUIRE([gl_PRINTF_DIRECTIVE_LC]) - AC_REQUIRE([gl_PRINTF_POSITIONS]) - AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) - AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) - AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) - AC_REQUIRE([gl_PRINTF_PRECISION]) - AC_REQUIRE([gl_PRINTF_ENOMEM]) - gl_cv_func_vasprintf_posix=no - AC_CHECK_FUNCS([vasprintf]) - case "$gl_cv_func_printf_sizes_c99" in - *yes) - case "$gl_cv_func_printf_sizes_c23" in - *yes) - case "$gl_cv_func_printf_long_double" in - *yes) - case "$gl_cv_func_printf_infinite" in - *yes) - case "$gl_cv_func_printf_infinite_long_double" in - *yes) - case "$gl_cv_func_printf_directive_a" in - *yes) - case "$gl_cv_func_printf_directive_b" in - *yes) - case "$gl_cv_func_printf_directive_f" in - *yes) - case "$gl_cv_func_printf_directive_n" in - *yes) - case "$gl_cv_func_printf_directive_ls" in - *yes) - case "$gl_cv_func_printf_directive_lc" in - *yes) - case "$gl_cv_func_printf_positions" in - *yes) - case "$gl_cv_func_printf_flag_grouping" in - *yes) - case "$gl_cv_func_printf_flag_leftadjust" in - *yes) - case "$gl_cv_func_printf_flag_zero" in - *yes) - case "$gl_cv_func_printf_precision" in - *yes) - case "$gl_cv_func_printf_enomem" in - *yes) - if test $ac_cv_func_vasprintf = yes; then - # vasprintf exists and is - # already POSIX compliant. - gl_cv_func_vasprintf_posix=yes - fi - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac -]) diff --git a/m4/vasprintf.m4 b/m4/vasprintf.m4 deleted file mode 100644 index 6e6156a7549..00000000000 --- a/m4/vasprintf.m4 +++ /dev/null @@ -1,46 +0,0 @@ -# vasprintf.m4 serial 6 -dnl Copyright (C) 2002-2003, 2006-2007, 2009-2023 Free Software Foundation, -dnl Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_VASPRINTF], -[ - AC_CHECK_FUNCS([vasprintf]) - if test $ac_cv_func_vasprintf = no; then - gl_REPLACE_VASPRINTF - fi -]) - -AC_DEFUN([gl_REPLACE_VASPRINTF], -[ - AC_LIBOBJ([vasprintf]) - AC_LIBOBJ([asprintf]) - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - if test $ac_cv_func_vasprintf = yes; then - REPLACE_VASPRINTF=1 - else - HAVE_VASPRINTF=0 - fi - gl_PREREQ_VASPRINTF_H - gl_PREREQ_VASPRINTF - gl_PREREQ_ASPRINTF -]) - -# Prerequisites of the vasprintf portion of lib/stdio.h. -AC_DEFUN([gl_PREREQ_VASPRINTF_H], -[ - dnl Persuade glibc to declare asprintf() and vasprintf(). - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) -]) - -# Prerequisites of lib/vasprintf.c. -AC_DEFUN([gl_PREREQ_VASPRINTF], -[ -]) - -# Prerequisites of lib/asprintf.c. -AC_DEFUN([gl_PREREQ_ASPRINTF], -[ -]) diff --git a/m4/vfprintf-posix.m4 b/m4/vfprintf-posix.m4 deleted file mode 100644 index 6b51c50adab..00000000000 --- a/m4/vfprintf-posix.m4 +++ /dev/null @@ -1,122 +0,0 @@ -# vfprintf-posix.m4 serial 18 -dnl Copyright (C) 2007-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_VFPRINTF_POSIX], -[ - AC_REQUIRE([gl_FUNC_VFPRINTF_IS_POSIX]) - if test $gl_cv_func_vfprintf_posix = no; then - gl_PREREQ_VASNPRINTF_WITH_POSIX_EXTRAS - gl_REPLACE_VASNPRINTF - gl_REPLACE_VFPRINTF - fi -]) - -dnl Test whether vfprintf is POSIX compliant. -dnl Result is gl_cv_func_vfprintf_posix. -AC_DEFUN([gl_FUNC_VFPRINTF_IS_POSIX], -[ - AC_REQUIRE([gl_PRINTF_SIZES_C99]) - AC_REQUIRE([gl_PRINTF_SIZES_C23]) - AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) - AC_REQUIRE([gl_PRINTF_INFINITE]) - AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) - AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) - AC_REQUIRE([gl_PRINTF_DIRECTIVE_B]) - AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) - AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) - AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) - AC_REQUIRE([gl_PRINTF_DIRECTIVE_LC]) - AC_REQUIRE([gl_PRINTF_POSITIONS]) - AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) - AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) - AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) - AC_REQUIRE([gl_PRINTF_PRECISION]) - AC_REQUIRE([gl_PRINTF_ENOMEM]) - gl_cv_func_vfprintf_posix=no - case "$gl_cv_func_printf_sizes_c99" in - *yes) - case "$gl_cv_func_printf_sizes_c23" in - *yes) - case "$gl_cv_func_printf_long_double" in - *yes) - case "$gl_cv_func_printf_infinite" in - *yes) - case "$gl_cv_func_printf_infinite_long_double" in - *yes) - case "$gl_cv_func_printf_directive_a" in - *yes) - case "$gl_cv_func_printf_directive_b" in - *yes) - case "$gl_cv_func_printf_directive_f" in - *yes) - case "$gl_cv_func_printf_directive_n" in - *yes) - case "$gl_cv_func_printf_directive_ls" in - *yes) - case "$gl_cv_func_printf_directive_lc" in - *yes) - case "$gl_cv_func_printf_positions" in - *yes) - case "$gl_cv_func_printf_flag_grouping" in - *yes) - case "$gl_cv_func_printf_flag_leftadjust" in - *yes) - case "$gl_cv_func_printf_flag_zero" in - *yes) - case "$gl_cv_func_printf_precision" in - *yes) - case "$gl_cv_func_printf_enomem" in - *yes) - # vfprintf exists and is - # already POSIX compliant. - gl_cv_func_vfprintf_posix=yes - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac - ;; - esac -]) - -AC_DEFUN([gl_REPLACE_VFPRINTF], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - AC_LIBOBJ([vfprintf]) - REPLACE_VFPRINTF=1 - AC_DEFINE([REPLACE_VFPRINTF_POSIX], [1], - [Define if vfprintf is overridden by a POSIX compliant gnulib implementation.]) - gl_PREREQ_VFPRINTF -]) - -AC_DEFUN([gl_PREREQ_VFPRINTF], [:]) diff --git a/m4/xsize.m4 b/m4/xsize.m4 deleted file mode 100644 index 649db9c5eab..00000000000 --- a/m4/xsize.m4 +++ /dev/null @@ -1,12 +0,0 @@ -# xsize.m4 serial 5 -dnl Copyright (C) 2003-2004, 2008-2023 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_XSIZE], -[ - dnl Prerequisites of lib/xsize.h. - AC_REQUIRE([gl_SIZE_MAX]) - AC_CHECK_HEADERS([stdint.h]) -]) diff --git a/msdos/sedlibmk.inp b/msdos/sedlibmk.inp index 09f98f8e0a2..4300be47d0b 100644 --- a/msdos/sedlibmk.inp +++ b/msdos/sedlibmk.inp @@ -436,7 +436,6 @@ s/= @GL_GENERATE_STDDEF_H_CONDITION@/= 1/ s/= @GL_GENERATE_STDINT_H_CONDITION@/= 1/ s/= @GL_GENERATE_LIMITS_H_CONDITION@/= 1/ s/= @GL_GENERATE_ERRNO_H_CONDITION@/= / -s/= @GL_GENERATE_FLOAT_H_CONDITION@/= / s/= @GL_GENERATE_GETOPT_CDEFS_H_CONDITION@/= 1/ s/= @GL_GENERATE_GETOPT_H_CONDITION@/= 1/ s/= @GL_GENERATE_GMP_H_CONDITION@/= 1/ @@ -464,7 +463,6 @@ OMIT_GNULIB_MODULE_euidaccess = true\ OMIT_GNULIB_MODULE_faccessat = true\ OMIT_GNULIB_MODULE_fcntl = true\ OMIT_GNULIB_MODULE_fdopendir = true\ -OMIT_GNULIB_MODULE_float = true\ OMIT_GNULIB_MODULE_fstatat = true\ OMIT_GNULIB_MODULE_fsync = true\ OMIT_GNULIB_MODULE_getline = true\ @@ -480,8 +478,6 @@ OMIT_GNULIB_MODULE_math = true\ OMIT_GNULIB_MODULE_nanosleep = true\ OMIT_GNULIB_MODULE_open = true\ OMIT_GNULIB_MODULE_pipe2 = true\ -OMIT_GNULIB_MODULE_printf-posix = true\ -OMIT_GNULIB_MODULE_printf-frexpl = true\ OMIT_GNULIB_MODULE_pselect = true\ OMIT_GNULIB_MODULE_putenv = true\ OMIT_GNULIB_MODULE_qcopy-acl = true\ @@ -494,7 +490,6 @@ OMIT_GNULIB_MODULE_symlink = true\ OMIT_GNULIB_MODULE_sys_select = true\ OMIT_GNULIB_MODULE_sys_time = true\ OMIT_GNULIB_MODULE_crypto\/md5 = true\ -OMIT_GNULIB_MODULE_vprintf-posix = true /^arg-nonnull\.h:/,/^[ ][ ]*mv /c\ arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h\ sed -n -e '/GL_ARG_NONNULL/,$$p' < $(top_srcdir)/build-aux/snippet/arg-nonnull.h > $@