Update from Gnulib by running admin/merge-gnulib
* lib/endian.c, lib/endian.in.h, m4/endian_h.m4, m4/sys_cdefs_h.m4: New files, copied from Gnulib.
This commit is contained in:
parent
ce660c5c30
commit
799f78a92c
27 changed files with 918 additions and 119 deletions
|
@ -23,6 +23,12 @@
|
|||
|
||||
#include "acl-internal.h"
|
||||
|
||||
#if defined __CYGWIN__
|
||||
# include <sys/types.h>
|
||||
# include <grp.h>
|
||||
# include <string.h>
|
||||
#endif
|
||||
|
||||
#if USE_ACL && HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */
|
||||
|
||||
# if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */
|
||||
|
@ -63,8 +69,58 @@ acl_access_nontrivial (acl_t acl)
|
|||
acl_tag_t tag;
|
||||
if (acl_get_tag_type (ace, &tag) < 0)
|
||||
return -1;
|
||||
if (!(tag == ACL_USER_OBJ || tag == ACL_GROUP_OBJ || tag == ACL_OTHER))
|
||||
return 1;
|
||||
switch (tag)
|
||||
{
|
||||
case ACL_USER_OBJ:
|
||||
case ACL_GROUP_OBJ:
|
||||
case ACL_OTHER:
|
||||
break;
|
||||
# ifdef __CYGWIN__
|
||||
/* On Cygwin, a trivial ACL inside the Cygwin file system consists of
|
||||
e.g.
|
||||
user::rwx
|
||||
group::r-x
|
||||
other::r-x
|
||||
but a trivial ACL outside the Cygwin file system has more entries:
|
||||
e.g.
|
||||
user::rwx
|
||||
group::r-x
|
||||
group:SYSTEM:rwx
|
||||
group:Administrators:rwx
|
||||
mask::r-x
|
||||
other::r-x
|
||||
*/
|
||||
case ACL_GROUP:
|
||||
{
|
||||
int ignorable = 0;
|
||||
void *qualifier = acl_get_qualifier (ace);
|
||||
if (qualifier != NULL)
|
||||
{
|
||||
gid_t group_id = *(gid_t const *) qualifier;
|
||||
acl_free (qualifier);
|
||||
struct group *group_details = getgrgid (group_id);
|
||||
if (group_details != NULL)
|
||||
{
|
||||
const char *group_sid = group_details->gr_passwd;
|
||||
/* Ignore the ace if the group_sid is one of
|
||||
- S-1-5-18 (group "SYSTEM")
|
||||
- S-1-5-32-544 (group "Administrators")
|
||||
Cf. <https://learn.microsoft.com/en-us/windows/win32/secauthz/well-known-sids> */
|
||||
ignorable = (strcmp (group_sid, "S-1-5-18") == 0
|
||||
|| strcmp (group_sid, "S-1-5-32-544") == 0);
|
||||
}
|
||||
}
|
||||
if (!ignorable)
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
case ACL_MASK:
|
||||
/* XXX Is it OK to ignore acl_get_permset (ace, ...) ? */
|
||||
break;
|
||||
# endif
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return got_one;
|
||||
|
||||
|
|
|
@ -49,8 +49,9 @@
|
|||
_GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_MAY_ALIAS, _GL_ATTRIBUTE_MAYBE_UNUSED,
|
||||
_GL_ATTRIBUTE_NODISCARD, _GL_ATTRIBUTE_NOINLINE, _GL_ATTRIBUTE_NONNULL,
|
||||
_GL_ATTRIBUTE_NONSTRING, _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PACKED,
|
||||
_GL_ATTRIBUTE_PURE, _GL_ATTRIBUTE_RETURNS_NONNULL,
|
||||
_GL_ATTRIBUTE_SENTINEL. */
|
||||
_GL_ATTRIBUTE_PURE, _GL_ATTRIBUTE_REPRODUCIBLE,
|
||||
_GL_ATTRIBUTE_RETURNS_NONNULL, _GL_ATTRIBUTE_SENTINEL,
|
||||
_GL_ATTRIBUTE_UNSEQUENCED. */
|
||||
#if !_GL_CONFIG_H_INCLUDED
|
||||
#error "Please include config.h first."
|
||||
#endif
|
||||
|
@ -88,7 +89,7 @@
|
|||
is the size of the returned memory block.
|
||||
ATTRIBUTE_ALLOC_SIZE ((M, N)) - Multiply the Mth and Nth arguments
|
||||
to determine the size of the returned memory block. */
|
||||
/* Applies to: function, pointer to function, function types. */
|
||||
/* Applies to: functions, pointer to functions, function types. */
|
||||
#define ATTRIBUTE_ALLOC_SIZE(args) _GL_ATTRIBUTE_ALLOC_SIZE (args)
|
||||
|
||||
/* ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
|
||||
|
@ -170,7 +171,7 @@
|
|||
/* Attributes regarding debugging information emitted by the compiler. */
|
||||
|
||||
/* Omit the function from stack traces when debugging. */
|
||||
/* Applies to: function. */
|
||||
/* Applies to: functions. */
|
||||
#define ATTRIBUTE_ARTIFICIAL _GL_ATTRIBUTE_ARTIFICIAL
|
||||
|
||||
/* Make the entity visible to debuggers etc., even with '-fwhole-program'. */
|
||||
|
@ -192,25 +193,64 @@
|
|||
|
||||
/* Always inline the function, and report an error if the compiler
|
||||
cannot inline. */
|
||||
/* Applies to: function. */
|
||||
/* Applies to: functions. */
|
||||
#define ATTRIBUTE_ALWAYS_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE
|
||||
|
||||
/* It is OK for a compiler to omit duplicate calls with the same arguments.
|
||||
/* It is OK for a compiler to move calls to the function and to omit
|
||||
calls to the function if another call has the same arguments or the
|
||||
result is not used.
|
||||
This attribute is safe for a function that neither depends on
|
||||
nor affects observable state, and always returns exactly once -
|
||||
e.g., does not loop forever, and does not call longjmp.
|
||||
(This attribute is stricter than ATTRIBUTE_PURE.) */
|
||||
nor affects state, and always returns exactly once -
|
||||
e.g., does not raise an exception, call longjmp, or loop forever.
|
||||
(This attribute is stricter than ATTRIBUTE_PURE because the
|
||||
function cannot observe state. It is stricter than UNSEQUENCED
|
||||
because the function must return exactly once and cannot depend on
|
||||
state addressed by its arguments.) */
|
||||
/* Applies to: functions. */
|
||||
#define ATTRIBUTE_CONST _GL_ATTRIBUTE_CONST
|
||||
|
||||
/* It is OK for a compiler to omit duplicate calls with the same
|
||||
arguments if observable state is not changed between calls.
|
||||
This attribute is safe for a function that does not affect
|
||||
observable state, and always returns exactly once.
|
||||
(This attribute is looser than ATTRIBUTE_CONST.) */
|
||||
/* It is OK for a compiler to move calls to the function and to omit duplicate
|
||||
calls to the function with the same arguments, so long as the state
|
||||
addressed by its arguments is the same.
|
||||
This attribute is safe for a function that is effectless, idempotent,
|
||||
stateless, and independent; see ISO C 23 § 6.7.12.7 for a definition of
|
||||
these terms.
|
||||
(This attribute is stricter than REPRODUCIBLE because the function
|
||||
must be stateless and independent. It is looser than ATTRIBUTE_CONST
|
||||
because the function need not return exactly once and can depend
|
||||
on state addressed by its arguments.)
|
||||
See also <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2956.htm> and
|
||||
<https://stackoverflow.com/questions/76847905/>. */
|
||||
/* Applies to: functions, pointer to functions, function type. */
|
||||
#define UNSEQUENCED _GL_ATTRIBUTE_UNSEQUENCED
|
||||
|
||||
/* It is OK for a compiler to move calls to the function and to omit
|
||||
calls to the function if another call has the same arguments or the
|
||||
result is not used, and if observable state is the same.
|
||||
This attribute is safe for a function that does not affect observable state
|
||||
and always returns exactly once.
|
||||
(This attribute is looser than ATTRIBUTE_CONST because the function
|
||||
can depend on observable state. It is stricter than REPRODUCIBLE
|
||||
because the function must return exactly once and cannot affect
|
||||
state addressed by its arguments.) */
|
||||
/* Applies to: functions. */
|
||||
#define ATTRIBUTE_PURE _GL_ATTRIBUTE_PURE
|
||||
|
||||
/* It is OK for a compiler to move calls to the function and to omit duplicate
|
||||
calls to the function with the same arguments, so long as the state
|
||||
addressed by its arguments is the same and is updated in time for
|
||||
the rest of the program.
|
||||
This attribute is safe for a function that is effectless and idempotent; see
|
||||
ISO C 23 § 6.7.12.7 for a definition of these terms.
|
||||
(This attribute is looser than UNSEQUENCED because the function need
|
||||
not be stateless and idempotent. It is looser than ATTRIBUTE_PURE
|
||||
because the function need not return exactly once and can affect
|
||||
state addressed by its arguments.)
|
||||
See also <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2956.htm> and
|
||||
<https://stackoverflow.com/questions/76847905/>. */
|
||||
/* Applies to: functions, pointer to functions, function type. */
|
||||
#define REPRODUCIBLE _GL_ATTRIBUTE_REPRODUCIBLE
|
||||
|
||||
/* The function is rarely executed. */
|
||||
/* Applies to: functions. */
|
||||
#define ATTRIBUTE_COLD _GL_ATTRIBUTE_COLD
|
||||
|
|
|
@ -108,8 +108,16 @@ get_linux_boot_time_fallback (struct timespec *p_boot_time)
|
|||
struct stat statbuf;
|
||||
if (stat (filename, &statbuf) >= 0)
|
||||
{
|
||||
*p_boot_time = get_stat_mtime (&statbuf);
|
||||
return 0;
|
||||
struct timespec boot_time = get_stat_mtime (&statbuf);
|
||||
/* On Alpine 3.20.0_rc2 /var/run/utmp was observed with bogus
|
||||
timestamps of ~10 s. Reject timestamps before
|
||||
2005-07-25 23:34:15 UTC (1122334455), as neither Alpine
|
||||
nor Devuan existed then. */
|
||||
if (boot_time.tv_sec >= 1122334455)
|
||||
{
|
||||
*p_boot_time = boot_time;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
|
@ -337,4 +345,78 @@ get_windows_boot_time (struct timespec *p_boot_time)
|
|||
return -1;
|
||||
}
|
||||
|
||||
# ifndef __CYGWIN__
|
||||
# if !(_WIN32_WINNT >= _WIN32_WINNT_VISTA)
|
||||
|
||||
/* Don't assume that UNICODE is not defined. */
|
||||
# undef LoadLibrary
|
||||
# define LoadLibrary LoadLibraryA
|
||||
|
||||
/* Avoid warnings from gcc -Wcast-function-type. */
|
||||
# define GetProcAddress \
|
||||
(void *) GetProcAddress
|
||||
|
||||
/* GetTickCount64 is only available on Windows Vista and later. */
|
||||
typedef ULONGLONG (WINAPI * GetTickCount64FuncType) (void);
|
||||
|
||||
static GetTickCount64FuncType GetTickCount64Func = NULL;
|
||||
static BOOL initialized = FALSE;
|
||||
|
||||
static void
|
||||
initialize (void)
|
||||
{
|
||||
HMODULE kernel32 = LoadLibrary ("kernel32.dll");
|
||||
if (kernel32 != NULL)
|
||||
{
|
||||
GetTickCount64Func =
|
||||
(GetTickCount64FuncType) GetProcAddress (kernel32, "GetTickCount64");
|
||||
}
|
||||
initialized = TRUE;
|
||||
}
|
||||
|
||||
# else
|
||||
|
||||
# define GetTickCount64Func GetTickCount64
|
||||
|
||||
# endif
|
||||
|
||||
/* Fallback for Windows in the form:
|
||||
boot time = current time - uptime
|
||||
This uses the GetTickCount64 function which is only available on Windows
|
||||
Vista and later. See:
|
||||
<https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-gettickcount64>. */
|
||||
static int
|
||||
get_windows_boot_time_fallback (struct timespec *p_boot_time)
|
||||
{
|
||||
# if !(_WIN32_WINNT >= _WIN32_WINNT_VISTA)
|
||||
if (! initialized)
|
||||
initialize ();
|
||||
# endif
|
||||
if (GetTickCount64Func != NULL)
|
||||
{
|
||||
ULONGLONG uptime_ms = GetTickCount64Func ();
|
||||
struct timespec uptime;
|
||||
struct timespec result;
|
||||
struct timeval tv;
|
||||
if (gettimeofday (&tv, NULL) >= 0)
|
||||
{
|
||||
uptime.tv_sec = uptime_ms / 1000;
|
||||
uptime.tv_nsec = (uptime_ms % 1000) * 1000000;
|
||||
result.tv_sec = tv.tv_sec;
|
||||
result.tv_nsec = tv.tv_usec * 1000;
|
||||
if (result.tv_nsec < uptime.tv_nsec)
|
||||
{
|
||||
result.tv_nsec += 1000000000;
|
||||
result.tv_sec -= 1;
|
||||
}
|
||||
result.tv_sec -= uptime.tv_sec;
|
||||
result.tv_nsec -= uptime.tv_nsec;
|
||||
*p_boot_time = result;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
# endif
|
||||
#endif
|
||||
|
|
|
@ -43,6 +43,13 @@
|
|||
# include <OS.h>
|
||||
#endif
|
||||
|
||||
#if defined _WIN32 && ! defined __CYGWIN__
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
# include <windows.h>
|
||||
# include <sysinfoapi.h>
|
||||
# include <sys/time.h>
|
||||
#endif
|
||||
|
||||
#include "idx.h"
|
||||
#include "readutmp.h"
|
||||
#include "stat-time.h"
|
||||
|
@ -247,6 +254,10 @@ get_boot_time_uncached (struct timespec *p_boot_time)
|
|||
{
|
||||
/* Workaround for Windows: */
|
||||
get_windows_boot_time (&found_boot_time);
|
||||
# ifndef __CYGWIN__
|
||||
if (found_boot_time.tv_sec == 0)
|
||||
get_windows_boot_time_fallback (&found_boot_time);
|
||||
# endif
|
||||
}
|
||||
# endif
|
||||
|
||||
|
|
23
lib/endian.c
Normal file
23
lib/endian.c
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* Inline functions for <endian.h>.
|
||||
|
||||
Copyright 2024 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 <https://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Written by Collin Funk. */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#define _GL_ENDIAN_INLINE _GL_EXTERN_INLINE
|
||||
#include <endian.h>
|
236
lib/endian.in.h
Normal file
236
lib/endian.in.h
Normal file
|
@ -0,0 +1,236 @@
|
|||
/* endian.h - Byte order macros
|
||||
|
||||
Copyright 2024 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 <https://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Written by Collin Funk. */
|
||||
|
||||
#ifndef _@GUARD_PREFIX@_ENDIAN_H
|
||||
|
||||
#if __GNUC__ >= 3
|
||||
@PRAGMA_SYSTEM_HEADER@
|
||||
#endif
|
||||
@PRAGMA_COLUMNS@
|
||||
|
||||
#if @HAVE_ENDIAN_H@
|
||||
|
||||
/* The include_next requires a split double-inclusion guard. */
|
||||
# @INCLUDE_NEXT@ @NEXT_ENDIAN_H@
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/* glibc defines all macros and functions but is missing types from
|
||||
stdint.h. */
|
||||
#if @ENDIAN_H_JUST_MISSING_STDINT@
|
||||
# include <stdint.h>
|
||||
#else
|
||||
|
||||
/* Others platforms. */
|
||||
#ifndef _@GUARD_PREFIX@_ENDIAN_H
|
||||
#define _@GUARD_PREFIX@_ENDIAN_H 1
|
||||
|
||||
/* This file uses _GL_INLINE, WORDS_BIGENDIAN. */
|
||||
#if !_GL_CONFIG_H_INCLUDED
|
||||
#error "Please include config.h first."
|
||||
#endif
|
||||
|
||||
/* Define uint16_t and uint32_t.
|
||||
Define uint64_t if it is available. */
|
||||
#include <stdint.h>
|
||||
|
||||
/* Byteswap functions. */
|
||||
#include <byteswap.h>
|
||||
|
||||
_GL_INLINE_HEADER_BEGIN
|
||||
#ifndef _GL_ENDIAN_INLINE
|
||||
# define _GL_ENDIAN_INLINE _GL_INLINE
|
||||
#endif
|
||||
|
||||
#define LITTLE_ENDIAN 1234
|
||||
#define BIG_ENDIAN 4321
|
||||
#define PDP_ENDIAN 3412
|
||||
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
# define BYTE_ORDER BIG_ENDIAN
|
||||
#else
|
||||
# define BYTE_ORDER LITTLE_ENDIAN
|
||||
#endif
|
||||
|
||||
/* Make sure function-like macros get undefined. */
|
||||
#if @HAVE_ENDIAN_H@
|
||||
# undef be16toh
|
||||
# undef be32toh
|
||||
# undef be64toh
|
||||
# undef htobe16
|
||||
# undef htobe32
|
||||
# undef htobe64
|
||||
# undef le16toh
|
||||
# undef le32toh
|
||||
# undef le64toh
|
||||
# undef htole16
|
||||
# undef htole32
|
||||
# undef htole64
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Big endian to host. */
|
||||
|
||||
_GL_ENDIAN_INLINE uint16_t
|
||||
be16toh (uint16_t x)
|
||||
{
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
return x;
|
||||
#else
|
||||
return bswap_16 (x);
|
||||
#endif
|
||||
}
|
||||
|
||||
_GL_ENDIAN_INLINE uint32_t
|
||||
be32toh (uint32_t x)
|
||||
{
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
return x;
|
||||
#else
|
||||
return bswap_32 (x);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef UINT64_MAX
|
||||
_GL_ENDIAN_INLINE uint64_t
|
||||
be64toh (uint64_t x)
|
||||
{
|
||||
# if BYTE_ORDER == BIG_ENDIAN
|
||||
return x;
|
||||
# else
|
||||
return bswap_64 (x);
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Host to big endian. */
|
||||
|
||||
_GL_ENDIAN_INLINE uint16_t
|
||||
htobe16 (uint16_t x)
|
||||
{
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
return x;
|
||||
#else
|
||||
return bswap_16 (x);
|
||||
#endif
|
||||
}
|
||||
|
||||
_GL_ENDIAN_INLINE uint32_t
|
||||
htobe32 (uint32_t x)
|
||||
{
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
return x;
|
||||
#else
|
||||
return bswap_32 (x);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef UINT64_MAX
|
||||
_GL_ENDIAN_INLINE uint64_t
|
||||
htobe64 (uint64_t x)
|
||||
{
|
||||
# if BYTE_ORDER == BIG_ENDIAN
|
||||
return x;
|
||||
# else
|
||||
return bswap_64 (x);
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Little endian to host. */
|
||||
|
||||
_GL_ENDIAN_INLINE uint16_t
|
||||
le16toh (uint16_t x)
|
||||
{
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
return bswap_16 (x);
|
||||
#else
|
||||
return x;
|
||||
#endif
|
||||
}
|
||||
|
||||
_GL_ENDIAN_INLINE uint32_t
|
||||
le32toh (uint32_t x)
|
||||
{
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
return bswap_32 (x);
|
||||
#else
|
||||
return x;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef UINT64_MAX
|
||||
_GL_ENDIAN_INLINE uint64_t
|
||||
le64toh (uint64_t x)
|
||||
{
|
||||
# if BYTE_ORDER == BIG_ENDIAN
|
||||
return bswap_64 (x);
|
||||
# else
|
||||
return x;
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Host to little endian. */
|
||||
|
||||
_GL_ENDIAN_INLINE uint16_t
|
||||
htole16 (uint16_t x)
|
||||
{
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
return bswap_16 (x);
|
||||
#else
|
||||
return x;
|
||||
#endif
|
||||
}
|
||||
|
||||
_GL_ENDIAN_INLINE uint32_t
|
||||
htole32 (uint32_t x)
|
||||
{
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
return bswap_32 (x);
|
||||
#else
|
||||
return x;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef UINT64_MAX
|
||||
_GL_ENDIAN_INLINE uint64_t
|
||||
htole64 (uint64_t x)
|
||||
{
|
||||
# if BYTE_ORDER == BIG_ENDIAN
|
||||
return bswap_64 (x);
|
||||
# else
|
||||
return x;
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
_GL_INLINE_HEADER_END
|
||||
|
||||
#endif /* @ENDIAN_H_JUST_MISSING_STDINT@ */
|
||||
#endif /* _@GUARD_PREFIX@_ENDIAN_H */
|
||||
#endif /* _@GUARD_PREFIX@_ENDIAN_H */
|
|
@ -29,9 +29,7 @@
|
|||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#if defined _WIN32 && ! defined __CYGWIN__
|
||||
# include <io.h>
|
||||
#else
|
||||
#if !(defined _WIN32 && ! defined __CYGWIN__)
|
||||
# include "root-uid.h"
|
||||
#endif
|
||||
|
||||
|
@ -88,7 +86,7 @@ euidaccess (const char *file, int mode)
|
|||
#elif HAVE_EACCESS /* FreeBSD */
|
||||
return eaccess (file, mode);
|
||||
#elif defined _WIN32 && ! defined __CYGWIN__ /* mingw */
|
||||
return _access (file, mode);
|
||||
return access (file, mode);
|
||||
#else /* Mac OS X, NetBSD, OpenBSD, HP-UX, Solaris, Cygwin, BeOS */
|
||||
|
||||
uid_t uid = getuid ();
|
||||
|
|
|
@ -723,7 +723,7 @@ _getopt_internal (int argc, char **argv, const char *optstring,
|
|||
return result;
|
||||
}
|
||||
|
||||
/* glibc gets a LSB-compliant getopt and a POSIX-complaint __posix_getopt.
|
||||
/* glibc gets a LSB-compliant getopt and a POSIX-compliant __posix_getopt.
|
||||
Standalone applications just get a POSIX-compliant getopt.
|
||||
POSIX and LSB both require these functions to take 'char *const *argv'
|
||||
even though this is incorrect (because of the permutation). */
|
||||
|
|
|
@ -264,6 +264,8 @@ EMACSRES = @EMACSRES@
|
|||
EMACS_MANIFEST = @EMACS_MANIFEST@
|
||||
EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
|
||||
EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
|
||||
ENDIAN_H = @ENDIAN_H@
|
||||
ENDIAN_H_JUST_MISSING_STDINT = @ENDIAN_H_JUST_MISSING_STDINT@
|
||||
ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
|
||||
ENOLINK_VALUE = @ENOLINK_VALUE@
|
||||
EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
|
||||
|
@ -349,6 +351,7 @@ GL_COND_OBJ_UTIMENSAT_CONDITION = @GL_COND_OBJ_UTIMENSAT_CONDITION@
|
|||
GL_GENERATE_ALLOCA_H_CONDITION = @GL_GENERATE_ALLOCA_H_CONDITION@
|
||||
GL_GENERATE_ASSERT_H_CONDITION = @GL_GENERATE_ASSERT_H_CONDITION@
|
||||
GL_GENERATE_BYTESWAP_H_CONDITION = @GL_GENERATE_BYTESWAP_H_CONDITION@
|
||||
GL_GENERATE_ENDIAN_H_CONDITION = @GL_GENERATE_ENDIAN_H_CONDITION@
|
||||
GL_GENERATE_ERRNO_H_CONDITION = @GL_GENERATE_ERRNO_H_CONDITION@
|
||||
GL_GENERATE_EXECINFO_H_CONDITION = @GL_GENERATE_EXECINFO_H_CONDITION@
|
||||
GL_GENERATE_GETOPT_CDEFS_H_CONDITION = @GL_GENERATE_GETOPT_CDEFS_H_CONDITION@
|
||||
|
@ -761,6 +764,7 @@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
|
|||
HAVE_DIRENT_H = @HAVE_DIRENT_H@
|
||||
HAVE_DPRINTF = @HAVE_DPRINTF@
|
||||
HAVE_DUP3 = @HAVE_DUP3@
|
||||
HAVE_ENDIAN_H = @HAVE_ENDIAN_H@
|
||||
HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
|
||||
HAVE_EXECVPE = @HAVE_EXECVPE@
|
||||
HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
|
||||
|
@ -1044,6 +1048,7 @@ NDK_BUILD_SDK = @NDK_BUILD_SDK@
|
|||
NEXT_ASSERT_H = @NEXT_ASSERT_H@
|
||||
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_ENDIAN_H = @NEXT_AS_FIRST_DIRECTIVE_ENDIAN_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_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
|
||||
|
@ -1063,6 +1068,7 @@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
|
|||
NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
|
||||
NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
|
||||
NEXT_DIRENT_H = @NEXT_DIRENT_H@
|
||||
NEXT_ENDIAN_H = @NEXT_ENDIAN_H@
|
||||
NEXT_ERRNO_H = @NEXT_ERRNO_H@
|
||||
NEXT_FCNTL_H = @NEXT_FCNTL_H@
|
||||
NEXT_GETOPT_H = @NEXT_GETOPT_H@
|
||||
|
@ -1189,6 +1195,7 @@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@
|
|||
REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
|
||||
REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@
|
||||
REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
|
||||
REPLACE_GETUSERSHELL = @REPLACE_GETUSERSHELL@
|
||||
REPLACE_GMTIME = @REPLACE_GMTIME@
|
||||
REPLACE_IMAXABS = @REPLACE_IMAXABS@
|
||||
REPLACE_IMAXDIV = @REPLACE_IMAXDIV@
|
||||
|
@ -1450,6 +1457,7 @@ gl_GNULIB_ENABLED_d3b2383720ee0e541357aa2aac598e2b_CONDITION = @gl_GNULIB_ENABLE
|
|||
gl_GNULIB_ENABLED_dirfd_CONDITION = @gl_GNULIB_ENABLED_dirfd_CONDITION@
|
||||
gl_GNULIB_ENABLED_e80bf6f757095d2e5fc94dafb8f8fc8b_CONDITION = @gl_GNULIB_ENABLED_e80bf6f757095d2e5fc94dafb8f8fc8b_CONDITION@
|
||||
gl_GNULIB_ENABLED_ef455225c00f5049c808c2eda3e76866_CONDITION = @gl_GNULIB_ENABLED_ef455225c00f5049c808c2eda3e76866_CONDITION@
|
||||
gl_GNULIB_ENABLED_endian_CONDITION = @gl_GNULIB_ENABLED_endian_CONDITION@
|
||||
gl_GNULIB_ENABLED_euidaccess_CONDITION = @gl_GNULIB_ENABLED_euidaccess_CONDITION@
|
||||
gl_GNULIB_ENABLED_fd38c7e463b54744b77b98aeafb4fa7c_CONDITION = @gl_GNULIB_ENABLED_fd38c7e463b54744b77b98aeafb4fa7c_CONDITION@
|
||||
gl_GNULIB_ENABLED_getdelim_CONDITION = @gl_GNULIB_ENABLED_getdelim_CONDITION@
|
||||
|
@ -1900,6 +1908,39 @@ EXTRA_DIST += eloop-threshold.h
|
|||
endif
|
||||
## end gnulib module eloop-threshold
|
||||
|
||||
## begin gnulib module endian
|
||||
ifeq (,$(OMIT_GNULIB_MODULE_endian))
|
||||
|
||||
ifneq (,$(gl_GNULIB_ENABLED_endian_CONDITION))
|
||||
BUILT_SOURCES += $(ENDIAN_H)
|
||||
|
||||
# We need the following in order to create <endian.h> when the system
|
||||
# doesn't have one.
|
||||
ifneq (,$(GL_GENERATE_ENDIAN_H_CONDITION))
|
||||
endian.h: endian.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|@''HAVE_ENDIAN_H''@|$(HAVE_ENDIAN_H)|g' \
|
||||
-e 's|@''NEXT_ENDIAN_H''@|$(NEXT_ENDIAN_H)|g' \
|
||||
-e 's|@''ENDIAN_H_JUST_MISSING_STDINT''@|$(ENDIAN_H_JUST_MISSING_STDINT)|g' \
|
||||
$(srcdir)/endian.in.h > $@-t
|
||||
$(AM_V_at)mv $@-t $@
|
||||
libgnu_a_SOURCES += endian.c
|
||||
else
|
||||
endian.h: $(top_builddir)/config.status
|
||||
rm -f $@
|
||||
endif
|
||||
MOSTLYCLEANFILES += endian.h endian.h-t
|
||||
|
||||
endif
|
||||
EXTRA_DIST += endian.in.h
|
||||
|
||||
endif
|
||||
## end gnulib module endian
|
||||
|
||||
## begin gnulib module errno
|
||||
ifeq (,$(OMIT_GNULIB_MODULE_errno))
|
||||
|
||||
|
@ -4254,6 +4295,7 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
|
|||
-e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
|
||||
-e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \
|
||||
-e 's|@''REPLACE_GETPASS_FOR_GETPASS_GNU''@|$(REPLACE_GETPASS_FOR_GETPASS_GNU)|g' \
|
||||
-e 's|@''REPLACE_GETUSERSHELL''@|$(REPLACE_GETUSERSHELL)|g' \
|
||||
-e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \
|
||||
-e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
|
||||
-e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
|
||||
|
|
|
@ -16,37 +16,28 @@
|
|||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _IEEE754_H
|
||||
|
||||
#define _IEEE754_H 1
|
||||
|
||||
#ifndef _GL_GNULIB_HEADER
|
||||
/* Ordinary glibc usage. */
|
||||
# include <features.h>
|
||||
# include <endian.h>
|
||||
# include <bits/endian.h>
|
||||
# define _IEEE754_BYTE_ORDER __BYTE_ORDER
|
||||
# define _IEEE754_BIG_ENDIAN __BIG_ENDIAN
|
||||
# define _IEEE754_LITTLE_ENDIAN __LITTLE_ENDIAN
|
||||
# define _IEEE754_FLOAT_WORD_ORDER __FLOAT_WORD_ORDER
|
||||
#else
|
||||
/* Gnulib usage. */
|
||||
# ifndef __BEGIN_DECLS
|
||||
# ifdef __cplusplus
|
||||
# define __BEGIN_DECLS extern "C" {
|
||||
# define __END_DECLS }
|
||||
# else
|
||||
# define __BEGIN_DECLS
|
||||
# define __END_DECLS
|
||||
# endif
|
||||
# endif
|
||||
# ifndef __FLOAT_WORD_ORDER
|
||||
# define __LITTLE_ENDIAN 1234
|
||||
# define __BIG_ENDIAN 4321
|
||||
# ifdef WORDS_BIGENDIAN
|
||||
# define __BYTE_ORDER __BIG_ENDIAN
|
||||
# else
|
||||
# define __BYTE_ORDER __LITTLE_ENDIAN
|
||||
# endif
|
||||
# define __FLOAT_WORD_ORDER __BYTE_ORDER
|
||||
# endif
|
||||
# include <endian.h>
|
||||
# define _IEEE754_BYTE_ORDER BYTE_ORDER
|
||||
# define _IEEE754_BIG_ENDIAN BIG_ENDIAN
|
||||
# define _IEEE754_LITTLE_ENDIAN LITTLE_ENDIAN
|
||||
# define _IEEE754_FLOAT_WORD_ORDER BYTE_ORDER
|
||||
#endif
|
||||
|
||||
__BEGIN_DECLS
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
union ieee754_float
|
||||
{
|
||||
|
@ -55,12 +46,12 @@ union ieee754_float
|
|||
/* This is the IEEE 754 single-precision format. */
|
||||
struct
|
||||
{
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
#if _IEEE754_BYTE_ORDER == _IEEE754_BIG_ENDIAN
|
||||
unsigned int negative:1;
|
||||
unsigned int exponent:8;
|
||||
unsigned int mantissa:23;
|
||||
#endif /* Big endian. */
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#if _IEEE754_BYTE_ORDER == _IEEE754_LITTLE_ENDIAN
|
||||
unsigned int mantissa:23;
|
||||
unsigned int exponent:8;
|
||||
unsigned int negative:1;
|
||||
|
@ -70,13 +61,13 @@ union ieee754_float
|
|||
/* This format makes it easier to see if a NaN is a signalling NaN. */
|
||||
struct
|
||||
{
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
#if _IEEE754_BYTE_ORDER == _IEEE754_BIG_ENDIAN
|
||||
unsigned int negative:1;
|
||||
unsigned int exponent:8;
|
||||
unsigned int quiet_nan:1;
|
||||
unsigned int mantissa:22;
|
||||
#endif /* Big endian. */
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#if _IEEE754_BYTE_ORDER == _IEEE754_LITTLE_ENDIAN
|
||||
unsigned int mantissa:22;
|
||||
unsigned int quiet_nan:1;
|
||||
unsigned int exponent:8;
|
||||
|
@ -95,15 +86,15 @@ union ieee754_double
|
|||
/* This is the IEEE 754 double-precision format. */
|
||||
struct
|
||||
{
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
#if _IEEE754_BYTE_ORDER == _IEEE754_BIG_ENDIAN
|
||||
unsigned int negative:1;
|
||||
unsigned int exponent:11;
|
||||
/* Together these comprise the mantissa. */
|
||||
unsigned int mantissa0:20;
|
||||
unsigned int mantissa1:32;
|
||||
#endif /* Big endian. */
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
# if __FLOAT_WORD_ORDER == __BIG_ENDIAN
|
||||
#if _IEEE754_BYTE_ORDER == _IEEE754_LITTLE_ENDIAN
|
||||
# if _IEEE754_FLOAT_WORD_ORDER == _IEEE754_BIG_ENDIAN
|
||||
unsigned int mantissa0:20;
|
||||
unsigned int exponent:11;
|
||||
unsigned int negative:1;
|
||||
|
@ -121,7 +112,7 @@ union ieee754_double
|
|||
/* This format makes it easier to see if a NaN is a signalling NaN. */
|
||||
struct
|
||||
{
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
#if _IEEE754_BYTE_ORDER == _IEEE754_BIG_ENDIAN
|
||||
unsigned int negative:1;
|
||||
unsigned int exponent:11;
|
||||
unsigned int quiet_nan:1;
|
||||
|
@ -129,7 +120,7 @@ union ieee754_double
|
|||
unsigned int mantissa0:19;
|
||||
unsigned int mantissa1:32;
|
||||
#else
|
||||
# if __FLOAT_WORD_ORDER == __BIG_ENDIAN
|
||||
# if _IEEE754_FLOAT_WORD_ORDER == _IEEE754_BIG_ENDIAN
|
||||
unsigned int mantissa0:19;
|
||||
unsigned int quiet_nan:1;
|
||||
unsigned int exponent:11;
|
||||
|
@ -157,15 +148,15 @@ union ieee854_long_double
|
|||
/* This is the IEEE 854 double-extended-precision format. */
|
||||
struct
|
||||
{
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
#if _IEEE754_BYTE_ORDER == _IEEE754_BIG_ENDIAN
|
||||
unsigned int negative:1;
|
||||
unsigned int exponent:15;
|
||||
unsigned int empty:16;
|
||||
unsigned int mantissa0:32;
|
||||
unsigned int mantissa1:32;
|
||||
#endif
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
# if __FLOAT_WORD_ORDER == __BIG_ENDIAN
|
||||
#if _IEEE754_BYTE_ORDER == _IEEE754_LITTLE_ENDIAN
|
||||
# if _IEEE754_FLOAT_WORD_ORDER == _IEEE754_BIG_ENDIAN
|
||||
unsigned int exponent:15;
|
||||
unsigned int negative:1;
|
||||
unsigned int empty:16;
|
||||
|
@ -184,7 +175,7 @@ union ieee854_long_double
|
|||
/* This is for NaNs in the IEEE 854 double-extended-precision format. */
|
||||
struct
|
||||
{
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
#if _IEEE754_BYTE_ORDER == _IEEE754_BIG_ENDIAN
|
||||
unsigned int negative:1;
|
||||
unsigned int exponent:15;
|
||||
unsigned int empty:16;
|
||||
|
@ -193,8 +184,8 @@ union ieee854_long_double
|
|||
unsigned int mantissa0:30;
|
||||
unsigned int mantissa1:32;
|
||||
#endif
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
# if __FLOAT_WORD_ORDER == __BIG_ENDIAN
|
||||
#if _IEEE754_BYTE_ORDER == _IEEE754_LITTLE_ENDIAN
|
||||
# if _IEEE754_FLOAT_WORD_ORDER == _IEEE754_BIG_ENDIAN
|
||||
unsigned int exponent:15;
|
||||
unsigned int negative:1;
|
||||
unsigned int empty:16;
|
||||
|
@ -217,6 +208,8 @@ union ieee854_long_double
|
|||
|
||||
#define IEEE854_LONG_DOUBLE_BIAS 0x3fff
|
||||
|
||||
__END_DECLS
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* ieee754.h */
|
||||
|
|
|
@ -98,6 +98,16 @@ rpl_readlink (char const *file, char *buf, size_t bufsize)
|
|||
}
|
||||
# endif
|
||||
|
||||
# if defined __CYGWIN__
|
||||
/* On Cygwin 3.3.6, readlink("/dev/null") returns "\\Device\\Null", which
|
||||
is unusable. Better fail with EINVAL. */
|
||||
if (r > 0 && strncmp (file, "/dev/", 5) == 0 && buf[0] == '\\')
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
# endif
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
|
@ -79,6 +79,16 @@ rpl_readlinkat (int fd, char const *file, char *buf, size_t bufsize)
|
|||
}
|
||||
# endif
|
||||
|
||||
# if defined __CYGWIN__
|
||||
/* On Cygwin 3.3.6, readlinkat(AT_FDCWD,"/dev/null") returns "\\Device\\Null",
|
||||
which is unusable. Better fail with EINVAL. */
|
||||
if (r > 0 && strncmp (file, "/dev/", 5) == 0 && buf[0] == '\\')
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
# endif
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@
|
|||
#define _@GUARD_PREFIX@_STDINT_H
|
||||
|
||||
/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX,
|
||||
LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH. */
|
||||
LONG_MIN, LONG_MAX, ULONG_MAX, CHAR_BIT, _GL_INTEGER_WIDTH. */
|
||||
#include <limits.h>
|
||||
|
||||
/* Override WINT_MIN and WINT_MAX if gnulib's <wchar.h> or <wctype.h> overrides
|
||||
|
@ -189,6 +189,10 @@ typedef __int64 gl_int64_t;
|
|||
# define int64_t gl_int64_t
|
||||
# define GL_INT64_T
|
||||
# else
|
||||
/* Verify that 'long long' has exactly 64 bits. */
|
||||
typedef _gl_verify_int64_bits[
|
||||
_STDINT_MAX (1, sizeof (long long) * CHAR_BIT, 0ll) >> 31 >> 31 == 1
|
||||
? 1 : -1];
|
||||
# undef int64_t
|
||||
typedef long long int gl_int64_t;
|
||||
# define int64_t gl_int64_t
|
||||
|
@ -210,6 +214,11 @@ typedef unsigned __int64 gl_uint64_t;
|
|||
# define uint64_t gl_uint64_t
|
||||
# define GL_UINT64_T
|
||||
# else
|
||||
/* Verify that 'unsigned long long' has exactly 64 bits. */
|
||||
typedef _gl_verify_uint64_bits[
|
||||
_STDINT_MAX (0, sizeof (unsigned long long) * CHAR_BIT, 0ull)
|
||||
>> 31 >> 31 >> 1 == 1
|
||||
? 1 : -1];
|
||||
# undef uint64_t
|
||||
typedef unsigned long long int gl_uint64_t;
|
||||
# define uint64_t gl_uint64_t
|
||||
|
|
|
@ -26,6 +26,10 @@
|
|||
|
||||
#@INCLUDE_NEXT@ @NEXT_STDLIB_H@
|
||||
|
||||
/* Make sure that the macros that indicate the special invocation convention
|
||||
get undefined. This is needed at least on CentOS 7. */
|
||||
#undef __need_malloc_and_calloc
|
||||
|
||||
#else
|
||||
/* Normal invocation convention. */
|
||||
|
||||
|
|
|
@ -1252,6 +1252,9 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
|
|||
cpy (am_len, a_month);
|
||||
break;
|
||||
#else
|
||||
# if defined _WIN32 && !defined __CYGWIN__
|
||||
format_char = L_('b');
|
||||
# endif
|
||||
goto underlying_strftime;
|
||||
#endif
|
||||
|
||||
|
@ -1288,6 +1291,9 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
|
|||
subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(D_T_FMT));
|
||||
#elif USE_C_LOCALE && !HAVE_STRFTIME_L
|
||||
subfmt = L_("%a %b %e %H:%M:%S %Y");
|
||||
#elif defined _WIN32 && !defined __CYGWIN__
|
||||
/* On native Windows, "%c" is "%d/%m/%Y %H:%M:%S" by default. */
|
||||
subfmt = L_("%a %b %e %H:%M:%S %Y");
|
||||
#else
|
||||
goto underlying_strftime;
|
||||
#endif
|
||||
|
@ -1709,8 +1715,9 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
|
|||
#elif USE_C_LOCALE && !HAVE_STRFTIME_L
|
||||
subfmt = L_("%I:%M:%S %p");
|
||||
goto subformat;
|
||||
#elif (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__
|
||||
/* macOS, FreeBSD strftime() may produce empty output for "%r". */
|
||||
#elif (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || (defined _WIN32 && !defined __CYGWIN__)
|
||||
/* macOS, FreeBSD, native Windows strftime() may produce empty output
|
||||
for "%r". */
|
||||
subfmt = L_("%I:%M:%S %p");
|
||||
goto subformat;
|
||||
#else
|
||||
|
|
|
@ -1531,12 +1531,21 @@ _GL_CXXALIASWARN (getpid);
|
|||
|
||||
|
||||
#if @GNULIB_GETUSERSHELL@
|
||||
# if @REPLACE_GETUSERSHELL@
|
||||
/* Return the next valid login shell on the system, or NULL when the end of
|
||||
the list has been reached. */
|
||||
# if !@HAVE_DECL_GETUSERSHELL@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef getusershell
|
||||
# define getusershell rpl_getusershell
|
||||
# endif
|
||||
_GL_FUNCDECL_RPL (getusershell, char *, (void));
|
||||
_GL_CXXALIAS_RPL (getusershell, char *, (void));
|
||||
# else
|
||||
# if !@HAVE_DECL_GETUSERSHELL@
|
||||
_GL_FUNCDECL_SYS (getusershell, char *, (void));
|
||||
# endif
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (getusershell, char *, (void));
|
||||
# endif
|
||||
_GL_CXXALIASWARN (getusershell);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef getusershell
|
||||
|
@ -1548,10 +1557,19 @@ _GL_WARN_ON_USE (getusershell, "getusershell is unportable - "
|
|||
|
||||
#if @GNULIB_GETUSERSHELL@
|
||||
/* Rewind to pointer that is advanced at each getusershell() call. */
|
||||
# if !@HAVE_DECL_GETUSERSHELL@
|
||||
# if @REPLACE_GETUSERSHELL@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef setusershell
|
||||
# define setusershell rpl_setusershell
|
||||
# endif
|
||||
_GL_FUNCDECL_RPL (setusershell, void, (void));
|
||||
_GL_CXXALIAS_RPL (setusershell, void, (void));
|
||||
# else
|
||||
# if !@HAVE_DECL_GETUSERSHELL@
|
||||
_GL_FUNCDECL_SYS (setusershell, void, (void));
|
||||
# endif
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (setusershell, void, (void));
|
||||
# endif
|
||||
_GL_CXXALIASWARN (setusershell);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef setusershell
|
||||
|
@ -1564,10 +1582,19 @@ _GL_WARN_ON_USE (setusershell, "setusershell is unportable - "
|
|||
#if @GNULIB_GETUSERSHELL@
|
||||
/* Free the pointer that is advanced at each getusershell() call and
|
||||
associated resources. */
|
||||
# if !@HAVE_DECL_GETUSERSHELL@
|
||||
# if @REPLACE_GETUSERSHELL@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef endusershell
|
||||
# define endusershell rpl_endusershell
|
||||
# endif
|
||||
_GL_FUNCDECL_RPL (endusershell, void, (void));
|
||||
_GL_CXXALIAS_RPL (endusershell, void, (void));
|
||||
# else
|
||||
# if !@HAVE_DECL_GETUSERSHELL@
|
||||
_GL_FUNCDECL_SYS (endusershell, void, (void));
|
||||
# endif
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (endusershell, void, (void));
|
||||
# endif
|
||||
_GL_CXXALIASWARN (endusershell);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef endusershell
|
||||
|
|
|
@ -220,7 +220,7 @@ fdutimens (int fd, char const *file, struct timespec const timespec[2])
|
|||
if (0 <= utimensat_works_really)
|
||||
{
|
||||
int result;
|
||||
# if __linux__ || __sun
|
||||
# if defined __linux__ || defined __sun || defined __NetBSD__
|
||||
/* As recently as Linux kernel 2.6.32 (Dec 2009), several file
|
||||
systems (xfs, ntfs-3g) have bugs with a single UTIME_OMIT,
|
||||
but work if both times are either explicitly specified or
|
||||
|
@ -230,6 +230,7 @@ fdutimens (int fd, char const *file, struct timespec const timespec[2])
|
|||
where UTIME_OMIT would have worked.
|
||||
|
||||
The same bug occurs in Solaris 11.1 (Apr 2013).
|
||||
The same bug occurs in NetBSD 10.0 (May 2024).
|
||||
|
||||
FIXME: Simplify this in 2024, when these file system bugs are
|
||||
no longer common on Gnulib target platforms. */
|
||||
|
@ -440,7 +441,7 @@ fdutimens (int fd, char const *file, struct timespec const timespec[2])
|
|||
# endif
|
||||
if (futimes (fd, t) == 0)
|
||||
{
|
||||
# if __linux__ && __GLIBC__
|
||||
# if defined __linux__ && defined __GLIBC__
|
||||
/* Work around a longstanding glibc bug, still present as
|
||||
of 2010-12-27. On older Linux kernels that lack both
|
||||
utimensat and utimes, glibc's futimes rounds instead of
|
||||
|
@ -553,7 +554,7 @@ lutimens (char const *file, struct timespec const timespec[2])
|
|||
if (0 <= lutimensat_works_really)
|
||||
{
|
||||
int result;
|
||||
# if __linux__ || __sun
|
||||
# if defined __linux__ || defined __sun || defined __NetBSD__
|
||||
/* As recently as Linux kernel 2.6.32 (Dec 2009), several file
|
||||
systems (xfs, ntfs-3g) have bugs with a single UTIME_OMIT,
|
||||
but work if both times are either explicitly specified or
|
||||
|
@ -563,6 +564,7 @@ lutimens (char const *file, struct timespec const timespec[2])
|
|||
UTIME_OMIT would have worked.
|
||||
|
||||
The same bug occurs in Solaris 11.1 (Apr 2013).
|
||||
The same bug occurs in NetBSD 10.0 (May 2024).
|
||||
|
||||
FIXME: Simplify this for Linux in 2016 and for Solaris in
|
||||
2024, when file system bugs are no longer common. */
|
||||
|
|
|
@ -77,7 +77,7 @@ rpl_utimensat (int fd, char const *file, struct timespec const times[2],
|
|||
int flag)
|
||||
# undef utimensat
|
||||
{
|
||||
# if defined __linux__ || defined __sun
|
||||
# if defined __linux__ || defined __sun || defined __NetBSD__
|
||||
struct timespec ts[2];
|
||||
# endif
|
||||
|
||||
|
@ -86,7 +86,7 @@ rpl_utimensat (int fd, char const *file, struct timespec const times[2],
|
|||
if (0 <= utimensat_works_really)
|
||||
{
|
||||
int result;
|
||||
# if defined __linux__ || defined __sun
|
||||
# if defined __linux__ || defined __sun || defined __NetBSD__
|
||||
struct stat st;
|
||||
/* As recently as Linux kernel 2.6.32 (Dec 2009), several file
|
||||
systems (xfs, ntfs-3g) have bugs with a single UTIME_OMIT,
|
||||
|
@ -97,6 +97,7 @@ rpl_utimensat (int fd, char const *file, struct timespec const times[2],
|
|||
UTIME_OMIT would have worked.
|
||||
|
||||
The same bug occurs in Solaris 11.1 (Apr 2013).
|
||||
The same bug occurs in NetBSD 10.0 (May 2024).
|
||||
|
||||
FIXME: Simplify this in 2024, when these file system bugs are
|
||||
no longer common on Gnulib target platforms. */
|
||||
|
@ -117,9 +118,11 @@ rpl_utimensat (int fd, char const *file, struct timespec const times[2],
|
|||
ts[1] = times[1];
|
||||
times = ts;
|
||||
}
|
||||
# ifdef __hppa__
|
||||
# if defined __hppa__ || defined __NetBSD__
|
||||
/* Linux kernel 2.6.22.19 on hppa does not reject invalid tv_nsec
|
||||
values. */
|
||||
values.
|
||||
|
||||
The same bug occurs in NetBSD 10.0 (May 2024). */
|
||||
else if (times
|
||||
&& ((times[0].tv_nsec != UTIME_NOW
|
||||
&& ! (0 <= times[0].tv_nsec
|
||||
|
|
15
lib/verify.h
15
lib/verify.h
|
@ -259,11 +259,22 @@ template <int w>
|
|||
&& (!defined __cplusplus \
|
||||
|| (__cpp_static_assert < 201411 \
|
||||
&& __GNUG__ < 6 && __clang_major__ < 6 && _MSC_VER < 1910)))
|
||||
# if defined __cplusplus && _MSC_VER >= 1900 && !defined __clang__
|
||||
# if (defined __cplusplus && defined __GNUG__ && __GNUG__ < 6 \
|
||||
&& __cplusplus == 201103L && !defined __clang__)
|
||||
/* g++ >= 4.7, < 6 with option -std=c++11 or -std=gnu++11 supports the
|
||||
two-arguments static_assert but not the one-argument static_assert, and
|
||||
it does not support _Static_assert.
|
||||
We have to play preprocessor tricks to distinguish the two cases. */
|
||||
# define _GL_SA1(a1) static_assert ((a1), "static assertion failed")
|
||||
# define _GL_SA2 static_assert
|
||||
# define _GL_SA3 static_assert
|
||||
# define _GL_SA_PICK(x1,x2,x3,x4,...) x4
|
||||
# define static_assert(...) _GL_SA_PICK(__VA_ARGS__,_GL_SA3,_GL_SA2,_GL_SA1) (__VA_ARGS__)
|
||||
# elif defined __cplusplus && _MSC_VER >= 1900 && !defined __clang__
|
||||
/* MSVC 14 in C++ mode supports the two-arguments static_assert but not
|
||||
the one-argument static_assert, and it does not support _Static_assert.
|
||||
We have to play preprocessor tricks to distinguish the two cases.
|
||||
Since the MSVC preprocessor is not ISO C compliant (see above),.
|
||||
Since the MSVC preprocessor is not ISO C compliant (see above),
|
||||
the solution is specific to MSVC. */
|
||||
# define _GL_EXPAND(x) x
|
||||
# define _GL_SA1(a1) static_assert ((a1), "static assertion failed")
|
||||
|
|
103
m4/endian_h.m4
Normal file
103
m4/endian_h.m4
Normal file
|
@ -0,0 +1,103 @@
|
|||
# endian_h.m4
|
||||
# serial 4
|
||||
dnl Copyright 2024 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 A placeholder for <endian.h>, for platforms that have issues.
|
||||
|
||||
AC_DEFUN_ONCE([gl_ENDIAN_H],
|
||||
[
|
||||
AC_REQUIRE([gl_BIGENDIAN])
|
||||
|
||||
AC_CHECK_HEADERS_ONCE([endian.h])
|
||||
gl_CHECK_NEXT_HEADERS([endian.h])
|
||||
if test $ac_cv_header_endian_h = yes; then
|
||||
HAVE_ENDIAN_H=1
|
||||
dnl Check if endian.h defines uint16_t, uint32_t, and uint64_t.
|
||||
AC_CACHE_CHECK([if endian.h defines stdint types],
|
||||
[gl_cv_header_endian_h_stdint_types],
|
||||
[AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[#include <endian.h>
|
||||
]],
|
||||
[[uint16_t t1 = 0;
|
||||
uint32_t t2 = 0;
|
||||
uint64_t t3 = 0;
|
||||
return !(t1 + t2 + t3);
|
||||
]])],
|
||||
[gl_cv_header_endian_h_stdint_types=yes],
|
||||
[gl_cv_header_endian_h_stdint_types=no])
|
||||
])
|
||||
AC_CACHE_CHECK([if endian.h defines functions and macros],
|
||||
[gl_cv_header_working_endian_h],
|
||||
[gl_cv_header_working_endian_h=no
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[
|
||||
#include <endian.h>
|
||||
]],
|
||||
[[
|
||||
#if LITTLE_ENDIAN == BIG_ENDIAN
|
||||
# error "Endian macros not unique."
|
||||
#endif
|
||||
#if BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != BIG_ENDIAN
|
||||
# error "Byte order not defined."
|
||||
#endif
|
||||
|
||||
/* Big endian to host. */
|
||||
int value16_1 = be16toh (0.0);
|
||||
int value32_1 = be32toh (0.0);
|
||||
int value64_1 = be64toh (0.0);
|
||||
|
||||
/* Host to big endian. */
|
||||
int value16_2 = htobe16 (0.0);
|
||||
int value32_2 = htobe32 (0.0);
|
||||
int value64_2 = htobe64 (0.0);
|
||||
|
||||
/* Little endian to host. */
|
||||
int value16_3 = le16toh (0.0);
|
||||
int value32_3 = le32toh (0.0);
|
||||
int value64_3 = le64toh (0.0);
|
||||
|
||||
/* Host to little endian. */
|
||||
int value16_4 = htole16 (0.0);
|
||||
int value32_4 = htole32 (0.0);
|
||||
int value64_4 = htole64 (0.0);
|
||||
|
||||
/* Make sure the variables get used. */
|
||||
return !(value16_1 + value32_1 + value64_1
|
||||
+ value16_2 + value32_2 + value64_2
|
||||
+ value16_3 + value32_3 + value64_3
|
||||
+ value16_4 + value32_4 + value64_4);
|
||||
]])],
|
||||
[gl_cv_header_working_endian_h=yes],
|
||||
[gl_cv_header_working_endian_h=no])
|
||||
])
|
||||
else
|
||||
HAVE_ENDIAN_H=0
|
||||
fi
|
||||
|
||||
dnl Check if endian.h should be generated.
|
||||
if test "$gl_cv_header_endian_h_stdint_types" = yes \
|
||||
&& test "$gl_cv_header_working_endian_h" = yes; then
|
||||
GL_GENERATE_ENDIAN_H=false
|
||||
else
|
||||
GL_GENERATE_ENDIAN_H=true
|
||||
fi
|
||||
|
||||
dnl Check if endian.h works but is missing types from stdint.h.
|
||||
if test $GL_GENERATE_ENDIAN_H; then
|
||||
if test "$gl_cv_header_working_endian_h" = yes; then
|
||||
ENDIAN_H_JUST_MISSING_STDINT=1
|
||||
else
|
||||
ENDIAN_H_JUST_MISSING_STDINT=0
|
||||
fi
|
||||
else
|
||||
ENDIAN_H_JUST_MISSING_STDINT=0
|
||||
fi
|
||||
|
||||
AC_SUBST([HAVE_ENDIAN_H])
|
||||
AC_SUBST([ENDIAN_H_JUST_MISSING_STDINT])
|
||||
])
|
11
m4/getopt.m4
11
m4/getopt.m4
|
@ -1,5 +1,5 @@
|
|||
# getopt.m4
|
||||
# serial 49
|
||||
# serial 50
|
||||
dnl Copyright (C) 2002-2006, 2008-2024 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -366,14 +366,7 @@ dnl is ambiguous with environment values that contain newlines.
|
|||
|
||||
AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER],
|
||||
[
|
||||
AC_CHECK_HEADERS_ONCE([sys/cdefs.h])
|
||||
if test $ac_cv_header_sys_cdefs_h = yes; then
|
||||
HAVE_SYS_CDEFS_H=1
|
||||
else
|
||||
HAVE_SYS_CDEFS_H=0
|
||||
fi
|
||||
AC_SUBST([HAVE_SYS_CDEFS_H])
|
||||
|
||||
gl_CHECK_HEADER_SYS_CDEFS_H
|
||||
AC_DEFINE([__GETOPT_PREFIX], [[rpl_]],
|
||||
[Define to rpl_ if the getopt replacement functions and variables
|
||||
should be used.])
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# gnulib-common.m4
|
||||
# serial 93
|
||||
# serial 95
|
||||
dnl Copyright (C) 2007-2024 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -114,8 +114,10 @@ AC_DEFUN([gl_COMMON_BODY], [
|
|||
# define _GL_ATTR_nothrow _GL_GNUC_PREREQ (3, 3)
|
||||
# define _GL_ATTR_packed _GL_GNUC_PREREQ (2, 7)
|
||||
# define _GL_ATTR_pure _GL_GNUC_PREREQ (2, 96)
|
||||
# define _GL_ATTR_reproducible 0 /* not yet supported, as of GCC 14 */
|
||||
# define _GL_ATTR_returns_nonnull _GL_GNUC_PREREQ (4, 9)
|
||||
# define _GL_ATTR_sentinel _GL_GNUC_PREREQ (4, 0)
|
||||
# define _GL_ATTR_unsequenced 0 /* not yet supported, as of GCC 14 */
|
||||
# define _GL_ATTR_unused _GL_GNUC_PREREQ (2, 7)
|
||||
# define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4)
|
||||
# endif
|
||||
|
@ -152,7 +154,7 @@ AC_DEFUN([gl_COMMON_BODY], [
|
|||
_GL_ATTRIBUTE_ALLOC_SIZE ((M, N)) declares that the Mth argument multiplied
|
||||
by the Nth argument of the function is the size of the returned memory block.
|
||||
*/
|
||||
/* Applies to: function, pointer to function, function types. */
|
||||
/* Applies to: functions, pointer to functions, function types. */
|
||||
#ifndef _GL_ATTRIBUTE_ALLOC_SIZE
|
||||
# if _GL_HAS_ATTRIBUTE (alloc_size)
|
||||
# define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args))
|
||||
|
@ -163,7 +165,7 @@ AC_DEFUN([gl_COMMON_BODY], [
|
|||
|
||||
/* _GL_ATTRIBUTE_ALWAYS_INLINE tells that the compiler should always inline the
|
||||
function and report an error if it cannot do so. */
|
||||
/* Applies to: function. */
|
||||
/* Applies to: functions. */
|
||||
#ifndef _GL_ATTRIBUTE_ALWAYS_INLINE
|
||||
# if _GL_HAS_ATTRIBUTE (always_inline)
|
||||
# define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__))
|
||||
|
@ -175,7 +177,7 @@ AC_DEFUN([gl_COMMON_BODY], [
|
|||
/* _GL_ATTRIBUTE_ARTIFICIAL declares that the function is not important to show
|
||||
in stack traces when debugging. The compiler should omit the function from
|
||||
stack traces. */
|
||||
/* Applies to: function. */
|
||||
/* Applies to: functions. */
|
||||
#ifndef _GL_ATTRIBUTE_ARTIFICIAL
|
||||
# if _GL_HAS_ATTRIBUTE (artificial)
|
||||
# define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__))
|
||||
|
@ -201,18 +203,23 @@ AC_DEFUN([gl_COMMON_BODY], [
|
|||
# endif
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_CONST declares that it is OK for a compiler to omit duplicate
|
||||
calls to the function with the same arguments.
|
||||
This attribute is safe for a function that neither depends on nor affects
|
||||
observable state, and always returns exactly once - e.g., does not loop
|
||||
forever, and does not call longjmp.
|
||||
(This attribute is stricter than _GL_ATTRIBUTE_PURE.) */
|
||||
/* _GL_ATTRIBUTE_CONST declares:
|
||||
It is OK for a compiler to move calls to the function and to omit
|
||||
calls to the function if another call has the same arguments or the
|
||||
result is not used.
|
||||
This attribute is safe for a function that neither depends on
|
||||
nor affects state, and always returns exactly once -
|
||||
e.g., does not raise an exception, call longjmp, or loop forever.
|
||||
(This attribute is stricter than _GL_ATTRIBUTE_PURE because the
|
||||
function cannot observe state. It is stricter than
|
||||
_GL_ATTRIBUTE_UNSEQUENCED because the function must return exactly
|
||||
once and cannot depend on state addressed by its arguments.) */
|
||||
/* Applies to: functions. */
|
||||
#ifndef _GL_ATTRIBUTE_CONST
|
||||
# if _GL_HAS_ATTRIBUTE (const)
|
||||
# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
|
||||
# else
|
||||
# define _GL_ATTRIBUTE_CONST
|
||||
# define _GL_ATTRIBUTE_CONST _GL_ATTRIBUTE_UNSEQUENCED
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
@ -505,9 +512,9 @@ AC_DEFUN([gl_COMMON_BODY], [
|
|||
minimizing the memory required. */
|
||||
/* Applies to: struct members, struct, union,
|
||||
in C++ also: class. */
|
||||
#ifndef _GL_ATTRIBUTE_PACKED
|
||||
/* Oracle Studio 12.6 miscompiles code with __attribute__ ((__packed__)) despite
|
||||
__has_attribute OK. */
|
||||
#ifndef _GL_ATTRIBUTE_PACKED
|
||||
# if _GL_HAS_ATTRIBUTE (packed) && !defined __SUNPRO_C
|
||||
# define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__))
|
||||
# else
|
||||
|
@ -515,18 +522,49 @@ AC_DEFUN([gl_COMMON_BODY], [
|
|||
# endif
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_PURE declares that It is OK for a compiler to omit duplicate
|
||||
calls to the function with the same arguments if observable state is not
|
||||
changed between calls.
|
||||
This attribute is safe for a function that does not affect
|
||||
observable state, and always returns exactly once.
|
||||
(This attribute is looser than _GL_ATTRIBUTE_CONST.) */
|
||||
/* _GL_ATTRIBUTE_PURE declares:
|
||||
It is OK for a compiler to move calls to the function and to omit
|
||||
calls to the function if another call has the same arguments or the
|
||||
result is not used, and if observable state is the same.
|
||||
This attribute is safe for a function that does not affect observable state
|
||||
and always returns exactly once.
|
||||
(This attribute is looser than _GL_ATTRIBUTE_CONST because the function
|
||||
can depend on observable state. It is stricter than
|
||||
_GL_ATTRIBUTE_REPRODUCIBLE because the function must return exactly
|
||||
once and cannot affect state addressed by its arguments.) */
|
||||
/* Applies to: functions. */
|
||||
#ifndef _GL_ATTRIBUTE_PURE
|
||||
# if _GL_HAS_ATTRIBUTE (pure)
|
||||
# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
|
||||
# else
|
||||
# define _GL_ATTRIBUTE_PURE
|
||||
# define _GL_ATTRIBUTE_PURE _GL_ATTRIBUTE_REPRODUCIBLE
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_REPRODUCIBLE declares:
|
||||
It is OK for a compiler to move calls to the function and to omit duplicate
|
||||
calls to the function with the same arguments, so long as the state
|
||||
addressed by its arguments is the same and is updated in time for
|
||||
the rest of the program.
|
||||
This attribute is safe for a function that is effectless and idempotent; see
|
||||
ISO C 23 § 6.7.12.7 for a definition of these terms.
|
||||
(This attribute is looser than _GL_ATTRIBUTE_UNSEQUENCED because
|
||||
the function need not be stateless and idempotent. It is looser
|
||||
than _GL_ATTRIBUTE_PURE because the function need not return
|
||||
exactly once and can affect state addressed by its arguments.)
|
||||
See also <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2956.htm> and
|
||||
<https://stackoverflow.com/questions/76847905/>. */
|
||||
/* Applies to: functions, pointer to functions, function types. */
|
||||
#ifndef _GL_ATTRIBUTE_REPRODUCIBLE
|
||||
/* This may be revisited when gcc and clang support [[reproducible]] or possibly
|
||||
__attribute__ ((__reproducible__)). */
|
||||
# ifndef _GL_BRACKET_BEFORE_ATTRIBUTE
|
||||
# if _GL_HAS_ATTRIBUTE (reproducible)
|
||||
# define _GL_ATTRIBUTE_REPRODUCIBLE [[reproducible]]
|
||||
# endif
|
||||
# endif
|
||||
# ifndef _GL_ATTRIBUTE_REPRODUCIBLE
|
||||
# define _GL_ATTRIBUTE_REPRODUCIBLE
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
@ -554,6 +592,33 @@ AC_DEFUN([gl_COMMON_BODY], [
|
|||
# endif
|
||||
#endif
|
||||
|
||||
/* _GL_ATTRIBUTE_UNSEQUENCED declares:
|
||||
It is OK for a compiler to move calls to the function and to omit duplicate
|
||||
calls to the function with the same arguments, so long as the state
|
||||
addressed by its arguments is the same.
|
||||
This attribute is safe for a function that is effectless, idempotent,
|
||||
stateless, and independent; see ISO C 23 § 6.7.12.7 for a definition of
|
||||
these terms.
|
||||
(This attribute is stricter than _GL_ATTRIBUTE_REPRODUCIBLE because
|
||||
the function must be stateless and independent. It is looser than
|
||||
_GL_ATTRIBUTE_CONST because the function need not return exactly
|
||||
once and can depend on state addressed by its arguments.)
|
||||
See also <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2956.htm> and
|
||||
<https://stackoverflow.com/questions/76847905/>. */
|
||||
/* Applies to: functions, pointer to functions, function types. */
|
||||
#ifndef _GL_ATTRIBUTE_UNSEQUENCED
|
||||
/* This may be revisited when gcc and clang support [[unsequenced]] or possibly
|
||||
__attribute__ ((__unsequenced__)). */
|
||||
# ifndef _GL_BRACKET_BEFORE_ATTRIBUTE
|
||||
# if _GL_HAS_ATTRIBUTE (unsequenced)
|
||||
# define _GL_ATTRIBUTE_UNSEQUENCED [[unsequenced]]
|
||||
# endif
|
||||
# endif
|
||||
# ifndef _GL_ATTRIBUTE_UNSEQUENCED
|
||||
# define _GL_ATTRIBUTE_UNSEQUENCED
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* A helper macro. Don't use it directly. */
|
||||
#ifndef _GL_ATTRIBUTE_UNUSED
|
||||
# if _GL_HAS_ATTRIBUTE (unused)
|
||||
|
|
|
@ -77,6 +77,7 @@ AC_DEFUN([gl_EARLY],
|
|||
# Code from module dtotimespec:
|
||||
# Code from module dup2:
|
||||
# Code from module eloop-threshold:
|
||||
# Code from module endian:
|
||||
# Code from module environ:
|
||||
# Code from module errno:
|
||||
# Code from module euidaccess:
|
||||
|
@ -666,6 +667,7 @@ AC_DEFUN([gl_INIT],
|
|||
gl_gnulib_enabled_cloexec=false
|
||||
gl_gnulib_enabled_dirfd=false
|
||||
gl_gnulib_enabled_925677f0343de64b89a9f0c790b4104c=false
|
||||
gl_gnulib_enabled_endian=false
|
||||
gl_gnulib_enabled_euidaccess=false
|
||||
gl_gnulib_enabled_getdelim=false
|
||||
gl_gnulib_enabled_getdtablesize=false
|
||||
|
@ -724,6 +726,15 @@ AC_DEFUN([gl_INIT],
|
|||
gl_gnulib_enabled_925677f0343de64b89a9f0c790b4104c=true
|
||||
fi
|
||||
}
|
||||
func_gl_gnulib_m4code_endian ()
|
||||
{
|
||||
if $gl_gnulib_enabled_endian; then :; else
|
||||
gl_ENDIAN_H
|
||||
gl_CONDITIONAL_HEADER([endian.h])
|
||||
AC_PROG_MKDIR_P
|
||||
gl_gnulib_enabled_endian=true
|
||||
fi
|
||||
}
|
||||
func_gl_gnulib_m4code_euidaccess ()
|
||||
{
|
||||
if $gl_gnulib_enabled_euidaccess; then :; else
|
||||
|
@ -1036,6 +1047,9 @@ AC_DEFUN([gl_INIT],
|
|||
if case $host_os in mingw* | windows*) false;; *) test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1;; esac; then
|
||||
func_gl_gnulib_m4code_open
|
||||
fi
|
||||
if $GL_GENERATE_IEEE754_H; then
|
||||
func_gl_gnulib_m4code_endian
|
||||
fi
|
||||
if test $REPLACE_MKTIME = 1; then
|
||||
func_gl_gnulib_m4code_verify
|
||||
fi
|
||||
|
@ -1071,6 +1085,7 @@ AC_DEFUN([gl_INIT],
|
|||
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_endian], [$gl_gnulib_enabled_endian])
|
||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_euidaccess], [$gl_gnulib_enabled_euidaccess])
|
||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_getdelim], [$gl_gnulib_enabled_getdelim])
|
||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_getdtablesize], [$gl_gnulib_enabled_getdtablesize])
|
||||
|
@ -1312,6 +1327,8 @@ AC_DEFUN([gl_FILE_LIST], [
|
|||
lib/dup2.c
|
||||
lib/dynarray.h
|
||||
lib/eloop-threshold.h
|
||||
lib/endian.c
|
||||
lib/endian.in.h
|
||||
lib/errno.in.h
|
||||
lib/euidaccess.c
|
||||
lib/execinfo.c
|
||||
|
@ -1506,6 +1523,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
|||
m4/double-slash-root.m4
|
||||
m4/dup2.m4
|
||||
m4/eealloc.m4
|
||||
m4/endian_h.m4
|
||||
m4/environ.m4
|
||||
m4/errno_h.m4
|
||||
m4/euidaccess.m4
|
||||
|
@ -1605,6 +1623,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
|||
m4/strtoimax.m4
|
||||
m4/strtoll.m4
|
||||
m4/symlink.m4
|
||||
m4/sys_cdefs_h.m4
|
||||
m4/sys_random_h.m4
|
||||
m4/sys_select_h.m4
|
||||
m4/sys_socket_h.m4
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# readlink.m4
|
||||
# serial 17
|
||||
# serial 18
|
||||
dnl Copyright (C) 2003, 2007, 2009-2024 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -8,7 +8,7 @@ dnl with or without modifications, as long as this notice is preserved.
|
|||
AC_DEFUN([gl_FUNC_READLINK],
|
||||
[
|
||||
AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
|
||||
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
||||
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||
AC_CHECK_FUNCS_ONCE([readlink])
|
||||
if test $ac_cv_func_readlink = no; then
|
||||
HAVE_READLINK=0
|
||||
|
@ -18,9 +18,13 @@ AC_DEFUN([gl_FUNC_READLINK],
|
|||
[AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[#include <unistd.h>
|
||||
/* Cause compilation failure if original declaration has wrong type. */
|
||||
ssize_t readlink (const char *, char *, size_t);]])],
|
||||
/* Cause compilation failure if original declaration has
|
||||
wrong type. */
|
||||
ssize_t readlink (const char *, char *, size_t);
|
||||
]])
|
||||
],
|
||||
[gl_cv_decl_readlink_works=yes], [gl_cv_decl_readlink_works=no])])
|
||||
|
||||
dnl Solaris 9 ignores trailing slash.
|
||||
dnl FreeBSD 7.2 dereferences only one level of links with trailing slash.
|
||||
AC_CACHE_CHECK([whether readlink handles trailing slash correctly],
|
||||
|
@ -31,8 +35,11 @@ AC_DEFUN([gl_FUNC_READLINK],
|
|||
AC_RUN_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[#include <unistd.h>
|
||||
]], [[char buf[20];
|
||||
return readlink ("conftest.lnk2/", buf, sizeof buf) != -1;]])],
|
||||
]],
|
||||
[[char buf[20];
|
||||
return readlink ("conftest.lnk2/", buf, sizeof buf) != -1;
|
||||
]])
|
||||
],
|
||||
[gl_cv_func_readlink_trailing_slash=yes],
|
||||
[gl_cv_func_readlink_trailing_slash=no],
|
||||
[case "$host_os" in
|
||||
|
@ -71,8 +78,11 @@ AC_DEFUN([gl_FUNC_READLINK],
|
|||
AC_RUN_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[#include <unistd.h>
|
||||
]], [[char c;
|
||||
return readlink ("conftest.link", &c, 1) != 1;]])],
|
||||
]],
|
||||
[[char c;
|
||||
return readlink ("conftest.link", &c, 1) != 1;
|
||||
]])
|
||||
],
|
||||
[gl_cv_func_readlink_truncate=yes],
|
||||
[gl_cv_func_readlink_truncate=no],
|
||||
[case "$host_os" in
|
||||
|
@ -103,6 +113,14 @@ AC_DEFUN([gl_FUNC_READLINK],
|
|||
REPLACE_READLINK=1
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl On Cygwin 3.3.6, readlink("/dev/null") returns "\\Device\\Null", which
|
||||
dnl is unusable.
|
||||
case "$host_os" in
|
||||
cygwin*)
|
||||
REPLACE_READLINK=1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
])
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# readlinkat.m4
|
||||
# serial 8
|
||||
# serial 9
|
||||
dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -27,9 +27,12 @@ AC_DEFUN([gl_FUNC_READLINKAT],
|
|||
[AC_LANG_PROGRAM(
|
||||
[[#include <unistd.h>
|
||||
/* Check whether original declaration has correct type. */
|
||||
ssize_t readlinkat (int, char const *, char *, size_t);]])],
|
||||
ssize_t readlinkat (int, char const *, char *, size_t);
|
||||
]])
|
||||
],
|
||||
[gl_cv_decl_readlinkat_works=yes],
|
||||
[gl_cv_decl_readlinkat_works=no])])
|
||||
[gl_cv_decl_readlinkat_works=no])
|
||||
])
|
||||
# Assume readlinkat has the same bugs as readlink,
|
||||
# as is the case on OS X 10.10 with trailing slashes.
|
||||
case $gl_cv_decl_readlinkat_works,$gl_cv_func_readlink_trailing_slash,$gl_cv_func_readlink_truncate in
|
||||
|
@ -39,5 +42,13 @@ AC_DEFUN([gl_FUNC_READLINKAT],
|
|||
REPLACE_READLINKAT=1
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl On Cygwin 3.3.6, readlinkat(AT_FDCWD,"/dev/null") returns
|
||||
dnl "\\Device\\Null", which is unusable.
|
||||
case "$host_os" in
|
||||
cygwin*)
|
||||
REPLACE_READLINKAT=1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
])
|
||||
|
|
25
m4/sys_cdefs_h.m4
Normal file
25
m4/sys_cdefs_h.m4
Normal file
|
@ -0,0 +1,25 @@
|
|||
# sys_cdefs_h.m4 - Is <sys/cdefs.h> compatible enough with glibc?
|
||||
# serial 2
|
||||
dnl Copyright 2024 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 Written by Paul Eggert.
|
||||
|
||||
AC_DEFUN_ONCE([gl_CHECK_HEADER_SYS_CDEFS_H],
|
||||
[AC_CACHE_CHECK([for glibc-compatible sys/cdefs.h],
|
||||
[gl_cv_header_sys_cdefs_h],
|
||||
[AC_COMPILE_IFELSE(
|
||||
[AC_LANG_DEFINES_PROVIDED
|
||||
[#include <sys/cdefs.h>
|
||||
enum { foo = __GNUC_PREREQ (14, 1) } bar;
|
||||
]],
|
||||
[gl_cv_header_sys_cdefs_h=yes],
|
||||
[gl_cv_header_sys_cdefs_h=no])])
|
||||
if test "$gl_cv_header_sys_cdefs_h" = yes; then
|
||||
HAVE_SYS_CDEFS_H=1
|
||||
else
|
||||
HAVE_SYS_CDEFS_H=0
|
||||
fi
|
||||
AC_SUBST([HAVE_SYS_CDEFS_H])])
|
|
@ -1,5 +1,5 @@
|
|||
# unistd_h.m4
|
||||
# serial 95
|
||||
# serial 96
|
||||
dnl Copyright (C) 2006-2024 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -248,6 +248,7 @@ AC_DEFUN([gl_UNISTD_H_DEFAULTS],
|
|||
REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE])
|
||||
REPLACE_GETPASS=0; AC_SUBST([REPLACE_GETPASS])
|
||||
REPLACE_GETPASS_FOR_GETPASS_GNU=0; AC_SUBST([REPLACE_GETPASS_FOR_GETPASS_GNU])
|
||||
REPLACE_GETUSERSHELL=0; AC_SUBST([REPLACE_GETUSERSHELL])
|
||||
REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY])
|
||||
REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN])
|
||||
REPLACE_LINK=0; AC_SUBST([REPLACE_LINK])
|
||||
|
|
Loading…
Add table
Reference in a new issue