mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-06 06:20:55 -08:00
Update from Gnulib
This incorporates: 2018-10-05 explicit_bzero: make it possible to namespace 2018-10-04 fcntl: make it possible to namespace 2018-10-01 mkostemp, mkostemps: fix C++ compilation on Mac OS X 2018-09-19 maint: mktime.c now shared with glibc 2018-09-18 file-has-acl: fix test failure on Cygwin 2.9 2018-09-18 gettime: nanotime never existed * admin/merge-gnulib (AVOIDED_MODULES): Add mkdir. * doc/misc/texinfo.tex, lib/acl-internal.c, lib/acl-internal.h: * lib/acl_entries.c, lib/explicit_bzero.c, lib/fcntl.c: * lib/get-permissions.c, lib/gettime.c, lib/mktime.c: * lib/set-permissions.c, lib/stdlib.in.h, m4/acl.m4, m4/gettime.m4: Copy from Gnulib. * lib/gnulib.mk.in: Regenerate.
This commit is contained in:
parent
fc6004e617
commit
cf1ebfa055
15 changed files with 250 additions and 216 deletions
|
|
@ -47,7 +47,7 @@ GNULIB_MODULES='
|
||||||
|
|
||||||
AVOIDED_MODULES='
|
AVOIDED_MODULES='
|
||||||
btowc close dup fchdir fstat langinfo lock
|
btowc close dup fchdir fstat langinfo lock
|
||||||
malloc-posix mbrtowc mbsinit msvc-inval msvc-nothrow nl_langinfo
|
malloc-posix mbrtowc mbsinit mkdir msvc-inval msvc-nothrow nl_langinfo
|
||||||
openat-die opendir raise
|
openat-die opendir raise
|
||||||
save-cwd select setenv sigprocmask stat stdarg stdbool
|
save-cwd select setenv sigprocmask stat stdarg stdbool
|
||||||
threadlib tzset unsetenv utime utime-h
|
threadlib tzset unsetenv utime utime-h
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
% Load plain if necessary, i.e., if running under initex.
|
% Load plain if necessary, i.e., if running under initex.
|
||||||
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
|
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
|
||||||
%
|
%
|
||||||
\def\texinfoversion{2018-06-02.09}
|
\def\texinfoversion{2018-09-21.20}
|
||||||
%
|
%
|
||||||
% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
|
% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
|
||||||
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
||||||
|
|
@ -8004,6 +8004,7 @@ end
|
||||||
\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
|
\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
|
||||||
\gdef\magicamp{\let&=\amprm}
|
\gdef\magicamp{\let&=\amprm}
|
||||||
}
|
}
|
||||||
|
\let\ampchar\&
|
||||||
|
|
||||||
\newcount\parencount
|
\newcount\parencount
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
#include "acl-internal.h"
|
#include "acl-internal.h"
|
||||||
|
|
||||||
#if USE_ACL && HAVE_ACL_GET_FILE
|
#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 */
|
# if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */
|
||||||
|
|
||||||
|
|
@ -37,7 +37,7 @@ acl_extended_nontrivial (acl_t acl)
|
||||||
return (acl_entries (acl) > 0);
|
return (acl_entries (acl) > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
# else /* Linux, FreeBSD, IRIX, Tru64 */
|
# else /* Linux, FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */
|
||||||
|
|
||||||
/* ACL is an ACL, from a file, stored as type ACL_TYPE_ACCESS.
|
/* ACL is an ACL, from a file, stored as type ACL_TYPE_ACCESS.
|
||||||
Return 1 if the given ACL is non-trivial.
|
Return 1 if the given ACL is non-trivial.
|
||||||
|
|
@ -51,7 +51,7 @@ acl_access_nontrivial (acl_t acl)
|
||||||
at least, allowing us to write
|
at least, allowing us to write
|
||||||
return (3 < acl_entries (acl));
|
return (3 < acl_entries (acl));
|
||||||
but the following code is more robust. */
|
but the following code is more robust. */
|
||||||
# if HAVE_ACL_FIRST_ENTRY /* Linux, FreeBSD */
|
# if HAVE_ACL_FIRST_ENTRY /* Linux, FreeBSD, Cygwin >= 2.5 */
|
||||||
|
|
||||||
acl_entry_t ace;
|
acl_entry_t ace;
|
||||||
int got_one;
|
int got_one;
|
||||||
|
|
@ -124,7 +124,7 @@ acl_default_nontrivial (acl_t acl)
|
||||||
|
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#elif USE_ACL && HAVE_FACL && defined GETACL /* Solaris, Cygwin, not HP-UX */
|
#elif USE_ACL && HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */
|
||||||
|
|
||||||
/* Test an ACL retrieved with GETACL.
|
/* Test an ACL retrieved with GETACL.
|
||||||
Return 1 if the given ACL, consisting of COUNT entries, is non-trivial.
|
Return 1 if the given ACL, consisting of COUNT entries, is non-trivial.
|
||||||
|
|
@ -479,7 +479,7 @@ void
|
||||||
free_permission_context (struct permission_context *ctx)
|
free_permission_context (struct permission_context *ctx)
|
||||||
{
|
{
|
||||||
#if USE_ACL
|
#if USE_ACL
|
||||||
# if HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64 */
|
# if HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */
|
||||||
if (ctx->acl)
|
if (ctx->acl)
|
||||||
acl_free (ctx->acl);
|
acl_free (ctx->acl);
|
||||||
# if !HAVE_ACL_TYPE_EXTENDED
|
# if !HAVE_ACL_TYPE_EXTENDED
|
||||||
|
|
@ -487,7 +487,7 @@ free_permission_context (struct permission_context *ctx)
|
||||||
acl_free (ctx->default_acl);
|
acl_free (ctx->default_acl);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# elif defined GETACL /* Solaris, Cygwin */
|
# elif defined GETACL /* Solaris, Cygwin < 2.5 */
|
||||||
free (ctx->entries);
|
free (ctx->entries);
|
||||||
# ifdef ACE_GETACL
|
# ifdef ACE_GETACL
|
||||||
free (ctx->ace_entries);
|
free (ctx->ace_entries);
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,8 @@
|
||||||
# define GETACLCNT ACL_CNT
|
# define GETACLCNT ACL_CNT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* On Linux, additional ACL related API is available in <acl/libacl.h>. */
|
/* On Linux and Cygwin >= 2.5, additional ACL related API is available in
|
||||||
|
<acl/libacl.h>. */
|
||||||
#ifdef HAVE_ACL_LIBACL_H
|
#ifdef HAVE_ACL_LIBACL_H
|
||||||
# include <acl/libacl.h>
|
# include <acl/libacl.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -72,7 +73,7 @@ _GL_INLINE_HEADER_BEGIN
|
||||||
|
|
||||||
# if HAVE_ACL_GET_FILE
|
# if HAVE_ACL_GET_FILE
|
||||||
/* POSIX 1003.1e (draft 17 -- abandoned) specific version. */
|
/* POSIX 1003.1e (draft 17 -- abandoned) specific version. */
|
||||||
/* Linux, FreeBSD, Mac OS X, IRIX, Tru64 */
|
/* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */
|
||||||
|
|
||||||
# ifndef MIN_ACL_ENTRIES
|
# ifndef MIN_ACL_ENTRIES
|
||||||
# define MIN_ACL_ENTRIES 4
|
# define MIN_ACL_ENTRIES 4
|
||||||
|
|
@ -122,7 +123,10 @@ rpl_acl_set_fd (int fd, acl_t acl)
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* Linux-specific */
|
/* Linux-specific */
|
||||||
# ifndef HAVE_ACL_EXTENDED_FILE
|
/* Cygwin >= 2.5 implements this function, but it returns 1 for all
|
||||||
|
directories, thus is unusable. */
|
||||||
|
# if !defined HAVE_ACL_EXTENDED_FILE || defined __CYGWIN__
|
||||||
|
# undef HAVE_ACL_EXTENDED_FILE
|
||||||
# define HAVE_ACL_EXTENDED_FILE false
|
# define HAVE_ACL_EXTENDED_FILE false
|
||||||
# define acl_extended_file(name) (-1)
|
# define acl_extended_file(name) (-1)
|
||||||
# endif
|
# endif
|
||||||
|
|
@ -163,7 +167,7 @@ extern int acl_access_nontrivial (acl_t);
|
||||||
extern int acl_default_nontrivial (acl_t);
|
extern int acl_default_nontrivial (acl_t);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# elif HAVE_FACL && defined GETACL /* Solaris, Cygwin, not HP-UX */
|
# elif HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */
|
||||||
|
|
||||||
/* Set to 0 if a file's mode is stored independently from the ACL. */
|
/* Set to 0 if a file's mode is stored independently from the ACL. */
|
||||||
# if defined __CYGWIN__ /* Cygwin */
|
# if defined __CYGWIN__ /* Cygwin */
|
||||||
|
|
@ -256,14 +260,14 @@ extern int acl_nontrivial (int count, struct acl *entries);
|
||||||
struct permission_context {
|
struct permission_context {
|
||||||
mode_t mode;
|
mode_t mode;
|
||||||
#if USE_ACL
|
#if USE_ACL
|
||||||
# if HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64 */
|
# if HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */
|
||||||
acl_t acl;
|
acl_t acl;
|
||||||
# if !HAVE_ACL_TYPE_EXTENDED
|
# if !HAVE_ACL_TYPE_EXTENDED
|
||||||
acl_t default_acl;
|
acl_t default_acl;
|
||||||
# endif
|
# endif
|
||||||
bool acls_not_supported;
|
bool acls_not_supported;
|
||||||
|
|
||||||
# elif defined GETACL /* Solaris, Cygwin */
|
# elif defined GETACL /* Solaris, Cygwin < 2.5 */
|
||||||
int count;
|
int count;
|
||||||
aclent_t *entries;
|
aclent_t *entries;
|
||||||
# ifdef ACE_GETACL
|
# ifdef ACE_GETACL
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
#include "acl-internal.h"
|
#include "acl-internal.h"
|
||||||
|
|
||||||
/* This file assumes POSIX-draft like ACLs
|
/* This file assumes POSIX-draft like ACLs
|
||||||
(Linux, FreeBSD, Mac OS X, IRIX, Tru64). */
|
(Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5). */
|
||||||
|
|
||||||
/* Return the number of entries in ACL.
|
/* Return the number of entries in ACL.
|
||||||
Return -1 and set errno upon failure to determine it. */
|
Return -1 and set errno upon failure to determine it. */
|
||||||
|
|
@ -34,7 +34,7 @@ acl_entries (acl_t acl)
|
||||||
|
|
||||||
if (acl != NULL)
|
if (acl != NULL)
|
||||||
{
|
{
|
||||||
#if HAVE_ACL_FIRST_ENTRY /* Linux, FreeBSD, Mac OS X */
|
#if HAVE_ACL_FIRST_ENTRY /* Linux, FreeBSD, Mac OS X, Cygwin >= 2.5 */
|
||||||
# if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */
|
# if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */
|
||||||
/* acl_get_entry returns 0 when it successfully fetches an entry,
|
/* acl_get_entry returns 0 when it successfully fetches an entry,
|
||||||
and -1/EINVAL at the end. */
|
and -1/EINVAL at the end. */
|
||||||
|
|
@ -45,7 +45,7 @@ acl_entries (acl_t acl)
|
||||||
got_one >= 0;
|
got_one >= 0;
|
||||||
got_one = acl_get_entry (acl, ACL_NEXT_ENTRY, &ace))
|
got_one = acl_get_entry (acl, ACL_NEXT_ENTRY, &ace))
|
||||||
count++;
|
count++;
|
||||||
# else /* Linux, FreeBSD */
|
# else /* Linux, FreeBSD, Cygwin >= 2.5 */
|
||||||
/* acl_get_entry returns 1 when it successfully fetches an entry,
|
/* acl_get_entry returns 1 when it successfully fetches an entry,
|
||||||
and 0 at the end. */
|
and 0 at the end. */
|
||||||
acl_entry_t ace;
|
acl_entry_t ace;
|
||||||
|
|
|
||||||
|
|
@ -27,9 +27,11 @@
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#if _LIBC
|
||||||
/* glibc-internal users use __explicit_bzero_chk, and explicit_bzero
|
/* glibc-internal users use __explicit_bzero_chk, and explicit_bzero
|
||||||
redirects to that. */
|
redirects to that. */
|
||||||
#undef explicit_bzero
|
# undef explicit_bzero
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Set LEN bytes of S to 0. The compiler will not delete a call to
|
/* Set LEN bytes of S to 0. The compiler will not delete a call to
|
||||||
this function, even if S is dead after the call. */
|
this function, even if S is dead after the call. */
|
||||||
|
|
|
||||||
380
lib/fcntl.c
380
lib/fcntl.c
|
|
@ -27,10 +27,10 @@
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#if !HAVE_FCNTL
|
#ifdef __KLIBC__
|
||||||
# define rpl_fcntl fcntl
|
# define INCL_DOS
|
||||||
|
# include <os2.h>
|
||||||
#endif
|
#endif
|
||||||
#undef fcntl
|
|
||||||
|
|
||||||
#if defined _WIN32 && ! defined __CYGWIN__
|
#if defined _WIN32 && ! defined __CYGWIN__
|
||||||
/* Get declarations of the native Windows API functions. */
|
/* Get declarations of the native Windows API functions. */
|
||||||
|
|
@ -166,93 +166,18 @@ dupfd (int oldfd, int newfd, int flags)
|
||||||
}
|
}
|
||||||
#endif /* W32 */
|
#endif /* W32 */
|
||||||
|
|
||||||
|
/* Forward declarations, because we '#undef fcntl' in the middle of this
|
||||||
|
compilation unit. */
|
||||||
|
/* Our implementation of fcntl (fd, F_DUPFD, target). */
|
||||||
|
static int rpl_fcntl_DUPFD (int fd, int target);
|
||||||
|
/* Our implementation of fcntl (fd, F_DUPFD_CLOEXEC, target). */
|
||||||
|
static int rpl_fcntl_DUPFD_CLOEXEC (int fd, int target);
|
||||||
#ifdef __KLIBC__
|
#ifdef __KLIBC__
|
||||||
|
/* Adds support for fcntl on directories. */
|
||||||
# define INCL_DOS
|
static int klibc_fcntl (int fd, int action, /* arg */...);
|
||||||
# include <os2.h>
|
|
||||||
|
|
||||||
static int
|
|
||||||
klibc_fcntl (int fd, int action, /* arg */...)
|
|
||||||
{
|
|
||||||
va_list arg_ptr;
|
|
||||||
int arg;
|
|
||||||
struct stat sbuf;
|
|
||||||
int result = -1;
|
|
||||||
|
|
||||||
va_start (arg_ptr, action);
|
|
||||||
arg = va_arg (arg_ptr, int);
|
|
||||||
result = fcntl (fd, action, arg);
|
|
||||||
/* EPERM for F_DUPFD, ENOTSUP for others */
|
|
||||||
if (result == -1 && (errno == EPERM || errno == ENOTSUP)
|
|
||||||
&& !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode))
|
|
||||||
{
|
|
||||||
ULONG ulMode;
|
|
||||||
|
|
||||||
switch (action)
|
|
||||||
{
|
|
||||||
case F_DUPFD:
|
|
||||||
/* Find available fd */
|
|
||||||
while (fcntl (arg, F_GETFL) != -1 || errno != EBADF)
|
|
||||||
arg++;
|
|
||||||
|
|
||||||
result = dup2 (fd, arg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* Using underlying APIs is right ? */
|
|
||||||
case F_GETFD:
|
|
||||||
if (DosQueryFHState (fd, &ulMode))
|
|
||||||
break;
|
|
||||||
|
|
||||||
result = (ulMode & OPEN_FLAGS_NOINHERIT) ? FD_CLOEXEC : 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case F_SETFD:
|
|
||||||
if (arg & ~FD_CLOEXEC)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (DosQueryFHState (fd, &ulMode))
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (arg & FD_CLOEXEC)
|
|
||||||
ulMode |= OPEN_FLAGS_NOINHERIT;
|
|
||||||
else
|
|
||||||
ulMode &= ~OPEN_FLAGS_NOINHERIT;
|
|
||||||
|
|
||||||
/* Filter supported flags. */
|
|
||||||
ulMode &= (OPEN_FLAGS_WRITE_THROUGH | OPEN_FLAGS_FAIL_ON_ERROR
|
|
||||||
| OPEN_FLAGS_NO_CACHE | OPEN_FLAGS_NOINHERIT);
|
|
||||||
|
|
||||||
if (DosSetFHState (fd, ulMode))
|
|
||||||
break;
|
|
||||||
|
|
||||||
result = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case F_GETFL:
|
|
||||||
result = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case F_SETFL:
|
|
||||||
if (arg != 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
result = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default :
|
|
||||||
errno = EINVAL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
va_end (arg_ptr);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
# define fcntl klibc_fcntl
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Perform the specified ACTION on the file descriptor FD, possibly
|
/* Perform the specified ACTION on the file descriptor FD, possibly
|
||||||
using the argument ARG further described below. This replacement
|
using the argument ARG further described below. This replacement
|
||||||
handles the following actions, and forwards all others on to the
|
handles the following actions, and forwards all others on to the
|
||||||
|
|
@ -273,112 +198,30 @@ klibc_fcntl (int fd, int action, /* arg */...)
|
||||||
return -1 and set errno. */
|
return -1 and set errno. */
|
||||||
|
|
||||||
int
|
int
|
||||||
rpl_fcntl (int fd, int action, /* arg */...)
|
fcntl (int fd, int action, /* arg */...)
|
||||||
|
#undef fcntl
|
||||||
|
#ifdef __KLIBC__
|
||||||
|
# define fcntl klibc_fcntl
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
va_list arg;
|
va_list arg;
|
||||||
int result = -1;
|
int result = -1;
|
||||||
va_start (arg, action);
|
va_start (arg, action);
|
||||||
switch (action)
|
switch (action)
|
||||||
{
|
{
|
||||||
|
|
||||||
#if !HAVE_FCNTL
|
|
||||||
case F_DUPFD:
|
case F_DUPFD:
|
||||||
{
|
{
|
||||||
int target = va_arg (arg, int);
|
int target = va_arg (arg, int);
|
||||||
result = dupfd (fd, target, 0);
|
result = rpl_fcntl_DUPFD (fd, target);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR
|
|
||||||
case F_DUPFD:
|
|
||||||
{
|
|
||||||
int target = va_arg (arg, int);
|
|
||||||
/* Detect invalid target; needed for cygwin 1.5.x. */
|
|
||||||
if (target < 0 || getdtablesize () <= target)
|
|
||||||
errno = EINVAL;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Haiku alpha 2 loses fd flags on original. */
|
|
||||||
int flags = fcntl (fd, F_GETFD);
|
|
||||||
if (flags < 0)
|
|
||||||
{
|
|
||||||
result = -1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
result = fcntl (fd, action, target);
|
|
||||||
if (0 <= result && fcntl (fd, F_SETFD, flags) == -1)
|
|
||||||
{
|
|
||||||
int saved_errno = errno;
|
|
||||||
close (result);
|
|
||||||
result = -1;
|
|
||||||
errno = saved_errno;
|
|
||||||
}
|
|
||||||
# if REPLACE_FCHDIR
|
|
||||||
if (0 <= result)
|
|
||||||
result = _gl_register_dup (fd, result);
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
} /* F_DUPFD */
|
|
||||||
#endif /* FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR */
|
|
||||||
|
|
||||||
case F_DUPFD_CLOEXEC:
|
case F_DUPFD_CLOEXEC:
|
||||||
{
|
{
|
||||||
int target = va_arg (arg, int);
|
int target = va_arg (arg, int);
|
||||||
|
result = rpl_fcntl_DUPFD_CLOEXEC (fd, target);
|
||||||
#if !HAVE_FCNTL
|
|
||||||
result = dupfd (fd, target, O_CLOEXEC);
|
|
||||||
break;
|
break;
|
||||||
#else /* HAVE_FCNTL */
|
}
|
||||||
# if defined __HAIKU__
|
|
||||||
/* On Haiku, the system fcntl (fd, F_DUPFD_CLOEXEC, target) sets
|
|
||||||
the FD_CLOEXEC flag on fd, not on target. Therefore avoid the
|
|
||||||
system fcntl in this case. */
|
|
||||||
# define have_dupfd_cloexec -1
|
|
||||||
# else
|
|
||||||
/* Try the system call first, if the headers claim it exists
|
|
||||||
(that is, if GNULIB_defined_F_DUPFD_CLOEXEC is 0), since we
|
|
||||||
may be running with a glibc that has the macro but with an
|
|
||||||
older kernel that does not support it. Cache the
|
|
||||||
information on whether the system call really works, but
|
|
||||||
avoid caching failure if the corresponding F_DUPFD fails
|
|
||||||
for any reason. 0 = unknown, 1 = yes, -1 = no. */
|
|
||||||
static int have_dupfd_cloexec = GNULIB_defined_F_DUPFD_CLOEXEC ? -1 : 0;
|
|
||||||
if (0 <= have_dupfd_cloexec)
|
|
||||||
{
|
|
||||||
result = fcntl (fd, action, target);
|
|
||||||
if (0 <= result || errno != EINVAL)
|
|
||||||
{
|
|
||||||
have_dupfd_cloexec = 1;
|
|
||||||
# if REPLACE_FCHDIR
|
|
||||||
if (0 <= result)
|
|
||||||
result = _gl_register_dup (fd, result);
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result = rpl_fcntl (fd, F_DUPFD, target);
|
|
||||||
if (result < 0)
|
|
||||||
break;
|
|
||||||
have_dupfd_cloexec = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
# endif
|
|
||||||
result = rpl_fcntl (fd, F_DUPFD, target);
|
|
||||||
if (0 <= result && have_dupfd_cloexec == -1)
|
|
||||||
{
|
|
||||||
int flags = fcntl (result, F_GETFD);
|
|
||||||
if (flags < 0 || fcntl (result, F_SETFD, flags | FD_CLOEXEC) == -1)
|
|
||||||
{
|
|
||||||
int saved_errno = errno;
|
|
||||||
close (result);
|
|
||||||
errno = saved_errno;
|
|
||||||
result = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif /* HAVE_FCNTL */
|
|
||||||
} /* F_DUPFD_CLOEXEC */
|
|
||||||
|
|
||||||
#if !HAVE_FCNTL
|
#if !HAVE_FCNTL
|
||||||
case F_GETFD:
|
case F_GETFD:
|
||||||
|
|
@ -598,3 +441,186 @@ rpl_fcntl (int fd, int action, /* arg */...)
|
||||||
va_end (arg);
|
va_end (arg);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
rpl_fcntl_DUPFD (int fd, int target)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
#if !HAVE_FCNTL
|
||||||
|
result = dupfd (fd, target, 0);
|
||||||
|
#elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR
|
||||||
|
/* Detect invalid target; needed for cygwin 1.5.x. */
|
||||||
|
if (target < 0 || getdtablesize () <= target)
|
||||||
|
{
|
||||||
|
result = -1;
|
||||||
|
errno = EINVAL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Haiku alpha 2 loses fd flags on original. */
|
||||||
|
int flags = fcntl (fd, F_GETFD);
|
||||||
|
if (flags < 0)
|
||||||
|
result = -1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = fcntl (fd, F_DUPFD, target);
|
||||||
|
if (0 <= result && fcntl (fd, F_SETFD, flags) == -1)
|
||||||
|
{
|
||||||
|
int saved_errno = errno;
|
||||||
|
close (result);
|
||||||
|
result = -1;
|
||||||
|
errno = saved_errno;
|
||||||
|
}
|
||||||
|
# if REPLACE_FCHDIR
|
||||||
|
if (0 <= result)
|
||||||
|
result = _gl_register_dup (fd, result);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
result = fcntl (fd, F_DUPFD, target);
|
||||||
|
#endif
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
rpl_fcntl_DUPFD_CLOEXEC (int fd, int target)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
#if !HAVE_FCNTL
|
||||||
|
result = dupfd (fd, target, O_CLOEXEC);
|
||||||
|
#else /* HAVE_FCNTL */
|
||||||
|
# if defined __HAIKU__
|
||||||
|
/* On Haiku, the system fcntl (fd, F_DUPFD_CLOEXEC, target) sets
|
||||||
|
the FD_CLOEXEC flag on fd, not on target. Therefore avoid the
|
||||||
|
system fcntl in this case. */
|
||||||
|
# define have_dupfd_cloexec -1
|
||||||
|
# else
|
||||||
|
/* Try the system call first, if the headers claim it exists
|
||||||
|
(that is, if GNULIB_defined_F_DUPFD_CLOEXEC is 0), since we
|
||||||
|
may be running with a glibc that has the macro but with an
|
||||||
|
older kernel that does not support it. Cache the
|
||||||
|
information on whether the system call really works, but
|
||||||
|
avoid caching failure if the corresponding F_DUPFD fails
|
||||||
|
for any reason. 0 = unknown, 1 = yes, -1 = no. */
|
||||||
|
static int have_dupfd_cloexec = GNULIB_defined_F_DUPFD_CLOEXEC ? -1 : 0;
|
||||||
|
if (0 <= have_dupfd_cloexec)
|
||||||
|
{
|
||||||
|
result = fcntl (fd, F_DUPFD_CLOEXEC, target);
|
||||||
|
if (0 <= result || errno != EINVAL)
|
||||||
|
{
|
||||||
|
have_dupfd_cloexec = 1;
|
||||||
|
# if REPLACE_FCHDIR
|
||||||
|
if (0 <= result)
|
||||||
|
result = _gl_register_dup (fd, result);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = rpl_fcntl_DUPFD (fd, target);
|
||||||
|
if (result >= 0)
|
||||||
|
have_dupfd_cloexec = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
# endif
|
||||||
|
result = rpl_fcntl_DUPFD (fd, target);
|
||||||
|
if (0 <= result && have_dupfd_cloexec == -1)
|
||||||
|
{
|
||||||
|
int flags = fcntl (result, F_GETFD);
|
||||||
|
if (flags < 0 || fcntl (result, F_SETFD, flags | FD_CLOEXEC) == -1)
|
||||||
|
{
|
||||||
|
int saved_errno = errno;
|
||||||
|
close (result);
|
||||||
|
errno = saved_errno;
|
||||||
|
result = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* HAVE_FCNTL */
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef fcntl
|
||||||
|
|
||||||
|
#ifdef __KLIBC__
|
||||||
|
|
||||||
|
static int
|
||||||
|
klibc_fcntl (int fd, int action, /* arg */...);
|
||||||
|
{
|
||||||
|
va_list arg_ptr;
|
||||||
|
int arg;
|
||||||
|
struct stat sbuf;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
va_start (arg_ptr, action);
|
||||||
|
arg = va_arg (arg_ptr, int);
|
||||||
|
result = fcntl (fd, action, arg);
|
||||||
|
/* EPERM for F_DUPFD, ENOTSUP for others */
|
||||||
|
if (result == -1 && (errno == EPERM || errno == ENOTSUP)
|
||||||
|
&& !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode))
|
||||||
|
{
|
||||||
|
ULONG ulMode;
|
||||||
|
|
||||||
|
switch (action)
|
||||||
|
{
|
||||||
|
case F_DUPFD:
|
||||||
|
/* Find available fd */
|
||||||
|
while (fcntl (arg, F_GETFL) != -1 || errno != EBADF)
|
||||||
|
arg++;
|
||||||
|
|
||||||
|
result = dup2 (fd, arg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* Using underlying APIs is right ? */
|
||||||
|
case F_GETFD:
|
||||||
|
if (DosQueryFHState (fd, &ulMode))
|
||||||
|
break;
|
||||||
|
|
||||||
|
result = (ulMode & OPEN_FLAGS_NOINHERIT) ? FD_CLOEXEC : 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case F_SETFD:
|
||||||
|
if (arg & ~FD_CLOEXEC)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (DosQueryFHState (fd, &ulMode))
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (arg & FD_CLOEXEC)
|
||||||
|
ulMode |= OPEN_FLAGS_NOINHERIT;
|
||||||
|
else
|
||||||
|
ulMode &= ~OPEN_FLAGS_NOINHERIT;
|
||||||
|
|
||||||
|
/* Filter supported flags. */
|
||||||
|
ulMode &= (OPEN_FLAGS_WRITE_THROUGH | OPEN_FLAGS_FAIL_ON_ERROR
|
||||||
|
| OPEN_FLAGS_NO_CACHE | OPEN_FLAGS_NOINHERIT);
|
||||||
|
|
||||||
|
if (DosSetFHState (fd, ulMode))
|
||||||
|
break;
|
||||||
|
|
||||||
|
result = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case F_GETFL:
|
||||||
|
result = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case F_SETFL:
|
||||||
|
if (arg != 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
result = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
errno = EINVAL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
va_end (arg_ptr);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -38,9 +38,9 @@ get_permissions (const char *name, int desc, mode_t mode,
|
||||||
|
|
||||||
#if USE_ACL && HAVE_ACL_GET_FILE
|
#if USE_ACL && HAVE_ACL_GET_FILE
|
||||||
/* POSIX 1003.1e (draft 17 -- abandoned) specific version. */
|
/* POSIX 1003.1e (draft 17 -- abandoned) specific version. */
|
||||||
/* Linux, FreeBSD, Mac OS X, IRIX, Tru64 */
|
/* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */
|
||||||
# if !HAVE_ACL_TYPE_EXTENDED
|
# if !HAVE_ACL_TYPE_EXTENDED
|
||||||
/* Linux, FreeBSD, IRIX, Tru64 */
|
/* Linux, FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */
|
||||||
|
|
||||||
if (HAVE_ACL_GET_FD && desc != -1)
|
if (HAVE_ACL_GET_FD && desc != -1)
|
||||||
ctx->acl = acl_get_fd (desc);
|
ctx->acl = acl_get_fd (desc);
|
||||||
|
|
@ -60,13 +60,13 @@ get_permissions (const char *name, int desc, mode_t mode,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
# if HAVE_ACL_TYPE_NFS4 /* FreeBSD */
|
# if HAVE_ACL_TYPE_NFS4 /* FreeBSD */
|
||||||
|
|
||||||
/* TODO (see set_permissions). */
|
/* TODO (see set_permissions). */
|
||||||
|
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# else /* HAVE_ACL_TYPE_EXTENDED */
|
# else /* HAVE_ACL_TYPE_EXTENDED */
|
||||||
/* Mac OS X */
|
/* Mac OS X */
|
||||||
|
|
||||||
/* On Mac OS X, acl_get_file (name, ACL_TYPE_ACCESS)
|
/* On Mac OS X, acl_get_file (name, ACL_TYPE_ACCESS)
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@ gettime (struct timespec *ts)
|
||||||
{
|
{
|
||||||
#if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME
|
#if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME
|
||||||
clock_gettime (CLOCK_REALTIME, ts);
|
clock_gettime (CLOCK_REALTIME, ts);
|
||||||
#elif HAVE_NANOTIME
|
|
||||||
nanotime (ts);
|
|
||||||
#else
|
#else
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
gettimeofday (&tv, NULL);
|
gettimeofday (&tv, NULL);
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@
|
||||||
# --avoid=malloc-posix \
|
# --avoid=malloc-posix \
|
||||||
# --avoid=mbrtowc \
|
# --avoid=mbrtowc \
|
||||||
# --avoid=mbsinit \
|
# --avoid=mbsinit \
|
||||||
|
# --avoid=mkdir \
|
||||||
# --avoid=msvc-inval \
|
# --avoid=msvc-inval \
|
||||||
# --avoid=msvc-nothrow \
|
# --avoid=msvc-nothrow \
|
||||||
# --avoid=nl_langinfo \
|
# --avoid=nl_langinfo \
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@
|
||||||
|
|
||||||
#include "mktime-internal.h"
|
#include "mktime-internal.h"
|
||||||
|
|
||||||
#ifndef _LIBC
|
#if !defined _LIBC && (NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS)
|
||||||
static void
|
static void
|
||||||
my_tzset (void)
|
my_tzset (void)
|
||||||
{
|
{
|
||||||
|
|
@ -527,7 +527,7 @@ mktime (struct tm *tp)
|
||||||
be set as if the tzset() function had been called. */
|
be set as if the tzset() function had been called. */
|
||||||
__tzset ();
|
__tzset ();
|
||||||
|
|
||||||
# if defined __LIBC || NEED_MKTIME_WORKING
|
# if defined _LIBC || NEED_MKTIME_WORKING
|
||||||
static mktime_offset_t localtime_offset;
|
static mktime_offset_t localtime_offset;
|
||||||
return __mktime_internal (tp, __localtime_r, &localtime_offset);
|
return __mktime_internal (tp, __localtime_r, &localtime_offset);
|
||||||
# else
|
# else
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
#include "acl-internal.h"
|
#include "acl-internal.h"
|
||||||
|
|
||||||
#if USE_ACL
|
#if USE_ACL
|
||||||
# if ! defined HAVE_ACL_FROM_MODE && defined HAVE_ACL_FROM_TEXT /* FreeBSD, IRIX, Tru64 */
|
# if ! defined HAVE_ACL_FROM_MODE && defined HAVE_ACL_FROM_TEXT /* FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */
|
||||||
# if HAVE_ACL_GET_FILE && !HAVE_ACL_TYPE_EXTENDED
|
# if HAVE_ACL_GET_FILE && !HAVE_ACL_TYPE_EXTENDED
|
||||||
|
|
||||||
static acl_t
|
static acl_t
|
||||||
|
|
@ -32,7 +32,7 @@ acl_from_mode (mode_t mode)
|
||||||
{
|
{
|
||||||
# if HAVE_ACL_FREE_TEXT /* Tru64 */
|
# if HAVE_ACL_FREE_TEXT /* Tru64 */
|
||||||
char acl_text[] = "u::---,g::---,o::---,";
|
char acl_text[] = "u::---,g::---,o::---,";
|
||||||
# else /* FreeBSD, IRIX */
|
# else /* FreeBSD, IRIX, Cygwin >= 2.5 */
|
||||||
char acl_text[] = "u::---,g::---,o::---";
|
char acl_text[] = "u::---,g::---,o::---";
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
|
@ -51,7 +51,7 @@ acl_from_mode (mode_t mode)
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# if HAVE_FACL && defined GETACL /* Solaris, Cygwin, not HP-UX */
|
# if HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */
|
||||||
static int
|
static int
|
||||||
set_acls_from_mode (const char *name, int desc, mode_t mode, bool *must_chmod)
|
set_acls_from_mode (const char *name, int desc, mode_t mode, bool *must_chmod)
|
||||||
{
|
{
|
||||||
|
|
@ -489,9 +489,9 @@ set_acls (struct permission_context *ctx, const char *name, int desc,
|
||||||
|
|
||||||
# if HAVE_ACL_GET_FILE
|
# if HAVE_ACL_GET_FILE
|
||||||
/* POSIX 1003.1e (draft 17 -- abandoned) specific version. */
|
/* POSIX 1003.1e (draft 17 -- abandoned) specific version. */
|
||||||
/* Linux, FreeBSD, Mac OS X, IRIX, Tru64 */
|
/* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */
|
||||||
# if !HAVE_ACL_TYPE_EXTENDED
|
# if !HAVE_ACL_TYPE_EXTENDED
|
||||||
/* Linux, FreeBSD, IRIX, Tru64 */
|
/* Linux, FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */
|
||||||
|
|
||||||
# ifndef HAVE_ACL_FROM_TEXT
|
# ifndef HAVE_ACL_FROM_TEXT
|
||||||
# error Must have acl_from_text (see POSIX 1003.1e draft 17).
|
# error Must have acl_from_text (see POSIX 1003.1e draft 17).
|
||||||
|
|
@ -542,14 +542,14 @@ set_acls (struct permission_context *ctx, const char *name, int desc,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# if HAVE_ACL_TYPE_NFS4 /* FreeBSD */
|
# if HAVE_ACL_TYPE_NFS4 /* FreeBSD */
|
||||||
|
|
||||||
/* File systems either support POSIX ACLs (for example, ufs) or NFS4 ACLs
|
/* File systems either support POSIX ACLs (for example, ufs) or NFS4 ACLs
|
||||||
(for example, zfs). */
|
(for example, zfs). */
|
||||||
|
|
||||||
/* TODO: Implement setting ACLs once get_permissions() reads them. */
|
/* TODO: Implement setting ACLs once get_permissions() reads them. */
|
||||||
|
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# else /* HAVE_ACL_TYPE_EXTENDED */
|
# else /* HAVE_ACL_TYPE_EXTENDED */
|
||||||
/* Mac OS X */
|
/* Mac OS X */
|
||||||
|
|
|
||||||
|
|
@ -90,9 +90,10 @@ struct random_data
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !(defined _WIN32 && ! defined __CYGWIN__)
|
#if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_MKOSTEMP@ || @GNULIB_MKOSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !(defined _WIN32 && ! defined __CYGWIN__)
|
||||||
/* On Mac OS X 10.3, only <unistd.h> declares mkstemp. */
|
/* On Mac OS X 10.3, only <unistd.h> declares mkstemp. */
|
||||||
/* On Mac OS X 10.5, only <unistd.h> declares mkstemps. */
|
/* On Mac OS X 10.5, only <unistd.h> declares mkstemps. */
|
||||||
|
/* On Mac OS X 10.13, only <unistd.h> declares mkostemp and mkostemps. */
|
||||||
/* On Cygwin 1.7.1, only <unistd.h> declares getsubopt. */
|
/* On Cygwin 1.7.1, only <unistd.h> declares getsubopt. */
|
||||||
/* But avoid namespace pollution on glibc systems and native Windows. */
|
/* But avoid namespace pollution on glibc systems and native Windows. */
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
# acl.m4 - check for access control list (ACL) primitives
|
# acl.m4 - check for access control list (ACL) primitives
|
||||||
# serial 22
|
# serial 23
|
||||||
|
|
||||||
# Copyright (C) 2002, 2004-2018 Free Software Foundation, Inc.
|
# Copyright (C) 2002, 2004-2018 Free Software Foundation, Inc.
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
|
|
@ -30,7 +30,8 @@ AC_DEFUN([gl_FUNC_ACL],
|
||||||
ac_save_LIBS=$LIBS
|
ac_save_LIBS=$LIBS
|
||||||
|
|
||||||
dnl Test for POSIX-draft-like API (GNU/Linux, FreeBSD, Mac OS X,
|
dnl Test for POSIX-draft-like API (GNU/Linux, FreeBSD, Mac OS X,
|
||||||
dnl IRIX, Tru64). -lacl is needed on GNU/Linux, -lpacl on OSF/1.
|
dnl IRIX, Tru64, Cygwin >= 2.5).
|
||||||
|
dnl -lacl is needed on GNU/Linux, -lpacl on OSF/1.
|
||||||
if test $use_acl = 0; then
|
if test $use_acl = 0; then
|
||||||
AC_SEARCH_LIBS([acl_get_file], [acl pacl],
|
AC_SEARCH_LIBS([acl_get_file], [acl pacl],
|
||||||
[if test "$ac_cv_search_acl_get_file" != "none required"; then
|
[if test "$ac_cv_search_acl_get_file" != "none required"; then
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# gettime.m4 serial 8
|
# gettime.m4 serial 9
|
||||||
dnl Copyright (C) 2002, 2004-2006, 2009-2018 Free Software Foundation, Inc.
|
dnl Copyright (C) 2002, 2004-2006, 2009-2018 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -9,5 +9,5 @@ AC_DEFUN([gl_GETTIME],
|
||||||
dnl Prerequisites of lib/gettime.c.
|
dnl Prerequisites of lib/gettime.c.
|
||||||
AC_REQUIRE([gl_CLOCK_TIME])
|
AC_REQUIRE([gl_CLOCK_TIME])
|
||||||
AC_REQUIRE([gl_TIMESPEC])
|
AC_REQUIRE([gl_TIMESPEC])
|
||||||
AC_CHECK_FUNCS_ONCE([gettimeofday nanotime])
|
AC_CHECK_FUNCS_ONCE([gettimeofday])
|
||||||
])
|
])
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue