You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3731 lines
127 KiB
3731 lines
127 KiB
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
|
From: Peter Jones <pjones@redhat.com> |
|
Date: Wed, 3 Sep 2014 10:01:03 -0400 |
|
Subject: [PATCH] Add grub_util_readlink() |
|
|
|
Add grub_util_readlink(). This requires pulling in stat and readlink from |
|
gnulib, which pulls in stat and related headers, but after that the |
|
implementation is straightforward. |
|
|
|
Signed-off-by: Peter Jones <pjones@redhat.com> |
|
Reviewed-by: Adam Jackson <ajax@redhat.com> |
|
--- |
|
grub-core/gnulib/gettimeofday.c | 154 +++++++ |
|
grub-core/gnulib/readlink.c | 74 ++++ |
|
grub-core/gnulib/stat.c | 138 +++++++ |
|
grub-core/osdep/windows/hostdisk.c | 6 + |
|
grub-core/gnulib/pathmax.h | 83 ++++ |
|
grub-core/gnulib/sys_stat.in.h | 732 ++++++++++++++++++++++++++++++++++ |
|
grub-core/gnulib/sys_time.in.h | 213 ++++++++++ |
|
grub-core/gnulib/sys_types.in.h | 2 + |
|
grub-core/gnulib/time.h | 586 +++++++++++++++++++++++++++ |
|
grub-core/gnulib/time.in.h | 274 +++++++++++++ |
|
include/grub/osdep/hostfile_aros.h | 6 + |
|
include/grub/osdep/hostfile_unix.h | 6 + |
|
include/grub/osdep/hostfile_windows.h | 2 + |
|
grub-core/gnulib/Makefile.am | 177 +++++++- |
|
m4/gettimeofday.m4 | 138 +++++++ |
|
m4/gnulib-cache.m4 | 3 +- |
|
m4/gnulib-comp.m4 | 49 +++ |
|
m4/largefile.m4 | 146 +++++++ |
|
m4/pathmax.m4 | 42 ++ |
|
m4/readlink.m4 | 71 ++++ |
|
m4/stat.m4 | 71 ++++ |
|
m4/sys_stat_h.m4 | 96 +++++ |
|
m4/sys_time_h.m4 | 110 +++++ |
|
m4/time_h.m4 | 118 ++++++ |
|
24 files changed, 3295 insertions(+), 2 deletions(-) |
|
create mode 100644 grub-core/gnulib/gettimeofday.c |
|
create mode 100644 grub-core/gnulib/readlink.c |
|
create mode 100644 grub-core/gnulib/stat.c |
|
create mode 100644 grub-core/gnulib/pathmax.h |
|
create mode 100644 grub-core/gnulib/sys_stat.in.h |
|
create mode 100644 grub-core/gnulib/sys_time.in.h |
|
create mode 100644 grub-core/gnulib/time.h |
|
create mode 100644 grub-core/gnulib/time.in.h |
|
create mode 100644 m4/gettimeofday.m4 |
|
create mode 100644 m4/largefile.m4 |
|
create mode 100644 m4/pathmax.m4 |
|
create mode 100644 m4/readlink.m4 |
|
create mode 100644 m4/stat.m4 |
|
create mode 100644 m4/sys_stat_h.m4 |
|
create mode 100644 m4/sys_time_h.m4 |
|
create mode 100644 m4/time_h.m4 |
|
|
|
diff --git a/grub-core/gnulib/gettimeofday.c b/grub-core/gnulib/gettimeofday.c |
|
new file mode 100644 |
|
index 00000000000..8b2058e8c87 |
|
--- /dev/null |
|
+++ b/grub-core/gnulib/gettimeofday.c |
|
@@ -0,0 +1,154 @@ |
|
+/* Provide gettimeofday for systems that don't have it or for which it's broken. |
|
+ |
|
+ Copyright (C) 2001-2003, 2005-2007, 2009-2014 Free Software Foundation, Inc. |
|
+ |
|
+ This program is free software; you can redistribute it and/or modify |
|
+ it under the terms of the GNU General Public License as published by |
|
+ the Free Software Foundation; either version 3, or (at your option) |
|
+ any later version. |
|
+ |
|
+ This program is distributed in the hope that it will be useful, |
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
+ GNU General Public License for more details. |
|
+ |
|
+ You should have received a copy of the GNU General Public License |
|
+ along with this program; if not, see <http://www.gnu.org/licenses/>. */ |
|
+ |
|
+/* written by Jim Meyering */ |
|
+ |
|
+#include <config.h> |
|
+ |
|
+/* Specification. */ |
|
+#include <sys/time.h> |
|
+ |
|
+#include <time.h> |
|
+ |
|
+#if HAVE_SYS_TIMEB_H |
|
+# include <sys/timeb.h> |
|
+#endif |
|
+ |
|
+#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME |
|
+ |
|
+/* Work around the bug in some systems whereby gettimeofday clobbers |
|
+ the static buffer that localtime uses for its return value. The |
|
+ gettimeofday function from Mac OS X 10.0.4 (i.e., Darwin 1.3.7) has |
|
+ this problem. The tzset replacement is necessary for at least |
|
+ Solaris 2.5, 2.5.1, and 2.6. */ |
|
+ |
|
+static struct tm tm_zero_buffer; |
|
+static struct tm *localtime_buffer_addr = &tm_zero_buffer; |
|
+ |
|
+# undef localtime |
|
+extern struct tm *localtime (time_t const *); |
|
+ |
|
+# undef gmtime |
|
+extern struct tm *gmtime (time_t const *); |
|
+ |
|
+/* This is a wrapper for localtime. It is used only on systems for which |
|
+ gettimeofday clobbers the static buffer used for localtime's result. |
|
+ |
|
+ On the first call, record the address of the static buffer that |
|
+ localtime uses for its result. */ |
|
+ |
|
+struct tm * |
|
+rpl_localtime (time_t const *timep) |
|
+{ |
|
+ struct tm *tm = localtime (timep); |
|
+ |
|
+ if (localtime_buffer_addr == &tm_zero_buffer) |
|
+ localtime_buffer_addr = tm; |
|
+ |
|
+ return tm; |
|
+} |
|
+ |
|
+/* Same as above, since gmtime and localtime use the same buffer. */ |
|
+struct tm * |
|
+rpl_gmtime (time_t const *timep) |
|
+{ |
|
+ struct tm *tm = gmtime (timep); |
|
+ |
|
+ if (localtime_buffer_addr == &tm_zero_buffer) |
|
+ localtime_buffer_addr = tm; |
|
+ |
|
+ return tm; |
|
+} |
|
+ |
|
+#endif /* GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME */ |
|
+ |
|
+#if TZSET_CLOBBERS_LOCALTIME |
|
+ |
|
+# undef tzset |
|
+extern void tzset (void); |
|
+ |
|
+/* This is a wrapper for tzset, for systems on which tzset may clobber |
|
+ the static buffer used for localtime's result. */ |
|
+void |
|
+rpl_tzset (void) |
|
+{ |
|
+ /* Save and restore the contents of the buffer used for localtime's |
|
+ result around the call to tzset. */ |
|
+ struct tm save = *localtime_buffer_addr; |
|
+ tzset (); |
|
+ *localtime_buffer_addr = save; |
|
+} |
|
+#endif |
|
+ |
|
+/* This is a wrapper for gettimeofday. It is used only on systems |
|
+ that lack this function, or whose implementation of this function |
|
+ causes problems. */ |
|
+ |
|
+int |
|
+gettimeofday (struct timeval *restrict tv, void *restrict tz) |
|
+{ |
|
+#undef gettimeofday |
|
+#if HAVE_GETTIMEOFDAY |
|
+# if GETTIMEOFDAY_CLOBBERS_LOCALTIME |
|
+ /* Save and restore the contents of the buffer used for localtime's |
|
+ result around the call to gettimeofday. */ |
|
+ struct tm save = *localtime_buffer_addr; |
|
+# endif |
|
+ |
|
+# if defined timeval /* 'struct timeval' overridden by gnulib? */ |
|
+# undef timeval |
|
+ struct timeval otv; |
|
+ int result = gettimeofday (&otv, (struct timezone *) tz); |
|
+ if (result == 0) |
|
+ { |
|
+ tv->tv_sec = otv.tv_sec; |
|
+ tv->tv_usec = otv.tv_usec; |
|
+ } |
|
+# else |
|
+ int result = gettimeofday (tv, (struct timezone *) tz); |
|
+# endif |
|
+ |
|
+# if GETTIMEOFDAY_CLOBBERS_LOCALTIME |
|
+ *localtime_buffer_addr = save; |
|
+# endif |
|
+ |
|
+ return result; |
|
+ |
|
+#else |
|
+ |
|
+# if HAVE__FTIME |
|
+ |
|
+ struct _timeb timebuf; |
|
+ _ftime (&timebuf); |
|
+ tv->tv_sec = timebuf.time; |
|
+ tv->tv_usec = timebuf.millitm * 1000; |
|
+ |
|
+# else |
|
+ |
|
+# if !defined OK_TO_USE_1S_CLOCK |
|
+# error "Only 1-second nominal clock resolution found. Is that intended?" \ |
|
+ "If so, compile with the -DOK_TO_USE_1S_CLOCK option." |
|
+# endif |
|
+ tv->tv_sec = time (NULL); |
|
+ tv->tv_usec = 0; |
|
+ |
|
+# endif |
|
+ |
|
+ return 0; |
|
+ |
|
+#endif |
|
+} |
|
diff --git a/grub-core/gnulib/readlink.c b/grub-core/gnulib/readlink.c |
|
new file mode 100644 |
|
index 00000000000..4c496395176 |
|
--- /dev/null |
|
+++ b/grub-core/gnulib/readlink.c |
|
@@ -0,0 +1,74 @@ |
|
+/* Stub for readlink(). |
|
+ Copyright (C) 2003-2007, 2009-2014 Free Software Foundation, Inc. |
|
+ |
|
+ This program is free software: you can redistribute it and/or modify |
|
+ it under the terms of the GNU General Public License as published by |
|
+ the Free Software Foundation; either version 3 of the License, or |
|
+ (at your option) any later version. |
|
+ |
|
+ This program is distributed in the hope that it will be useful, |
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
+ GNU General Public License for more details. |
|
+ |
|
+ You should have received a copy of the GNU General Public License |
|
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
|
+ |
|
+#include <config.h> |
|
+ |
|
+/* Specification. */ |
|
+#include <unistd.h> |
|
+ |
|
+#include <errno.h> |
|
+#include <string.h> |
|
+#include <sys/stat.h> |
|
+ |
|
+#if !HAVE_READLINK |
|
+ |
|
+/* readlink() substitute for systems that don't have a readlink() function, |
|
+ such as DJGPP 2.03 and mingw32. */ |
|
+ |
|
+ssize_t |
|
+readlink (const char *name, char *buf _GL_UNUSED, |
|
+ size_t bufsize _GL_UNUSED) |
|
+{ |
|
+ struct stat statbuf; |
|
+ |
|
+ /* In general we should use lstat() here, not stat(). But on platforms |
|
+ without symbolic links, lstat() - if it exists - would be equivalent to |
|
+ stat(), therefore we can use stat(). This saves us a configure check. */ |
|
+ if (stat (name, &statbuf) >= 0) |
|
+ errno = EINVAL; |
|
+ return -1; |
|
+} |
|
+ |
|
+#else /* HAVE_READLINK */ |
|
+ |
|
+# undef readlink |
|
+ |
|
+/* readlink() wrapper that uses correct types, for systems like cygwin |
|
+ 1.5.x where readlink returns int, and which rejects trailing slash, |
|
+ for Solaris 9. */ |
|
+ |
|
+ssize_t |
|
+rpl_readlink (const char *name, char *buf, size_t bufsize) |
|
+{ |
|
+# if READLINK_TRAILING_SLASH_BUG |
|
+ size_t len = strlen (name); |
|
+ if (len && name[len - 1] == '/') |
|
+ { |
|
+ /* Even if name without the slash is a symlink to a directory, |
|
+ both lstat() and stat() must resolve the trailing slash to |
|
+ the directory rather than the symlink. We can therefore |
|
+ safely use stat() to distinguish between EINVAL and |
|
+ ENOTDIR/ENOENT, avoiding extra overhead of rpl_lstat(). */ |
|
+ struct stat st; |
|
+ if (stat (name, &st) == 0) |
|
+ errno = EINVAL; |
|
+ return -1; |
|
+ } |
|
+# endif /* READLINK_TRAILING_SLASH_BUG */ |
|
+ return readlink (name, buf, bufsize); |
|
+} |
|
+ |
|
+#endif /* HAVE_READLINK */ |
|
diff --git a/grub-core/gnulib/stat.c b/grub-core/gnulib/stat.c |
|
new file mode 100644 |
|
index 00000000000..35f4b0b1a51 |
|
--- /dev/null |
|
+++ b/grub-core/gnulib/stat.c |
|
@@ -0,0 +1,138 @@ |
|
+/* Work around platform bugs in stat. |
|
+ Copyright (C) 2009-2014 Free Software Foundation, Inc. |
|
+ |
|
+ This program is free software: you can redistribute it and/or modify |
|
+ it under the terms of the GNU General Public License as published by |
|
+ the Free Software Foundation; either version 3 of the License, or |
|
+ (at your option) any later version. |
|
+ |
|
+ This program is distributed in the hope that it will be useful, |
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
+ GNU General Public License for more details. |
|
+ |
|
+ You should have received a copy of the GNU General Public License |
|
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
|
+ |
|
+/* written by Eric Blake */ |
|
+ |
|
+/* If the user's config.h happens to include <sys/stat.h>, let it include only |
|
+ the system's <sys/stat.h> here, so that orig_stat doesn't recurse to |
|
+ rpl_stat. */ |
|
+#define __need_system_sys_stat_h |
|
+#include <config.h> |
|
+ |
|
+/* Get the original definition of stat. It might be defined as a macro. */ |
|
+#include <sys/types.h> |
|
+#include <sys/stat.h> |
|
+#undef __need_system_sys_stat_h |
|
+ |
|
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ |
|
+# if _GL_WINDOWS_64_BIT_ST_SIZE |
|
+# undef stat /* avoid warning on mingw64 with _FILE_OFFSET_BITS=64 */ |
|
+# define stat _stati64 |
|
+# define REPLACE_FUNC_STAT_DIR 1 |
|
+# undef REPLACE_FUNC_STAT_FILE |
|
+# elif REPLACE_FUNC_STAT_FILE |
|
+/* mingw64 has a broken stat() function, based on _stat(), in libmingwex.a. |
|
+ Bypass it. */ |
|
+# define stat _stat |
|
+# define REPLACE_FUNC_STAT_DIR 1 |
|
+# undef REPLACE_FUNC_STAT_FILE |
|
+# endif |
|
+#endif |
|
+ |
|
+static int |
|
+orig_stat (const char *filename, struct stat *buf) |
|
+{ |
|
+ return stat (filename, buf); |
|
+} |
|
+ |
|
+/* Specification. */ |
|
+/* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc |
|
+ eliminates this include because of the preliminary #include <sys/stat.h> |
|
+ above. */ |
|
+#include "sys/stat.h" |
|
+ |
|
+#include <errno.h> |
|
+#include <limits.h> |
|
+#include <stdbool.h> |
|
+#include <string.h> |
|
+#include "dosname.h" |
|
+#include "verify.h" |
|
+ |
|
+#if REPLACE_FUNC_STAT_DIR |
|
+# include "pathmax.h" |
|
+ /* The only known systems where REPLACE_FUNC_STAT_DIR is needed also |
|
+ have a constant PATH_MAX. */ |
|
+# ifndef PATH_MAX |
|
+# error "Please port this replacement to your platform" |
|
+# endif |
|
+#endif |
|
+ |
|
+/* Store information about NAME into ST. Work around bugs with |
|
+ trailing slashes. Mingw has other bugs (such as st_ino always |
|
+ being 0 on success) which this wrapper does not work around. But |
|
+ at least this implementation provides the ability to emulate fchdir |
|
+ correctly. */ |
|
+ |
|
+int |
|
+rpl_stat (char const *name, struct stat *st) |
|
+{ |
|
+ int result = orig_stat (name, st); |
|
+#if REPLACE_FUNC_STAT_FILE |
|
+ /* Solaris 9 mistakenly succeeds when given a non-directory with a |
|
+ trailing slash. */ |
|
+ if (result == 0 && !S_ISDIR (st->st_mode)) |
|
+ { |
|
+ size_t len = strlen (name); |
|
+ if (ISSLASH (name[len - 1])) |
|
+ { |
|
+ errno = ENOTDIR; |
|
+ return -1; |
|
+ } |
|
+ } |
|
+#endif /* REPLACE_FUNC_STAT_FILE */ |
|
+#if REPLACE_FUNC_STAT_DIR |
|
+ |
|
+ if (result == -1 && errno == ENOENT) |
|
+ { |
|
+ /* Due to mingw's oddities, there are some directories (like |
|
+ c:\) where stat() only succeeds with a trailing slash, and |
|
+ other directories (like c:\windows) where stat() only |
|
+ succeeds without a trailing slash. But we want the two to be |
|
+ synonymous, since chdir() manages either style. Likewise, Mingw also |
|
+ reports ENOENT for names longer than PATH_MAX, when we want |
|
+ ENAMETOOLONG, and for stat("file/"), when we want ENOTDIR. |
|
+ Fortunately, mingw PATH_MAX is small enough for stack |
|
+ allocation. */ |
|
+ char fixed_name[PATH_MAX + 1] = {0}; |
|
+ size_t len = strlen (name); |
|
+ bool check_dir = false; |
|
+ verify (PATH_MAX <= 4096); |
|
+ if (PATH_MAX <= len) |
|
+ errno = ENAMETOOLONG; |
|
+ else if (len) |
|
+ { |
|
+ strcpy (fixed_name, name); |
|
+ if (ISSLASH (fixed_name[len - 1])) |
|
+ { |
|
+ check_dir = true; |
|
+ while (len && ISSLASH (fixed_name[len - 1])) |
|
+ fixed_name[--len] = '\0'; |
|
+ if (!len) |
|
+ fixed_name[0] = '/'; |
|
+ } |
|
+ else |
|
+ fixed_name[len++] = '/'; |
|
+ result = orig_stat (fixed_name, st); |
|
+ if (result == 0 && check_dir && !S_ISDIR (st->st_mode)) |
|
+ { |
|
+ result = -1; |
|
+ errno = ENOTDIR; |
|
+ } |
|
+ } |
|
+ } |
|
+#endif /* REPLACE_FUNC_STAT_DIR */ |
|
+ return result; |
|
+} |
|
diff --git a/grub-core/osdep/windows/hostdisk.c b/grub-core/osdep/windows/hostdisk.c |
|
index d390b25fcbe..9127e9263b1 100644 |
|
--- a/grub-core/osdep/windows/hostdisk.c |
|
+++ b/grub-core/osdep/windows/hostdisk.c |
|
@@ -353,6 +353,12 @@ grub_util_mkdir (const char *dir) |
|
free (windows_name); |
|
} |
|
|
|
+ssize_t |
|
+grub_util_readlink (const char *name, char *buf, size_t bufsize) |
|
+{ |
|
+ return readlink(name, buf, bufsize); |
|
+} |
|
+ |
|
int |
|
grub_util_rename (const char *from, const char *to) |
|
{ |
|
diff --git a/grub-core/gnulib/pathmax.h b/grub-core/gnulib/pathmax.h |
|
new file mode 100644 |
|
index 00000000000..33fc3553d75 |
|
--- /dev/null |
|
+++ b/grub-core/gnulib/pathmax.h |
|
@@ -0,0 +1,83 @@ |
|
+/* Define PATH_MAX somehow. Requires sys/types.h. |
|
+ Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2014 Free Software |
|
+ Foundation, Inc. |
|
+ |
|
+ This program is free software; you can redistribute it and/or modify |
|
+ it under the terms of the GNU General Public License as published by |
|
+ the Free Software Foundation; either version 3, or (at your option) |
|
+ any later version. |
|
+ |
|
+ This program is distributed in the hope that it will be useful, |
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
+ GNU General Public License for more details. |
|
+ |
|
+ You should have received a copy of the GNU General Public License |
|
+ along with this program; if not, see <http://www.gnu.org/licenses/>. */ |
|
+ |
|
+#ifndef _PATHMAX_H |
|
+# define _PATHMAX_H |
|
+ |
|
+/* POSIX:2008 defines PATH_MAX to be the maximum number of bytes in a filename, |
|
+ including the terminating NUL byte. |
|
+ <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html> |
|
+ PATH_MAX is not defined on systems which have no limit on filename length, |
|
+ such as GNU/Hurd. |
|
+ |
|
+ This file does *not* define PATH_MAX always. Programs that use this file |
|
+ can handle the GNU/Hurd case in several ways: |
|
+ - Either with a package-wide handling, or with a per-file handling, |
|
+ - Either through a |
|
+ #ifdef PATH_MAX |
|
+ or through a fallback like |
|
+ #ifndef PATH_MAX |
|
+ # define PATH_MAX 8192 |
|
+ #endif |
|
+ or through a fallback like |
|
+ #ifndef PATH_MAX |
|
+ # define PATH_MAX pathconf ("/", _PC_PATH_MAX) |
|
+ #endif |
|
+ */ |
|
+ |
|
+# include <unistd.h> |
|
+ |
|
+# include <limits.h> |
|
+ |
|
+# ifndef _POSIX_PATH_MAX |
|
+# define _POSIX_PATH_MAX 256 |
|
+# endif |
|
+ |
|
+/* Don't include sys/param.h if it already has been. */ |
|
+# if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN |
|
+# include <sys/param.h> |
|
+# endif |
|
+ |
|
+# if !defined PATH_MAX && defined MAXPATHLEN |
|
+# define PATH_MAX MAXPATHLEN |
|
+# endif |
|
+ |
|
+# ifdef __hpux |
|
+/* On HP-UX, PATH_MAX designates the maximum number of bytes in a filename, |
|
+ *not* including the terminating NUL byte, and is set to 1023. |
|
+ Additionally, when _XOPEN_SOURCE is defined to 500 or more, PATH_MAX is |
|
+ not defined at all any more. */ |
|
+# undef PATH_MAX |
|
+# define PATH_MAX 1024 |
|
+# endif |
|
+ |
|
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ |
|
+/* The page "Naming Files, Paths, and Namespaces" on msdn.microsoft.com, |
|
+ section "Maximum Path Length Limitation", |
|
+ <http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#maxpath> |
|
+ explains that the maximum size of a filename, including the terminating |
|
+ NUL byte, is 260 = 3 + 256 + 1. |
|
+ This is the same value as |
|
+ - FILENAME_MAX in <stdio.h>, |
|
+ - _MAX_PATH in <stdlib.h>, |
|
+ - MAX_PATH in <windef.h>. |
|
+ Undefine the original value, because mingw's <limits.h> gets it wrong. */ |
|
+# undef PATH_MAX |
|
+# define PATH_MAX 260 |
|
+# endif |
|
+ |
|
+#endif /* _PATHMAX_H */ |
|
diff --git a/grub-core/gnulib/sys_stat.in.h b/grub-core/gnulib/sys_stat.in.h |
|
new file mode 100644 |
|
index 00000000000..b47a7ff0ae7 |
|
--- /dev/null |
|
+++ b/grub-core/gnulib/sys_stat.in.h |
|
@@ -0,0 +1,732 @@ |
|
+/* Provide a more complete sys/stat header file. |
|
+ Copyright (C) 2005-2014 Free Software Foundation, Inc. |
|
+ |
|
+ This program is free software; you can redistribute it and/or modify |
|
+ it under the terms of the GNU General Public License as published by |
|
+ the Free Software Foundation; either version 3, or (at your option) |
|
+ any later version. |
|
+ |
|
+ This program is distributed in the hope that it will be useful, |
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
+ GNU General Public License for more details. |
|
+ |
|
+ You should have received a copy of the GNU General Public License |
|
+ along with this program; if not, see <http://www.gnu.org/licenses/>. */ |
|
+ |
|
+/* Written by Eric Blake, Paul Eggert, and Jim Meyering. */ |
|
+ |
|
+/* This file is supposed to be used on platforms where <sys/stat.h> is |
|
+ incomplete. It is intended to provide definitions and prototypes |
|
+ needed by an application. Start with what the system provides. */ |
|
+ |
|
+#if __GNUC__ >= 3 |
|
+@PRAGMA_SYSTEM_HEADER@ |
|
+#endif |
|
+@PRAGMA_COLUMNS@ |
|
+ |
|
+#if defined __need_system_sys_stat_h |
|
+/* Special invocation convention. */ |
|
+ |
|
+#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ |
|
+ |
|
+#else |
|
+/* Normal invocation convention. */ |
|
+ |
|
+#ifndef _@GUARD_PREFIX@_SYS_STAT_H |
|
+ |
|
+/* Get nlink_t. |
|
+ May also define off_t to a 64-bit type on native Windows. */ |
|
+#include <sys/types.h> |
|
+ |
|
+/* Get struct timespec. */ |
|
+#include <time.h> |
|
+ |
|
+/* The include_next requires a split double-inclusion guard. */ |
|
+#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ |
|
+ |
|
+#ifndef _@GUARD_PREFIX@_SYS_STAT_H |
|
+#define _@GUARD_PREFIX@_SYS_STAT_H |
|
+ |
|
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ |
|
+ |
|
+/* The definition of _GL_ARG_NONNULL is copied here. */ |
|
+ |
|
+/* The definition of _GL_WARN_ON_USE is copied here. */ |
|
+ |
|
+/* Before doing "#define mkdir rpl_mkdir" below, we need to include all |
|
+ headers that may declare mkdir(). Native Windows platforms declare mkdir |
|
+ in <io.h> and/or <direct.h>, not in <unistd.h>. */ |
|
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ |
|
+# include <io.h> /* mingw32, mingw64 */ |
|
+# include <direct.h> /* mingw64, MSVC 9 */ |
|
+#endif |
|
+ |
|
+/* Native Windows platforms declare umask() in <io.h>. */ |
|
+#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) |
|
+# include <io.h> |
|
+#endif |
|
+ |
|
+/* Large File Support on native Windows. */ |
|
+#if @WINDOWS_64_BIT_ST_SIZE@ |
|
+# define stat _stati64 |
|
+#endif |
|
+ |
|
+#ifndef S_IFIFO |
|
+# ifdef _S_IFIFO |
|
+# define S_IFIFO _S_IFIFO |
|
+# endif |
|
+#endif |
|
+ |
|
+#ifndef S_IFMT |
|
+# define S_IFMT 0170000 |
|
+#endif |
|
+ |
|
+#if STAT_MACROS_BROKEN |
|
+# undef S_ISBLK |
|
+# undef S_ISCHR |
|
+# undef S_ISDIR |
|
+# undef S_ISFIFO |
|
+# undef S_ISLNK |
|
+# undef S_ISNAM |
|
+# undef S_ISMPB |
|
+# undef S_ISMPC |
|
+# undef S_ISNWK |
|
+# undef S_ISREG |
|
+# undef S_ISSOCK |
|
+#endif |
|
+ |
|
+#ifndef S_ISBLK |
|
+# ifdef S_IFBLK |
|
+# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) |
|
+# else |
|
+# define S_ISBLK(m) 0 |
|
+# endif |
|
+#endif |
|
+ |
|
+#ifndef S_ISCHR |
|
+# ifdef S_IFCHR |
|
+# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) |
|
+# else |
|
+# define S_ISCHR(m) 0 |
|
+# endif |
|
+#endif |
|
+ |
|
+#ifndef S_ISDIR |
|
+# ifdef S_IFDIR |
|
+# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) |
|
+# else |
|
+# define S_ISDIR(m) 0 |
|
+# endif |
|
+#endif |
|
+ |
|
+#ifndef S_ISDOOR /* Solaris 2.5 and up */ |
|
+# define S_ISDOOR(m) 0 |
|
+#endif |
|
+ |
|
+#ifndef S_ISFIFO |
|
+# ifdef S_IFIFO |
|
+# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) |
|
+# else |
|
+# define S_ISFIFO(m) 0 |
|
+# endif |
|
+#endif |
|
+ |
|
+#ifndef S_ISLNK |
|
+# ifdef S_IFLNK |
|
+# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) |
|
+# else |
|
+# define S_ISLNK(m) 0 |
|
+# endif |
|
+#endif |
|
+ |
|
+#ifndef S_ISMPB /* V7 */ |
|
+# ifdef S_IFMPB |
|
+# define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) |
|
+# define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) |
|
+# else |
|
+# define S_ISMPB(m) 0 |
|
+# define S_ISMPC(m) 0 |
|
+# endif |
|
+#endif |
|
+ |
|
+#ifndef S_ISMPX /* AIX */ |
|
+# define S_ISMPX(m) 0 |
|
+#endif |
|
+ |
|
+#ifndef S_ISNAM /* Xenix */ |
|
+# ifdef S_IFNAM |
|
+# define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM) |
|
+# else |
|
+# define S_ISNAM(m) 0 |
|
+# endif |
|
+#endif |
|
+ |
|
+#ifndef S_ISNWK /* HP/UX */ |
|
+# ifdef S_IFNWK |
|
+# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) |
|
+# else |
|
+# define S_ISNWK(m) 0 |
|
+# endif |
|
+#endif |
|
+ |
|
+#ifndef S_ISPORT /* Solaris 10 and up */ |
|
+# define S_ISPORT(m) 0 |
|
+#endif |
|
+ |
|
+#ifndef S_ISREG |
|
+# ifdef S_IFREG |
|
+# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) |
|
+# else |
|
+# define S_ISREG(m) 0 |
|
+# endif |
|
+#endif |
|
+ |
|
+#ifndef S_ISSOCK |
|
+# ifdef S_IFSOCK |
|
+# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) |
|
+# else |
|
+# define S_ISSOCK(m) 0 |
|
+# endif |
|
+#endif |
|
+ |
|
+ |
|
+#ifndef S_TYPEISMQ |
|
+# define S_TYPEISMQ(p) 0 |
|
+#endif |
|
+ |
|
+#ifndef S_TYPEISTMO |
|
+# define S_TYPEISTMO(p) 0 |
|
+#endif |
|
+ |
|
+ |
|
+#ifndef S_TYPEISSEM |
|
+# ifdef S_INSEM |
|
+# define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM) |
|
+# else |
|
+# define S_TYPEISSEM(p) 0 |
|
+# endif |
|
+#endif |
|
+ |
|
+#ifndef S_TYPEISSHM |
|
+# ifdef S_INSHD |
|
+# define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD) |
|
+# else |
|
+# define S_TYPEISSHM(p) 0 |
|
+# endif |
|
+#endif |
|
+ |
|
+/* high performance ("contiguous data") */ |
|
+#ifndef S_ISCTG |
|
+# define S_ISCTG(p) 0 |
|
+#endif |
|
+ |
|
+/* Cray DMF (data migration facility): off line, with data */ |
|
+#ifndef S_ISOFD |
|
+# define S_ISOFD(p) 0 |
|
+#endif |
|
+ |
|
+/* Cray DMF (data migration facility): off line, with no data */ |
|
+#ifndef S_ISOFL |
|
+# define S_ISOFL(p) 0 |
|
+#endif |
|
+ |
|
+/* 4.4BSD whiteout */ |
|
+#ifndef S_ISWHT |
|
+# define S_ISWHT(m) 0 |
|
+#endif |
|
+ |
|
+/* If any of the following are undefined, |
|
+ define them to their de facto standard values. */ |
|
+#if !S_ISUID |
|
+# define S_ISUID 04000 |
|
+#endif |
|
+#if !S_ISGID |
|
+# define S_ISGID 02000 |
|
+#endif |
|
+ |
|
+/* S_ISVTX is a common extension to POSIX. */ |
|
+#ifndef S_ISVTX |
|
+# define S_ISVTX 01000 |
|
+#endif |
|
+ |
|
+#if !S_IRUSR && S_IREAD |
|
+# define S_IRUSR S_IREAD |
|
+#endif |
|
+#if !S_IRUSR |
|
+# define S_IRUSR 00400 |
|
+#endif |
|
+#if !S_IRGRP |
|
+# define S_IRGRP (S_IRUSR >> 3) |
|
+#endif |
|
+#if !S_IROTH |
|
+# define S_IROTH (S_IRUSR >> 6) |
|
+#endif |
|
+ |
|
+#if !S_IWUSR && S_IWRITE |
|
+# define S_IWUSR S_IWRITE |
|
+#endif |
|
+#if !S_IWUSR |
|
+# define S_IWUSR 00200 |
|
+#endif |
|
+#if !S_IWGRP |
|
+# define S_IWGRP (S_IWUSR >> 3) |
|
+#endif |
|
+#if !S_IWOTH |
|
+# define S_IWOTH (S_IWUSR >> 6) |
|
+#endif |
|
+ |
|
+#if !S_IXUSR && S_IEXEC |
|
+# define S_IXUSR S_IEXEC |
|
+#endif |
|
+#if !S_IXUSR |
|
+# define S_IXUSR 00100 |
|
+#endif |
|
+#if !S_IXGRP |
|
+# define S_IXGRP (S_IXUSR >> 3) |
|
+#endif |
|
+#if !S_IXOTH |
|
+# define S_IXOTH (S_IXUSR >> 6) |
|
+#endif |
|
+ |
|
+#if !S_IRWXU |
|
+# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) |
|
+#endif |
|
+#if !S_IRWXG |
|
+# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) |
|
+#endif |
|
+#if !S_IRWXO |
|
+# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) |
|
+#endif |
|
+ |
|
+/* S_IXUGO is a common extension to POSIX. */ |
|
+#if !S_IXUGO |
|
+# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) |
|
+#endif |
|
+ |
|
+#ifndef S_IRWXUGO |
|
+# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) |
|
+#endif |
|
+ |
|
+/* Macros for futimens and utimensat. */ |
|
+#ifndef UTIME_NOW |
|
+# define UTIME_NOW (-1) |
|
+# define UTIME_OMIT (-2) |
|
+#endif |
|
+ |
|
+ |
|
+#if @GNULIB_FCHMODAT@ |
|
+# if !@HAVE_FCHMODAT@ |
|
+_GL_FUNCDECL_SYS (fchmodat, int, |
|
+ (int fd, char const *file, mode_t mode, int flag) |
|
+ _GL_ARG_NONNULL ((2))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (fchmodat, int, |
|
+ (int fd, char const *file, mode_t mode, int flag)); |
|
+_GL_CXXALIASWARN (fchmodat); |
|
+#elif defined GNULIB_POSIXCHECK |
|
+# undef fchmodat |
|
+# if HAVE_RAW_DECL_FCHMODAT |
|
+_GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - " |
|
+ "use gnulib module openat for portability"); |
|
+# endif |
|
+#endif |
|
+ |
|
+ |
|
+#if @GNULIB_FSTAT@ |
|
+# if @REPLACE_FSTAT@ |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef fstat |
|
+# define fstat rpl_fstat |
|
+# endif |
|
+_GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2))); |
|
+_GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf)); |
|
+# else |
|
+_GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf)); |
|
+# endif |
|
+_GL_CXXALIASWARN (fstat); |
|
+#elif @WINDOWS_64_BIT_ST_SIZE@ |
|
+/* Above, we define stat to _stati64. */ |
|
+# define fstat _fstati64 |
|
+#elif defined GNULIB_POSIXCHECK |
|
+# undef fstat |
|
+# if HAVE_RAW_DECL_FSTAT |
|
+_GL_WARN_ON_USE (fstat, "fstat has portability problems - " |
|
+ "use gnulib module fstat for portability"); |
|
+# endif |
|
+#endif |
|
+ |
|
+ |
|
+#if @GNULIB_FSTATAT@ |
|
+# if @REPLACE_FSTATAT@ |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef fstatat |
|
+# define fstatat rpl_fstatat |
|
+# endif |
|
+_GL_FUNCDECL_RPL (fstatat, int, |
|
+ (int fd, char const *name, struct stat *st, int flags) |
|
+ _GL_ARG_NONNULL ((2, 3))); |
|
+_GL_CXXALIAS_RPL (fstatat, int, |
|
+ (int fd, char const *name, struct stat *st, int flags)); |
|
+# else |
|
+# if !@HAVE_FSTATAT@ |
|
+_GL_FUNCDECL_SYS (fstatat, int, |
|
+ (int fd, char const *name, struct stat *st, int flags) |
|
+ _GL_ARG_NONNULL ((2, 3))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (fstatat, int, |
|
+ (int fd, char const *name, struct stat *st, int flags)); |
|
+# endif |
|
+_GL_CXXALIASWARN (fstatat); |
|
+#elif defined GNULIB_POSIXCHECK |
|
+# undef fstatat |
|
+# if HAVE_RAW_DECL_FSTATAT |
|
+_GL_WARN_ON_USE (fstatat, "fstatat is not portable - " |
|
+ "use gnulib module openat for portability"); |
|
+# endif |
|
+#endif |
|
+ |
|
+ |
|
+#if @GNULIB_FUTIMENS@ |
|
+/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens |
|
+ implementation relies on futimesat, which on Solaris 10 makes an invocation |
|
+ to futimens that is meant to invoke the libc's futimens(), not gnulib's |
|
+ futimens(). */ |
|
+# if @REPLACE_FUTIMENS@ || (!@HAVE_FUTIMENS@ && defined __sun) |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef futimens |
|
+# define futimens rpl_futimens |
|
+# endif |
|
+_GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2])); |
|
+_GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2])); |
|
+# else |
|
+# if !@HAVE_FUTIMENS@ |
|
+_GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2])); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2])); |
|
+# endif |
|
+# if @HAVE_FUTIMENS@ |
|
+_GL_CXXALIASWARN (futimens); |
|
+# endif |
|
+#elif defined GNULIB_POSIXCHECK |
|
+# undef futimens |
|
+# if HAVE_RAW_DECL_FUTIMENS |
|
+_GL_WARN_ON_USE (futimens, "futimens is not portable - " |
|
+ "use gnulib module futimens for portability"); |
|
+# endif |
|
+#endif |
|
+ |
|
+ |
|
+#if @GNULIB_LCHMOD@ |
|
+/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME |
|
+ denotes a symbolic link. */ |
|
+# if !@HAVE_LCHMOD@ |
|
+/* The lchmod replacement follows symbolic links. Callers should take |
|
+ this into account; lchmod should be applied only to arguments that |
|
+ are known to not be symbolic links. On hosts that lack lchmod, |
|
+ this can lead to race conditions between the check and the |
|
+ invocation of lchmod, but we know of no workarounds that are |
|
+ reliable in general. You might try requesting support for lchmod |
|
+ from your operating system supplier. */ |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# define lchmod chmod |
|
+# endif |
|
+/* Need to cast, because on mingw, the second parameter of chmod is |
|
+ int mode. */ |
|
+_GL_CXXALIAS_RPL_CAST_1 (lchmod, chmod, int, |
|
+ (const char *filename, mode_t mode)); |
|
+# else |
|
+# if 0 /* assume already declared */ |
|
+_GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode)); |
|
+# endif |
|
+# if @HAVE_LCHMOD@ |
|
+_GL_CXXALIASWARN (lchmod); |
|
+# endif |
|
+#elif defined GNULIB_POSIXCHECK |
|
+# undef lchmod |
|
+# if HAVE_RAW_DECL_LCHMOD |
|
+_GL_WARN_ON_USE (lchmod, "lchmod is unportable - " |
|
+ "use gnulib module lchmod for portability"); |
|
+# endif |
|
+#endif |
|
+ |
|
+ |
|
+#if @GNULIB_LSTAT@ |
|
+# if ! @HAVE_LSTAT@ |
|
+/* mingw does not support symlinks, therefore it does not have lstat. But |
|
+ without links, stat does just fine. */ |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# define lstat stat |
|
+# endif |
|
+_GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *name, struct stat *buf)); |
|
+# elif @REPLACE_LSTAT@ |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef lstat |
|
+# define lstat rpl_lstat |
|
+# endif |
|
+_GL_FUNCDECL_RPL (lstat, int, (const char *name, struct stat *buf) |
|
+ _GL_ARG_NONNULL ((1, 2))); |
|
+_GL_CXXALIAS_RPL (lstat, int, (const char *name, struct stat *buf)); |
|
+# else |
|
+_GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf)); |
|
+# endif |
|
+# if @HAVE_LSTAT@ |
|
+_GL_CXXALIASWARN (lstat); |
|
+# endif |
|
+#elif defined GNULIB_POSIXCHECK |
|
+# undef lstat |
|
+# if HAVE_RAW_DECL_LSTAT |
|
+_GL_WARN_ON_USE (lstat, "lstat is unportable - " |
|
+ "use gnulib module lstat for portability"); |
|
+# endif |
|
+#endif |
|
+ |
|
+ |
|
+#if @REPLACE_MKDIR@ |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef mkdir |
|
+# define mkdir rpl_mkdir |
|
+# endif |
|
+_GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); |
|
+#else |
|
+/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. |
|
+ Additionally, it declares _mkdir (and depending on compile flags, an |
|
+ alias mkdir), only in the nonstandard includes <direct.h> and <io.h>, |
|
+ which are included above. */ |
|
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ |
|
+ |
|
+# if !GNULIB_defined_rpl_mkdir |
|
+static int |
|
+rpl_mkdir (char const *name, mode_t mode) |
|
+{ |
|
+ return _mkdir (name); |
|
+} |
|
+# define GNULIB_defined_rpl_mkdir 1 |
|
+# endif |
|
+ |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# define mkdir rpl_mkdir |
|
+# endif |
|
+_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); |
|
+# else |
|
+_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); |
|
+# endif |
|
+#endif |
|
+_GL_CXXALIASWARN (mkdir); |
|
+ |
|
+ |
|
+#if @GNULIB_MKDIRAT@ |
|
+# if !@HAVE_MKDIRAT@ |
|
+_GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode) |
|
+ _GL_ARG_NONNULL ((2))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)); |
|
+_GL_CXXALIASWARN (mkdirat); |
|
+#elif defined GNULIB_POSIXCHECK |
|
+# undef mkdirat |
|
+# if HAVE_RAW_DECL_MKDIRAT |
|
+_GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - " |
|
+ "use gnulib module openat for portability"); |
|
+# endif |
|
+#endif |
|
+ |
|
+ |
|
+#if @GNULIB_MKFIFO@ |
|
+# if @REPLACE_MKFIFO@ |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef mkfifo |
|
+# define mkfifo rpl_mkfifo |
|
+# endif |
|
+_GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+_GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode)); |
|
+# else |
|
+# if !@HAVE_MKFIFO@ |
|
+_GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode)); |
|
+# endif |
|
+_GL_CXXALIASWARN (mkfifo); |
|
+#elif defined GNULIB_POSIXCHECK |
|
+# undef mkfifo |
|
+# if HAVE_RAW_DECL_MKFIFO |
|
+_GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - " |
|
+ "use gnulib module mkfifo for portability"); |
|
+# endif |
|
+#endif |
|
+ |
|
+ |
|
+#if @GNULIB_MKFIFOAT@ |
|
+# if !@HAVE_MKFIFOAT@ |
|
+_GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode) |
|
+ _GL_ARG_NONNULL ((2))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)); |
|
+_GL_CXXALIASWARN (mkfifoat); |
|
+#elif defined GNULIB_POSIXCHECK |
|
+# undef mkfifoat |
|
+# if HAVE_RAW_DECL_MKFIFOAT |
|
+_GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - " |
|
+ "use gnulib module mkfifoat for portability"); |
|
+# endif |
|
+#endif |
|
+ |
|
+ |
|
+#if @GNULIB_MKNOD@ |
|
+# if @REPLACE_MKNOD@ |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef mknod |
|
+# define mknod rpl_mknod |
|
+# endif |
|
+_GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+_GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)); |
|
+# else |
|
+# if !@HAVE_MKNOD@ |
|
+_GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+# endif |
|
+/* Need to cast, because on OSF/1 5.1, the third parameter is '...'. */ |
|
+_GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev)); |
|
+# endif |
|
+_GL_CXXALIASWARN (mknod); |
|
+#elif defined GNULIB_POSIXCHECK |
|
+# undef mknod |
|
+# if HAVE_RAW_DECL_MKNOD |
|
+_GL_WARN_ON_USE (mknod, "mknod is not portable - " |
|
+ "use gnulib module mknod for portability"); |
|
+# endif |
|
+#endif |
|
+ |
|
+ |
|
+#if @GNULIB_MKNODAT@ |
|
+# if !@HAVE_MKNODAT@ |
|
+_GL_FUNCDECL_SYS (mknodat, int, |
|
+ (int fd, char const *file, mode_t mode, dev_t dev) |
|
+ _GL_ARG_NONNULL ((2))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (mknodat, int, |
|
+ (int fd, char const *file, mode_t mode, dev_t dev)); |
|
+_GL_CXXALIASWARN (mknodat); |
|
+#elif defined GNULIB_POSIXCHECK |
|
+# undef mknodat |
|
+# if HAVE_RAW_DECL_MKNODAT |
|
+_GL_WARN_ON_USE (mknodat, "mknodat is not portable - " |
|
+ "use gnulib module mkfifoat for portability"); |
|
+# endif |
|
+#endif |
|
+ |
|
+ |
|
+#if @GNULIB_STAT@ |
|
+# if @REPLACE_STAT@ |
|
+/* We can't use the object-like #define stat rpl_stat, because of |
|
+ struct stat. This means that rpl_stat will not be used if the user |
|
+ does (stat)(a,b). Oh well. */ |
|
+# if defined _AIX && defined stat && defined _LARGE_FILES |
|
+ /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, |
|
+ so we have to replace stat64() instead of stat(). */ |
|
+# undef stat64 |
|
+# define stat64(name, st) rpl_stat (name, st) |
|
+# elif @WINDOWS_64_BIT_ST_SIZE@ |
|
+ /* Above, we define stat to _stati64. */ |
|
+# if defined __MINGW32__ && defined _stati64 |
|
+# ifndef _USE_32BIT_TIME_T |
|
+ /* The system headers define _stati64 to _stat64. */ |
|
+# undef _stat64 |
|
+# define _stat64(name, st) rpl_stat (name, st) |
|
+# endif |
|
+# elif defined _MSC_VER && defined _stati64 |
|
+# ifdef _USE_32BIT_TIME_T |
|
+ /* The system headers define _stati64 to _stat32i64. */ |
|
+# undef _stat32i64 |
|
+# define _stat32i64(name, st) rpl_stat (name, st) |
|
+# else |
|
+ /* The system headers define _stati64 to _stat64. */ |
|
+# undef _stat64 |
|
+# define _stat64(name, st) rpl_stat (name, st) |
|
+# endif |
|
+# else |
|
+# undef _stati64 |
|
+# define _stati64(name, st) rpl_stat (name, st) |
|
+# endif |
|
+# elif defined __MINGW32__ && defined stat |
|
+# ifdef _USE_32BIT_TIME_T |
|
+ /* The system headers define stat to _stat32i64. */ |
|
+# undef _stat32i64 |
|
+# define _stat32i64(name, st) rpl_stat (name, st) |
|
+# else |
|
+ /* The system headers define stat to _stat64. */ |
|
+# undef _stat64 |
|
+# define _stat64(name, st) rpl_stat (name, st) |
|
+# endif |
|
+# elif defined _MSC_VER && defined stat |
|
+# ifdef _USE_32BIT_TIME_T |
|
+ /* The system headers define stat to _stat32. */ |
|
+# undef _stat32 |
|
+# define _stat32(name, st) rpl_stat (name, st) |
|
+# else |
|
+ /* The system headers define stat to _stat64i32. */ |
|
+# undef _stat64i32 |
|
+# define _stat64i32(name, st) rpl_stat (name, st) |
|
+# endif |
|
+# else /* !(_AIX ||__MINGW32__ || _MSC_VER) */ |
|
+# undef stat |
|
+# define stat(name, st) rpl_stat (name, st) |
|
+# endif /* !_LARGE_FILES */ |
|
+_GL_EXTERN_C int stat (const char *name, struct stat *buf) |
|
+ _GL_ARG_NONNULL ((1, 2)); |
|
+# endif |
|
+#elif defined GNULIB_POSIXCHECK |
|
+# undef stat |
|
+# if HAVE_RAW_DECL_STAT |
|
+_GL_WARN_ON_USE (stat, "stat is unportable - " |
|
+ "use gnulib module stat for portability"); |
|
+# endif |
|
+#endif |
|
+ |
|
+ |
|
+#if @GNULIB_UTIMENSAT@ |
|
+/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat |
|
+ implementation relies on futimesat, which on Solaris 10 makes an invocation |
|
+ to utimensat that is meant to invoke the libc's utimensat(), not gnulib's |
|
+ utimensat(). */ |
|
+# if @REPLACE_UTIMENSAT@ || (!@HAVE_UTIMENSAT@ && defined __sun) |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef utimensat |
|
+# define utimensat rpl_utimensat |
|
+# endif |
|
+_GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name, |
|
+ struct timespec const times[2], int flag) |
|
+ _GL_ARG_NONNULL ((2))); |
|
+_GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name, |
|
+ struct timespec const times[2], int flag)); |
|
+# else |
|
+# if !@HAVE_UTIMENSAT@ |
|
+_GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name, |
|
+ struct timespec const times[2], int flag) |
|
+ _GL_ARG_NONNULL ((2))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name, |
|
+ struct timespec const times[2], int flag)); |
|
+# endif |
|
+# if @HAVE_UTIMENSAT@ |
|
+_GL_CXXALIASWARN (utimensat); |
|
+# endif |
|
+#elif defined GNULIB_POSIXCHECK |
|
+# undef utimensat |
|
+# if HAVE_RAW_DECL_UTIMENSAT |
|
+_GL_WARN_ON_USE (utimensat, "utimensat is not portable - " |
|
+ "use gnulib module utimensat for portability"); |
|
+# endif |
|
+#endif |
|
+ |
|
+ |
|
+#endif /* _@GUARD_PREFIX@_SYS_STAT_H */ |
|
+#endif /* _@GUARD_PREFIX@_SYS_STAT_H */ |
|
+#endif |
|
diff --git a/grub-core/gnulib/sys_time.in.h b/grub-core/gnulib/sys_time.in.h |
|
new file mode 100644 |
|
index 00000000000..30057ad49fd |
|
--- /dev/null |
|
+++ b/grub-core/gnulib/sys_time.in.h |
|
@@ -0,0 +1,213 @@ |
|
+/* Provide a more complete sys/time.h. |
|
+ |
|
+ Copyright (C) 2007-2014 Free Software Foundation, Inc. |
|
+ |
|
+ This program is free software; you can redistribute it and/or modify |
|
+ it under the terms of the GNU General Public License as published by |
|
+ the Free Software Foundation; either version 3, or (at your option) |
|
+ any later version. |
|
+ |
|
+ This program is distributed in the hope that it will be useful, |
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
+ GNU General Public License for more details. |
|
+ |
|
+ You should have received a copy of the GNU General Public License |
|
+ along with this program; if not, see <http://www.gnu.org/licenses/>. */ |
|
+ |
|
+/* Written by Paul Eggert. */ |
|
+ |
|
+#ifndef _@GUARD_PREFIX@_SYS_TIME_H |
|
+ |
|
+#if __GNUC__ >= 3 |
|
+@PRAGMA_SYSTEM_HEADER@ |
|
+#endif |
|
+@PRAGMA_COLUMNS@ |
|
+ |
|
+/* On Cygwin and on many BSDish systems, <sys/time.h> includes itself |
|
+ recursively via <sys/select.h>. |
|
+ Simply delegate to the system's header in this case; it is a no-op. |
|
+ Without this extra ifdef, the C++ gettimeofday declaration below |
|
+ would be a forward declaration in gnulib's nested <sys/time.h>. */ |
|
+#if defined _CYGWIN_SYS_TIME_H || defined _SYS_TIME_H || defined _SYS_TIME_H_ |
|
+# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ |
|
+#else |
|
+ |
|
+/* The include_next requires a split double-inclusion guard. */ |
|
+#if @HAVE_SYS_TIME_H@ |
|
+# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ |
|
+#endif |
|
+ |
|
+#ifndef _@GUARD_PREFIX@_SYS_TIME_H |
|
+#define _@GUARD_PREFIX@_SYS_TIME_H |
|
+ |
|
+#if ! @HAVE_SYS_TIME_H@ |
|
+# include <time.h> |
|
+#endif |
|
+ |
|
+/* On native Windows with MSVC, get the 'struct timeval' type. |
|
+ Also, on native Windows with a 64-bit time_t, where we are overriding the |
|
+ 'struct timeval' type, get all declarations of system functions whose |
|
+ signature contains 'struct timeval'. */ |
|
+#if (defined _MSC_VER || @REPLACE_STRUCT_TIMEVAL@) && @HAVE_WINSOCK2_H@ && !defined _GL_INCLUDING_WINSOCK2_H |
|
+# define _GL_INCLUDING_WINSOCK2_H |
|
+# include <winsock2.h> |
|
+# undef _GL_INCLUDING_WINSOCK2_H |
|
+#endif |
|
+ |
|
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ |
|
+ |
|
+/* The definition of _GL_ARG_NONNULL is copied here. */ |
|
+ |
|
+/* The definition of _GL_WARN_ON_USE is copied here. */ |
|
+ |
|
+#ifdef __cplusplus |
|
+extern "C" { |
|
+#endif |
|
+ |
|
+#if !@HAVE_STRUCT_TIMEVAL@ || @REPLACE_STRUCT_TIMEVAL@ |
|
+ |
|
+# if @REPLACE_STRUCT_TIMEVAL@ |
|
+# define timeval rpl_timeval |
|
+# endif |
|
+ |
|
+# if !GNULIB_defined_struct_timeval |
|
+struct timeval |
|
+{ |
|
+ time_t tv_sec; |
|
+ long int tv_usec; |
|
+}; |
|
+# define GNULIB_defined_struct_timeval 1 |
|
+# endif |
|
+ |
|
+#endif |
|
+ |
|
+#ifdef __cplusplus |
|
+} |
|
+#endif |
|
+ |
|
+#if @GNULIB_GETTIMEOFDAY@ |
|
+# if @REPLACE_GETTIMEOFDAY@ |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef gettimeofday |
|
+# define gettimeofday rpl_gettimeofday |
|
+# endif |
|
+_GL_FUNCDECL_RPL (gettimeofday, int, |
|
+ (struct timeval *restrict, void *restrict) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+_GL_CXXALIAS_RPL (gettimeofday, int, |
|
+ (struct timeval *restrict, void *restrict)); |
|
+# else |
|
+# if !@HAVE_GETTIMEOFDAY@ |
|
+_GL_FUNCDECL_SYS (gettimeofday, int, |
|
+ (struct timeval *restrict, void *restrict) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+# endif |
|
+/* Need to cast, because on glibc systems, by default, the second argument is |
|
+ struct timezone *. */ |
|
+_GL_CXXALIAS_SYS_CAST (gettimeofday, int, |
|
+ (struct timeval *restrict, void *restrict)); |
|
+# endif |
|
+_GL_CXXALIASWARN (gettimeofday); |
|
+#elif defined GNULIB_POSIXCHECK |
|
+# undef gettimeofday |
|
+# if HAVE_RAW_DECL_GETTIMEOFDAY |
|
+_GL_WARN_ON_USE (gettimeofday, "gettimeofday is unportable - " |
|
+ "use gnulib module gettimeofday for portability"); |
|
+# endif |
|
+#endif |
|
+ |
|
+/* Hide some function declarations from <winsock2.h>. */ |
|
+ |
|
+#if defined _MSC_VER && @HAVE_WINSOCK2_H@ |
|
+# if !defined _@GUARD_PREFIX@_UNISTD_H |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef close |
|
+# define close close_used_without_including_unistd_h |
|
+# else |
|
+ _GL_WARN_ON_USE (close, |
|
+ "close() used without including <unistd.h>"); |
|
+# endif |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef gethostname |
|
+# define gethostname gethostname_used_without_including_unistd_h |
|
+# else |
|
+ _GL_WARN_ON_USE (gethostname, |
|
+ "gethostname() used without including <unistd.h>"); |
|
+# endif |
|
+# endif |
|
+# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef socket |
|
+# define socket socket_used_without_including_sys_socket_h |
|
+# undef connect |
|
+# define connect connect_used_without_including_sys_socket_h |
|
+# undef accept |
|
+# define accept accept_used_without_including_sys_socket_h |
|
+# undef bind |
|
+# define bind bind_used_without_including_sys_socket_h |
|
+# undef getpeername |
|
+# define getpeername getpeername_used_without_including_sys_socket_h |
|
+# undef getsockname |
|
+# define getsockname getsockname_used_without_including_sys_socket_h |
|
+# undef getsockopt |
|
+# define getsockopt getsockopt_used_without_including_sys_socket_h |
|
+# undef listen |
|
+# define listen listen_used_without_including_sys_socket_h |
|
+# undef recv |
|
+# define recv recv_used_without_including_sys_socket_h |
|
+# undef send |
|
+# define send send_used_without_including_sys_socket_h |
|
+# undef recvfrom |
|
+# define recvfrom recvfrom_used_without_including_sys_socket_h |
|
+# undef sendto |
|
+# define sendto sendto_used_without_including_sys_socket_h |
|
+# undef setsockopt |
|
+# define setsockopt setsockopt_used_without_including_sys_socket_h |
|
+# undef shutdown |
|
+# define shutdown shutdown_used_without_including_sys_socket_h |
|
+# else |
|
+ _GL_WARN_ON_USE (socket, |
|
+ "socket() used without including <sys/socket.h>"); |
|
+ _GL_WARN_ON_USE (connect, |
|
+ "connect() used without including <sys/socket.h>"); |
|
+ _GL_WARN_ON_USE (accept, |
|
+ "accept() used without including <sys/socket.h>"); |
|
+ _GL_WARN_ON_USE (bind, |
|
+ "bind() used without including <sys/socket.h>"); |
|
+ _GL_WARN_ON_USE (getpeername, |
|
+ "getpeername() used without including <sys/socket.h>"); |
|
+ _GL_WARN_ON_USE (getsockname, |
|
+ "getsockname() used without including <sys/socket.h>"); |
|
+ _GL_WARN_ON_USE (getsockopt, |
|
+ "getsockopt() used without including <sys/socket.h>"); |
|
+ _GL_WARN_ON_USE (listen, |
|
+ "listen() used without including <sys/socket.h>"); |
|
+ _GL_WARN_ON_USE (recv, |
|
+ "recv() used without including <sys/socket.h>"); |
|
+ _GL_WARN_ON_USE (send, |
|
+ "send() used without including <sys/socket.h>"); |
|
+ _GL_WARN_ON_USE (recvfrom, |
|
+ "recvfrom() used without including <sys/socket.h>"); |
|
+ _GL_WARN_ON_USE (sendto, |
|
+ "sendto() used without including <sys/socket.h>"); |
|
+ _GL_WARN_ON_USE (setsockopt, |
|
+ "setsockopt() used without including <sys/socket.h>"); |
|
+ _GL_WARN_ON_USE (shutdown, |
|
+ "shutdown() used without including <sys/socket.h>"); |
|
+# endif |
|
+# endif |
|
+# if !defined _@GUARD_PREFIX@_SYS_SELECT_H |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef select |
|
+# define select select_used_without_including_sys_select_h |
|
+# else |
|
+ _GL_WARN_ON_USE (select, |
|
+ "select() used without including <sys/select.h>"); |
|
+# endif |
|
+# endif |
|
+#endif |
|
+ |
|
+#endif /* _@GUARD_PREFIX@_SYS_TIME_H */ |
|
+#endif /* _CYGWIN_SYS_TIME_H */ |
|
+#endif /* _@GUARD_PREFIX@_SYS_TIME_H */ |
|
diff --git a/grub-core/gnulib/sys_types.in.h b/grub-core/gnulib/sys_types.in.h |
|
index d7da35623b1..9520c09030c 100644 |
|
--- a/grub-core/gnulib/sys_types.in.h |
|
+++ b/grub-core/gnulib/sys_types.in.h |
|
@@ -23,7 +23,9 @@ |
|
#ifndef _@GUARD_PREFIX@_SYS_TYPES_H |
|
|
|
/* The include_next requires a split double-inclusion guard. */ |
|
+# define _GL_INCLUDING_SYS_TYPES_H |
|
#@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ |
|
+# undef _GL_INCLUDING_SYS_TYPES_H |
|
|
|
#ifndef _@GUARD_PREFIX@_SYS_TYPES_H |
|
#define _@GUARD_PREFIX@_SYS_TYPES_H |
|
diff --git a/grub-core/gnulib/time.h b/grub-core/gnulib/time.h |
|
new file mode 100644 |
|
index 00000000000..b9203d5569a |
|
--- /dev/null |
|
+++ b/grub-core/gnulib/time.h |
|
@@ -0,0 +1,586 @@ |
|
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ |
|
+/* A more-standard <time.h>. |
|
+ |
|
+ Copyright (C) 2007-2014 Free Software Foundation, Inc. |
|
+ |
|
+ This program is free software; you can redistribute it and/or modify |
|
+ it under the terms of the GNU General Public License as published by |
|
+ the Free Software Foundation; either version 3, or (at your option) |
|
+ any later version. |
|
+ |
|
+ This program is distributed in the hope that it will be useful, |
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
+ GNU General Public License for more details. |
|
+ |
|
+ You should have received a copy of the GNU General Public License |
|
+ along with this program; if not, see <http://www.gnu.org/licenses/>. */ |
|
+ |
|
+#if __GNUC__ >= 3 |
|
+#pragma GCC system_header |
|
+#endif |
|
+ |
|
+ |
|
+/* Don't get in the way of glibc when it includes time.h merely to |
|
+ declare a few standard symbols, rather than to declare all the |
|
+ symbols. Also, Solaris 8 <time.h> eventually includes itself |
|
+ recursively; if that is happening, just include the system <time.h> |
|
+ without adding our own declarations. */ |
|
+#if (defined __need_time_t || defined __need_clock_t \ |
|
+ || defined __need_timespec \ |
|
+ || defined _GL_TIME_H) |
|
+ |
|
+# include_next <time.h> |
|
+ |
|
+#else |
|
+ |
|
+# define _GL_TIME_H |
|
+ |
|
+# include_next <time.h> |
|
+ |
|
+/* NetBSD 5.0 mis-defines NULL. */ |
|
+# include <stddef.h> |
|
+ |
|
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ |
|
+#ifndef _GL_CXXDEFS_H |
|
+#define _GL_CXXDEFS_H |
|
+ |
|
+/* The three most frequent use cases of these macros are: |
|
+ |
|
+ * For providing a substitute for a function that is missing on some |
|
+ platforms, but is declared and works fine on the platforms on which |
|
+ it exists: |
|
+ |
|
+ #if @GNULIB_FOO@ |
|
+ # if !@HAVE_FOO@ |
|
+ _GL_FUNCDECL_SYS (foo, ...); |
|
+ # endif |
|
+ _GL_CXXALIAS_SYS (foo, ...); |
|
+ _GL_CXXALIASWARN (foo); |
|
+ #elif defined GNULIB_POSIXCHECK |
|
+ ... |
|
+ #endif |
|
+ |
|
+ * For providing a replacement for a function that exists on all platforms, |
|
+ but is broken/insufficient and needs to be replaced on some platforms: |
|
+ |
|
+ #if @GNULIB_FOO@ |
|
+ # if @REPLACE_FOO@ |
|
+ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+ # undef foo |
|
+ # define foo rpl_foo |
|
+ # endif |
|
+ _GL_FUNCDECL_RPL (foo, ...); |
|
+ _GL_CXXALIAS_RPL (foo, ...); |
|
+ # else |
|
+ _GL_CXXALIAS_SYS (foo, ...); |
|
+ # endif |
|
+ _GL_CXXALIASWARN (foo); |
|
+ #elif defined GNULIB_POSIXCHECK |
|
+ ... |
|
+ #endif |
|
+ |
|
+ * For providing a replacement for a function that exists on some platforms |
|
+ but is broken/insufficient and needs to be replaced on some of them and |
|
+ is additionally either missing or undeclared on some other platforms: |
|
+ |
|
+ #if @GNULIB_FOO@ |
|
+ # if @REPLACE_FOO@ |
|
+ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+ # undef foo |
|
+ # define foo rpl_foo |
|
+ # endif |
|
+ _GL_FUNCDECL_RPL (foo, ...); |
|
+ _GL_CXXALIAS_RPL (foo, ...); |
|
+ # else |
|
+ # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ |
|
+ _GL_FUNCDECL_SYS (foo, ...); |
|
+ # endif |
|
+ _GL_CXXALIAS_SYS (foo, ...); |
|
+ # endif |
|
+ _GL_CXXALIASWARN (foo); |
|
+ #elif defined GNULIB_POSIXCHECK |
|
+ ... |
|
+ #endif |
|
+*/ |
|
+ |
|
+/* _GL_EXTERN_C declaration; |
|
+ performs the declaration with C linkage. */ |
|
+#if defined __cplusplus |
|
+# define _GL_EXTERN_C extern "C" |
|
+#else |
|
+# define _GL_EXTERN_C extern |
|
+#endif |
|
+ |
|
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); |
|
+ declares a replacement function, named rpl_func, with the given prototype, |
|
+ consisting of return type, parameters, and attributes. |
|
+ Example: |
|
+ _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+ */ |
|
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ |
|
+ _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) |
|
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ |
|
+ _GL_EXTERN_C rettype rpl_func parameters_and_attributes |
|
+ |
|
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); |
|
+ declares the system function, named func, with the given prototype, |
|
+ consisting of return type, parameters, and attributes. |
|
+ Example: |
|
+ _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+ */ |
|
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ |
|
+ _GL_EXTERN_C rettype func parameters_and_attributes |
|
+ |
|
+/* _GL_CXXALIAS_RPL (func, rettype, parameters); |
|
+ declares a C++ alias called GNULIB_NAMESPACE::func |
|
+ that redirects to rpl_func, if GNULIB_NAMESPACE is defined. |
|
+ Example: |
|
+ _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); |
|
+ */ |
|
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ |
|
+ _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) |
|
+#if defined __cplusplus && defined GNULIB_NAMESPACE |
|
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ |
|
+ namespace GNULIB_NAMESPACE \ |
|
+ { \ |
|
+ rettype (*const func) parameters = ::rpl_func; \ |
|
+ } \ |
|
+ _GL_EXTERN_C int _gl_cxxalias_dummy |
|
+#else |
|
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ |
|
+ _GL_EXTERN_C int _gl_cxxalias_dummy |
|
+#endif |
|
+ |
|
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); |
|
+ is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); |
|
+ except that the C function rpl_func may have a slightly different |
|
+ declaration. A cast is used to silence the "invalid conversion" error |
|
+ that would otherwise occur. */ |
|
+#if defined __cplusplus && defined GNULIB_NAMESPACE |
|
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ |
|
+ namespace GNULIB_NAMESPACE \ |
|
+ { \ |
|
+ rettype (*const func) parameters = \ |
|
+ reinterpret_cast<rettype(*)parameters>(::rpl_func); \ |
|
+ } \ |
|
+ _GL_EXTERN_C int _gl_cxxalias_dummy |
|
+#else |
|
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ |
|
+ _GL_EXTERN_C int _gl_cxxalias_dummy |
|
+#endif |
|
+ |
|
+/* _GL_CXXALIAS_SYS (func, rettype, parameters); |
|
+ declares a C++ alias called GNULIB_NAMESPACE::func |
|
+ that redirects to the system provided function func, if GNULIB_NAMESPACE |
|
+ is defined. |
|
+ Example: |
|
+ _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); |
|
+ */ |
|
+#if defined __cplusplus && defined GNULIB_NAMESPACE |
|
+ /* If we were to write |
|
+ rettype (*const func) parameters = ::func; |
|
+ like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls |
|
+ better (remove an indirection through a 'static' pointer variable), |
|
+ but then the _GL_CXXALIASWARN macro below would cause a warning not only |
|
+ for uses of ::func but also for uses of GNULIB_NAMESPACE::func. */ |
|
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ |
|
+ namespace GNULIB_NAMESPACE \ |
|
+ { \ |
|
+ static rettype (*func) parameters = ::func; \ |
|
+ } \ |
|
+ _GL_EXTERN_C int _gl_cxxalias_dummy |
|
+#else |
|
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ |
|
+ _GL_EXTERN_C int _gl_cxxalias_dummy |
|
+#endif |
|
+ |
|
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); |
|
+ is like _GL_CXXALIAS_SYS (func, rettype, parameters); |
|
+ except that the C function func may have a slightly different declaration. |
|
+ A cast is used to silence the "invalid conversion" error that would |
|
+ otherwise occur. */ |
|
+#if defined __cplusplus && defined GNULIB_NAMESPACE |
|
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ |
|
+ namespace GNULIB_NAMESPACE \ |
|
+ { \ |
|
+ static rettype (*func) parameters = \ |
|
+ reinterpret_cast<rettype(*)parameters>(::func); \ |
|
+ } \ |
|
+ _GL_EXTERN_C int _gl_cxxalias_dummy |
|
+#else |
|
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ |
|
+ _GL_EXTERN_C int _gl_cxxalias_dummy |
|
+#endif |
|
+ |
|
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); |
|
+ is like _GL_CXXALIAS_SYS (func, rettype, parameters); |
|
+ except that the C function is picked among a set of overloaded functions, |
|
+ namely the one with rettype2 and parameters2. Two consecutive casts |
|
+ are used to silence the "cannot find a match" and "invalid conversion" |
|
+ errors that would otherwise occur. */ |
|
+#if defined __cplusplus && defined GNULIB_NAMESPACE |
|
+ /* The outer cast must be a reinterpret_cast. |
|
+ The inner cast: When the function is defined as a set of overloaded |
|
+ functions, it works as a static_cast<>, choosing the designated variant. |
|
+ When the function is defined as a single variant, it works as a |
|
+ reinterpret_cast<>. The parenthesized cast syntax works both ways. */ |
|
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ |
|
+ namespace GNULIB_NAMESPACE \ |
|
+ { \ |
|
+ static rettype (*func) parameters = \ |
|
+ reinterpret_cast<rettype(*)parameters>( \ |
|
+ (rettype2(*)parameters2)(::func)); \ |
|
+ } \ |
|
+ _GL_EXTERN_C int _gl_cxxalias_dummy |
|
+#else |
|
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ |
|
+ _GL_EXTERN_C int _gl_cxxalias_dummy |
|
+#endif |
|
+ |
|
+/* _GL_CXXALIASWARN (func); |
|
+ causes a warning to be emitted when ::func is used but not when |
|
+ GNULIB_NAMESPACE::func is used. func must be defined without overloaded |
|
+ variants. */ |
|
+#if defined __cplusplus && defined GNULIB_NAMESPACE |
|
+# define _GL_CXXALIASWARN(func) \ |
|
+ _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) |
|
+# define _GL_CXXALIASWARN_1(func,namespace) \ |
|
+ _GL_CXXALIASWARN_2 (func, namespace) |
|
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, |
|
+ we enable the warning only when not optimizing. */ |
|
+# if !__OPTIMIZE__ |
|
+# define _GL_CXXALIASWARN_2(func,namespace) \ |
|
+ _GL_WARN_ON_USE (func, \ |
|
+ "The symbol ::" #func " refers to the system function. " \ |
|
+ "Use " #namespace "::" #func " instead.") |
|
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING |
|
+# define _GL_CXXALIASWARN_2(func,namespace) \ |
|
+ extern __typeof__ (func) func |
|
+# else |
|
+# define _GL_CXXALIASWARN_2(func,namespace) \ |
|
+ _GL_EXTERN_C int _gl_cxxalias_dummy |
|
+# endif |
|
+#else |
|
+# define _GL_CXXALIASWARN(func) \ |
|
+ _GL_EXTERN_C int _gl_cxxalias_dummy |
|
+#endif |
|
+ |
|
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); |
|
+ causes a warning to be emitted when the given overloaded variant of ::func |
|
+ is used but not when GNULIB_NAMESPACE::func is used. */ |
|
+#if defined __cplusplus && defined GNULIB_NAMESPACE |
|
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ |
|
+ _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ |
|
+ GNULIB_NAMESPACE) |
|
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ |
|
+ _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) |
|
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, |
|
+ we enable the warning only when not optimizing. */ |
|
+# if !__OPTIMIZE__ |
|
+# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ |
|
+ _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ |
|
+ "The symbol ::" #func " refers to the system function. " \ |
|
+ "Use " #namespace "::" #func " instead.") |
|
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING |
|
+# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ |
|
+ extern __typeof__ (func) func |
|
+# else |
|
+# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ |
|
+ _GL_EXTERN_C int _gl_cxxalias_dummy |
|
+# endif |
|
+#else |
|
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ |
|
+ _GL_EXTERN_C int _gl_cxxalias_dummy |
|
+#endif |
|
+ |
|
+#endif /* _GL_CXXDEFS_H */ |
|
+ |
|
+/* The definition of _GL_ARG_NONNULL is copied here. */ |
|
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools |
|
+ that the values passed as arguments n, ..., m must be non-NULL pointers. |
|
+ n = 1 stands for the first argument, n = 2 for the second argument etc. */ |
|
+#ifndef _GL_ARG_NONNULL |
|
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 |
|
+# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) |
|
+# else |
|
+# define _GL_ARG_NONNULL(params) |
|
+# endif |
|
+#endif |
|
+ |
|
+/* The definition of _GL_WARN_ON_USE is copied here. */ |
|
+#ifndef _GL_WARN_ON_USE |
|
+ |
|
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) |
|
+/* A compiler attribute is available in gcc versions 4.3.0 and later. */ |
|
+# define _GL_WARN_ON_USE(function, message) \ |
|
+extern __typeof__ (function) function __attribute__ ((__warning__ (message))) |
|
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING |
|
+/* Verify the existence of the function. */ |
|
+# define _GL_WARN_ON_USE(function, message) \ |
|
+extern __typeof__ (function) function |
|
+# else /* Unsupported. */ |
|
+# define _GL_WARN_ON_USE(function, message) \ |
|
+_GL_WARN_EXTERN_C int _gl_warn_on_use |
|
+# endif |
|
+#endif |
|
+ |
|
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") |
|
+ is like _GL_WARN_ON_USE (function, "string"), except that the function is |
|
+ declared with the given prototype, consisting of return type, parameters, |
|
+ and attributes. |
|
+ This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does |
|
+ not work in this case. */ |
|
+#ifndef _GL_WARN_ON_USE_CXX |
|
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) |
|
+# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ |
|
+extern rettype function parameters_and_attributes \ |
|
+ __attribute__ ((__warning__ (msg))) |
|
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING |
|
+/* Verify the existence of the function. */ |
|
+# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ |
|
+extern rettype function parameters_and_attributes |
|
+# else /* Unsupported. */ |
|
+# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ |
|
+_GL_WARN_EXTERN_C int _gl_warn_on_use |
|
+# endif |
|
+#endif |
|
+ |
|
+/* _GL_WARN_EXTERN_C declaration; |
|
+ performs the declaration with C linkage. */ |
|
+#ifndef _GL_WARN_EXTERN_C |
|
+# if defined __cplusplus |
|
+# define _GL_WARN_EXTERN_C extern "C" |
|
+# else |
|
+# define _GL_WARN_EXTERN_C extern |
|
+# endif |
|
+#endif |
|
+ |
|
+/* Some systems don't define struct timespec (e.g., AIX 4.1, Ultrix 4.3). |
|
+ Or they define it with the wrong member names or define it in <sys/time.h> |
|
+ (e.g., FreeBSD circa 1997). Stock Mingw prior to 3.0 does not define it, |
|
+ but the pthreads-win32 library defines it in <pthread.h>. */ |
|
+# if ! 1 |
|
+# if 0 |
|
+# include <sys/time.h> |
|
+# elif 0 |
|
+# include <pthread.h> |
|
+# else |
|
+ |
|
+# ifdef __cplusplus |
|
+extern "C" { |
|
+# endif |
|
+ |
|
+# if !GNULIB_defined_struct_timespec |
|
+# undef timespec |
|
+# define timespec rpl_timespec |
|
+struct timespec |
|
+{ |
|
+ time_t tv_sec; |
|
+ long int tv_nsec; |
|
+}; |
|
+# define GNULIB_defined_struct_timespec 1 |
|
+# endif |
|
+ |
|
+# ifdef __cplusplus |
|
+} |
|
+# endif |
|
+ |
|
+# endif |
|
+# endif |
|
+ |
|
+# if !GNULIB_defined_struct_time_t_must_be_integral |
|
+/* Per http://austingroupbugs.net/view.php?id=327, POSIX requires |
|
+ time_t to be an integer type, even though C99 permits floating |
|
+ point. We don't know of any implementation that uses floating |
|
+ point, and it is much easier to write code that doesn't have to |
|
+ worry about that corner case, so we force the issue. */ |
|
+struct __time_t_must_be_integral { |
|
+ unsigned int __floating_time_t_unsupported : (time_t) 1; |
|
+}; |
|
+# define GNULIB_defined_struct_time_t_must_be_integral 1 |
|
+# endif |
|
+ |
|
+/* Sleep for at least RQTP seconds unless interrupted, If interrupted, |
|
+ return -1 and store the remaining time into RMTP. See |
|
+ <http://www.opengroup.org/susv3xsh/nanosleep.html>. */ |
|
+# if 0 |
|
+# if GNULIB_PORTCHECK |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# define nanosleep rpl_nanosleep |
|
+# endif |
|
+_GL_FUNCDECL_RPL (nanosleep, int, |
|
+ (struct timespec const *__rqtp, struct timespec *__rmtp) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+_GL_CXXALIAS_RPL (nanosleep, int, |
|
+ (struct timespec const *__rqtp, struct timespec *__rmtp)); |
|
+# else |
|
+# if ! 1 |
|
+_GL_FUNCDECL_SYS (nanosleep, int, |
|
+ (struct timespec const *__rqtp, struct timespec *__rmtp) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (nanosleep, int, |
|
+ (struct timespec const *__rqtp, struct timespec *__rmtp)); |
|
+# endif |
|
+_GL_CXXALIASWARN (nanosleep); |
|
+# endif |
|
+ |
|
+/* Return the 'time_t' representation of TP and normalize TP. */ |
|
+# if 0 |
|
+# if GNULIB_PORTCHECK |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# define mktime rpl_mktime |
|
+# endif |
|
+_GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1))); |
|
+_GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp)); |
|
+# else |
|
+_GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp)); |
|
+# endif |
|
+_GL_CXXALIASWARN (mktime); |
|
+# endif |
|
+ |
|
+/* Convert TIMER to RESULT, assuming local time and UTC respectively. See |
|
+ <http://www.opengroup.org/susv3xsh/localtime_r.html> and |
|
+ <http://www.opengroup.org/susv3xsh/gmtime_r.html>. */ |
|
+# if 0 |
|
+# if GNULIB_PORTCHECK |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef localtime_r |
|
+# define localtime_r rpl_localtime_r |
|
+# endif |
|
+_GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, |
|
+ struct tm *restrict __result) |
|
+ _GL_ARG_NONNULL ((1, 2))); |
|
+_GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, |
|
+ struct tm *restrict __result)); |
|
+# else |
|
+# if ! 1 |
|
+_GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, |
|
+ struct tm *restrict __result) |
|
+ _GL_ARG_NONNULL ((1, 2))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, |
|
+ struct tm *restrict __result)); |
|
+# endif |
|
+# if 1 |
|
+_GL_CXXALIASWARN (localtime_r); |
|
+# endif |
|
+# if GNULIB_PORTCHECK |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef gmtime_r |
|
+# define gmtime_r rpl_gmtime_r |
|
+# endif |
|
+_GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, |
|
+ struct tm *restrict __result) |
|
+ _GL_ARG_NONNULL ((1, 2))); |
|
+_GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, |
|
+ struct tm *restrict __result)); |
|
+# else |
|
+# if ! 1 |
|
+_GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, |
|
+ struct tm *restrict __result) |
|
+ _GL_ARG_NONNULL ((1, 2))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, |
|
+ struct tm *restrict __result)); |
|
+# endif |
|
+# if 1 |
|
+_GL_CXXALIASWARN (gmtime_r); |
|
+# endif |
|
+# endif |
|
+ |
|
+/* Convert TIMER to RESULT, assuming local time and UTC respectively. See |
|
+ <http://www.opengroup.org/susv3xsh/localtime.html> and |
|
+ <http://www.opengroup.org/susv3xsh/gmtime.html>. */ |
|
+# if 1 |
|
+# if 0 |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef localtime |
|
+# define localtime rpl_localtime |
|
+# endif |
|
+_GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+_GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer)); |
|
+# else |
|
+_GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer)); |
|
+# endif |
|
+_GL_CXXALIASWARN (localtime); |
|
+# endif |
|
+ |
|
+# if 1 |
|
+# if 0 |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef gmtime |
|
+# define gmtime rpl_gmtime |
|
+# endif |
|
+_GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+_GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer)); |
|
+# else |
|
+_GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer)); |
|
+# endif |
|
+_GL_CXXALIASWARN (gmtime); |
|
+# endif |
|
+ |
|
+/* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store |
|
+ the resulting broken-down time into TM. See |
|
+ <http://www.opengroup.org/susv3xsh/strptime.html>. */ |
|
+# if 0 |
|
+# if ! 1 |
|
+_GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf, |
|
+ char const *restrict __format, |
|
+ struct tm *restrict __tm) |
|
+ _GL_ARG_NONNULL ((1, 2, 3))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf, |
|
+ char const *restrict __format, |
|
+ struct tm *restrict __tm)); |
|
+_GL_CXXALIASWARN (strptime); |
|
+# endif |
|
+ |
|
+/* Convert TM to a time_t value, assuming UTC. */ |
|
+# if 0 |
|
+# if GNULIB_PORTCHECK |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef timegm |
|
+# define timegm rpl_timegm |
|
+# endif |
|
+_GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); |
|
+_GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm)); |
|
+# else |
|
+# if ! 1 |
|
+_GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm)); |
|
+# endif |
|
+_GL_CXXALIASWARN (timegm); |
|
+# endif |
|
+ |
|
+/* Encourage applications to avoid unsafe functions that can overrun |
|
+ buffers when given outlandish struct tm values. Portable |
|
+ applications should use strftime (or even sprintf) instead. */ |
|
+# if defined GNULIB_POSIXCHECK |
|
+# undef asctime |
|
+_GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - " |
|
+ "better use strftime (or even sprintf) instead"); |
|
+# endif |
|
+# if defined GNULIB_POSIXCHECK |
|
+# undef asctime_r |
|
+_GL_WARN_ON_USE (asctime, "asctime_r can overrun buffers in some cases - " |
|
+ "better use strftime (or even sprintf) instead"); |
|
+# endif |
|
+# if defined GNULIB_POSIXCHECK |
|
+# undef ctime |
|
+_GL_WARN_ON_USE (asctime, "ctime can overrun buffers in some cases - " |
|
+ "better use strftime (or even sprintf) instead"); |
|
+# endif |
|
+# if defined GNULIB_POSIXCHECK |
|
+# undef ctime_r |
|
+_GL_WARN_ON_USE (asctime, "ctime_r can overrun buffers in some cases - " |
|
+ "better use strftime (or even sprintf) instead"); |
|
+# endif |
|
+ |
|
+#endif |
|
diff --git a/grub-core/gnulib/time.in.h b/grub-core/gnulib/time.in.h |
|
new file mode 100644 |
|
index 00000000000..81abdf46e0b |
|
--- /dev/null |
|
+++ b/grub-core/gnulib/time.in.h |
|
@@ -0,0 +1,274 @@ |
|
+/* A more-standard <time.h>. |
|
+ |
|
+ Copyright (C) 2007-2014 Free Software Foundation, Inc. |
|
+ |
|
+ This program is free software; you can redistribute it and/or modify |
|
+ it under the terms of the GNU General Public License as published by |
|
+ the Free Software Foundation; either version 3, or (at your option) |
|
+ any later version. |
|
+ |
|
+ This program is distributed in the hope that it will be useful, |
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
+ GNU General Public License for more details. |
|
+ |
|
+ You should have received a copy of the GNU General Public License |
|
+ along with this program; if not, see <http://www.gnu.org/licenses/>. */ |
|
+ |
|
+#if __GNUC__ >= 3 |
|
+@PRAGMA_SYSTEM_HEADER@ |
|
+#endif |
|
+@PRAGMA_COLUMNS@ |
|
+ |
|
+/* Don't get in the way of glibc when it includes time.h merely to |
|
+ declare a few standard symbols, rather than to declare all the |
|
+ symbols. Also, Solaris 8 <time.h> eventually includes itself |
|
+ recursively; if that is happening, just include the system <time.h> |
|
+ without adding our own declarations. */ |
|
+#if (defined __need_time_t || defined __need_clock_t \ |
|
+ || defined __need_timespec \ |
|
+ || defined _@GUARD_PREFIX@_TIME_H) |
|
+ |
|
+# @INCLUDE_NEXT@ @NEXT_TIME_H@ |
|
+ |
|
+#else |
|
+ |
|
+# define _@GUARD_PREFIX@_TIME_H |
|
+ |
|
+# @INCLUDE_NEXT@ @NEXT_TIME_H@ |
|
+ |
|
+/* NetBSD 5.0 mis-defines NULL. */ |
|
+# include <stddef.h> |
|
+ |
|
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ |
|
+ |
|
+/* The definition of _GL_ARG_NONNULL is copied here. */ |
|
+ |
|
+/* The definition of _GL_WARN_ON_USE is copied here. */ |
|
+ |
|
+/* Some systems don't define struct timespec (e.g., AIX 4.1, Ultrix 4.3). |
|
+ Or they define it with the wrong member names or define it in <sys/time.h> |
|
+ (e.g., FreeBSD circa 1997). Stock Mingw prior to 3.0 does not define it, |
|
+ but the pthreads-win32 library defines it in <pthread.h>. */ |
|
+# if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@ |
|
+# if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ |
|
+# include <sys/time.h> |
|
+# elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ |
|
+# include <pthread.h> |
|
+# else |
|
+ |
|
+# ifdef __cplusplus |
|
+extern "C" { |
|
+# endif |
|
+ |
|
+# if !GNULIB_defined_struct_timespec |
|
+# undef timespec |
|
+# define timespec rpl_timespec |
|
+struct timespec |
|
+{ |
|
+ time_t tv_sec; |
|
+ long int tv_nsec; |
|
+}; |
|
+# define GNULIB_defined_struct_timespec 1 |
|
+# endif |
|
+ |
|
+# ifdef __cplusplus |
|
+} |
|
+# endif |
|
+ |
|
+# endif |
|
+# endif |
|
+ |
|
+# if !GNULIB_defined_struct_time_t_must_be_integral |
|
+/* Per http://austingroupbugs.net/view.php?id=327, POSIX requires |
|
+ time_t to be an integer type, even though C99 permits floating |
|
+ point. We don't know of any implementation that uses floating |
|
+ point, and it is much easier to write code that doesn't have to |
|
+ worry about that corner case, so we force the issue. */ |
|
+struct __time_t_must_be_integral { |
|
+ unsigned int __floating_time_t_unsupported : (time_t) 1; |
|
+}; |
|
+# define GNULIB_defined_struct_time_t_must_be_integral 1 |
|
+# endif |
|
+ |
|
+/* Sleep for at least RQTP seconds unless interrupted, If interrupted, |
|
+ return -1 and store the remaining time into RMTP. See |
|
+ <http://www.opengroup.org/susv3xsh/nanosleep.html>. */ |
|
+# if @GNULIB_NANOSLEEP@ |
|
+# if @REPLACE_NANOSLEEP@ |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# define nanosleep rpl_nanosleep |
|
+# endif |
|
+_GL_FUNCDECL_RPL (nanosleep, int, |
|
+ (struct timespec const *__rqtp, struct timespec *__rmtp) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+_GL_CXXALIAS_RPL (nanosleep, int, |
|
+ (struct timespec const *__rqtp, struct timespec *__rmtp)); |
|
+# else |
|
+# if ! @HAVE_NANOSLEEP@ |
|
+_GL_FUNCDECL_SYS (nanosleep, int, |
|
+ (struct timespec const *__rqtp, struct timespec *__rmtp) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (nanosleep, int, |
|
+ (struct timespec const *__rqtp, struct timespec *__rmtp)); |
|
+# endif |
|
+_GL_CXXALIASWARN (nanosleep); |
|
+# endif |
|
+ |
|
+/* Return the 'time_t' representation of TP and normalize TP. */ |
|
+# if @GNULIB_MKTIME@ |
|
+# if @REPLACE_MKTIME@ |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# define mktime rpl_mktime |
|
+# endif |
|
+_GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1))); |
|
+_GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp)); |
|
+# else |
|
+_GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp)); |
|
+# endif |
|
+_GL_CXXALIASWARN (mktime); |
|
+# endif |
|
+ |
|
+/* Convert TIMER to RESULT, assuming local time and UTC respectively. See |
|
+ <http://www.opengroup.org/susv3xsh/localtime_r.html> and |
|
+ <http://www.opengroup.org/susv3xsh/gmtime_r.html>. */ |
|
+# if @GNULIB_TIME_R@ |
|
+# if @REPLACE_LOCALTIME_R@ |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef localtime_r |
|
+# define localtime_r rpl_localtime_r |
|
+# endif |
|
+_GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, |
|
+ struct tm *restrict __result) |
|
+ _GL_ARG_NONNULL ((1, 2))); |
|
+_GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, |
|
+ struct tm *restrict __result)); |
|
+# else |
|
+# if ! @HAVE_DECL_LOCALTIME_R@ |
|
+_GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, |
|
+ struct tm *restrict __result) |
|
+ _GL_ARG_NONNULL ((1, 2))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, |
|
+ struct tm *restrict __result)); |
|
+# endif |
|
+# if @HAVE_DECL_LOCALTIME_R@ |
|
+_GL_CXXALIASWARN (localtime_r); |
|
+# endif |
|
+# if @REPLACE_LOCALTIME_R@ |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef gmtime_r |
|
+# define gmtime_r rpl_gmtime_r |
|
+# endif |
|
+_GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, |
|
+ struct tm *restrict __result) |
|
+ _GL_ARG_NONNULL ((1, 2))); |
|
+_GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, |
|
+ struct tm *restrict __result)); |
|
+# else |
|
+# if ! @HAVE_DECL_LOCALTIME_R@ |
|
+_GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, |
|
+ struct tm *restrict __result) |
|
+ _GL_ARG_NONNULL ((1, 2))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, |
|
+ struct tm *restrict __result)); |
|
+# endif |
|
+# if @HAVE_DECL_LOCALTIME_R@ |
|
+_GL_CXXALIASWARN (gmtime_r); |
|
+# endif |
|
+# endif |
|
+ |
|
+/* Convert TIMER to RESULT, assuming local time and UTC respectively. See |
|
+ <http://www.opengroup.org/susv3xsh/localtime.html> and |
|
+ <http://www.opengroup.org/susv3xsh/gmtime.html>. */ |
|
+# if @GNULIB_GETTIMEOFDAY@ |
|
+# if @REPLACE_LOCALTIME@ |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef localtime |
|
+# define localtime rpl_localtime |
|
+# endif |
|
+_GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+_GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer)); |
|
+# else |
|
+_GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer)); |
|
+# endif |
|
+_GL_CXXALIASWARN (localtime); |
|
+# endif |
|
+ |
|
+# if @GNULIB_GETTIMEOFDAY@ |
|
+# if @REPLACE_GMTIME@ |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef gmtime |
|
+# define gmtime rpl_gmtime |
|
+# endif |
|
+_GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer) |
|
+ _GL_ARG_NONNULL ((1))); |
|
+_GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer)); |
|
+# else |
|
+_GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer)); |
|
+# endif |
|
+_GL_CXXALIASWARN (gmtime); |
|
+# endif |
|
+ |
|
+/* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store |
|
+ the resulting broken-down time into TM. See |
|
+ <http://www.opengroup.org/susv3xsh/strptime.html>. */ |
|
+# if @GNULIB_STRPTIME@ |
|
+# if ! @HAVE_STRPTIME@ |
|
+_GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf, |
|
+ char const *restrict __format, |
|
+ struct tm *restrict __tm) |
|
+ _GL_ARG_NONNULL ((1, 2, 3))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf, |
|
+ char const *restrict __format, |
|
+ struct tm *restrict __tm)); |
|
+_GL_CXXALIASWARN (strptime); |
|
+# endif |
|
+ |
|
+/* Convert TM to a time_t value, assuming UTC. */ |
|
+# if @GNULIB_TIMEGM@ |
|
+# if @REPLACE_TIMEGM@ |
|
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE) |
|
+# undef timegm |
|
+# define timegm rpl_timegm |
|
+# endif |
|
+_GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); |
|
+_GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm)); |
|
+# else |
|
+# if ! @HAVE_TIMEGM@ |
|
+_GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); |
|
+# endif |
|
+_GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm)); |
|
+# endif |
|
+_GL_CXXALIASWARN (timegm); |
|
+# endif |
|
+ |
|
+/* Encourage applications to avoid unsafe functions that can overrun |
|
+ buffers when given outlandish struct tm values. Portable |
|
+ applications should use strftime (or even sprintf) instead. */ |
|
+# if defined GNULIB_POSIXCHECK |
|
+# undef asctime |
|
+_GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - " |
|
+ "better use strftime (or even sprintf) instead"); |
|
+# endif |
|
+# if defined GNULIB_POSIXCHECK |
|
+# undef asctime_r |
|
+_GL_WARN_ON_USE (asctime, "asctime_r can overrun buffers in some cases - " |
|
+ "better use strftime (or even sprintf) instead"); |
|
+# endif |
|
+# if defined GNULIB_POSIXCHECK |
|
+# undef ctime |
|
+_GL_WARN_ON_USE (asctime, "ctime can overrun buffers in some cases - " |
|
+ "better use strftime (or even sprintf) instead"); |
|
+# endif |
|
+# if defined GNULIB_POSIXCHECK |
|
+# undef ctime_r |
|
+_GL_WARN_ON_USE (asctime, "ctime_r can overrun buffers in some cases - " |
|
+ "better use strftime (or even sprintf) instead"); |
|
+# endif |
|
+ |
|
+#endif |
|
diff --git a/include/grub/osdep/hostfile_aros.h b/include/grub/osdep/hostfile_aros.h |
|
index a059c0fa40a..161fbb7bdfd 100644 |
|
--- a/include/grub/osdep/hostfile_aros.h |
|
+++ b/include/grub/osdep/hostfile_aros.h |
|
@@ -68,6 +68,12 @@ grub_util_rename (const char *from, const char *to) |
|
return rename (from, to); |
|
} |
|
|
|
+static inline ssize_t |
|
+grub_util_readlink (const char *name, char *buf, size_t bufsize) |
|
+{ |
|
+ return readlink(name, buf, bufsize); |
|
+} |
|
+ |
|
#define grub_util_mkdir(a) mkdir ((a), 0755) |
|
|
|
struct grub_util_fd |
|
diff --git a/include/grub/osdep/hostfile_unix.h b/include/grub/osdep/hostfile_unix.h |
|
index 9ffe46fa3ca..17cd3aa8b30 100644 |
|
--- a/include/grub/osdep/hostfile_unix.h |
|
+++ b/include/grub/osdep/hostfile_unix.h |
|
@@ -71,6 +71,12 @@ grub_util_rename (const char *from, const char *to) |
|
return rename (from, to); |
|
} |
|
|
|
+static inline ssize_t |
|
+grub_util_readlink (const char *name, char *buf, size_t bufsize) |
|
+{ |
|
+ return readlink(name, buf, bufsize); |
|
+} |
|
+ |
|
#define grub_util_mkdir(a) mkdir ((a), 0755) |
|
|
|
#if defined (__NetBSD__) |
|
diff --git a/include/grub/osdep/hostfile_windows.h b/include/grub/osdep/hostfile_windows.h |
|
index bf6451b6db4..8c92d0591bb 100644 |
|
--- a/include/grub/osdep/hostfile_windows.h |
|
+++ b/include/grub/osdep/hostfile_windows.h |
|
@@ -41,6 +41,8 @@ typedef struct grub_util_fd_dir *grub_util_fd_dir_t; |
|
|
|
int |
|
grub_util_rename (const char *from, const char *to); |
|
+ssize_t |
|
+grub_util_readlink (const char *name, char *buf, size_t bufsize); |
|
int |
|
grub_util_unlink (const char *name); |
|
void |
|
diff --git a/grub-core/gnulib/Makefile.am b/grub-core/gnulib/Makefile.am |
|
index 3444397fe37..b7c5e60e1c3 100644 |
|
--- a/grub-core/gnulib/Makefile.am |
|
+++ b/grub-core/gnulib/Makefile.am |
|
@@ -21,7 +21,7 @@ |
|
# the same distribution terms as the rest of that program. |
|
# |
|
# Generated by gnulib-tool. |
|
-# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=grub-core/gnulib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files argp error fnmatch getdelim getline gettext progname regex |
|
+# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=grub-core/gnulib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files argp error fnmatch getdelim getline gettext progname readlink regex |
|
|
|
AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects |
|
|
|
@@ -326,6 +326,15 @@ libgnu_a_SOURCES += gettext.h |
|
|
|
## end gnulib module gettext-h |
|
|
|
+## begin gnulib module gettimeofday |
|
+ |
|
+ |
|
+EXTRA_DIST += gettimeofday.c |
|
+ |
|
+EXTRA_libgnu_a_SOURCES += gettimeofday.c |
|
+ |
|
+## end gnulib module gettimeofday |
|
+ |
|
## begin gnulib module havelib |
|
|
|
|
|
@@ -596,6 +605,13 @@ EXTRA_libgnu_a_SOURCES += nl_langinfo.c |
|
|
|
## end gnulib module nl_langinfo |
|
|
|
+## begin gnulib module pathmax |
|
+ |
|
+ |
|
+EXTRA_DIST += pathmax.h |
|
+ |
|
+## end gnulib module pathmax |
|
+ |
|
## begin gnulib module progname |
|
|
|
libgnu_a_SOURCES += progname.h progname.c |
|
@@ -611,6 +627,15 @@ EXTRA_libgnu_a_SOURCES += rawmemchr.c |
|
|
|
## end gnulib module rawmemchr |
|
|
|
+## begin gnulib module readlink |
|
+ |
|
+ |
|
+EXTRA_DIST += readlink.c |
|
+ |
|
+EXTRA_libgnu_a_SOURCES += readlink.c |
|
+ |
|
+## end gnulib module readlink |
|
+ |
|
## begin gnulib module realloc-posix |
|
|
|
|
|
@@ -725,6 +750,15 @@ EXTRA_DIST += $(top_srcdir)/build-aux/snippet/warn-on-use.h |
|
|
|
## end gnulib module snippet/warn-on-use |
|
|
|
+## begin gnulib module stat |
|
+ |
|
+ |
|
+EXTRA_DIST += stat.c |
|
+ |
|
+EXTRA_libgnu_a_SOURCES += stat.c |
|
+ |
|
+## end gnulib module stat |
|
+ |
|
## begin gnulib module stdalign |
|
|
|
BUILT_SOURCES += $(STDALIGN_H) |
|
@@ -1280,6 +1314,102 @@ libgnu_a_SOURCES += strnlen1.h strnlen1.c |
|
|
|
## end gnulib module strnlen1 |
|
|
|
+## begin gnulib module sys_stat |
|
+ |
|
+BUILT_SOURCES += sys/stat.h |
|
+ |
|
+# We need the following in order to create <sys/stat.h> when the system |
|
+# has one that is incomplete. |
|
+sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) |
|
+ $(AM_V_at)$(MKDIR_P) sys |
|
+ $(AM_V_GEN)rm -f $@-t $@ && \ |
|
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ |
|
+ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ |
|
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ |
|
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ |
|
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ |
|
+ -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ |
|
+ -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \ |
|
+ -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \ |
|
+ -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \ |
|
+ -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \ |
|
+ -e 's/@''GNULIB_FUTIMENS''@/$(GNULIB_FUTIMENS)/g' \ |
|
+ -e 's/@''GNULIB_LCHMOD''@/$(GNULIB_LCHMOD)/g' \ |
|
+ -e 's/@''GNULIB_LSTAT''@/$(GNULIB_LSTAT)/g' \ |
|
+ -e 's/@''GNULIB_MKDIRAT''@/$(GNULIB_MKDIRAT)/g' \ |
|
+ -e 's/@''GNULIB_MKFIFO''@/$(GNULIB_MKFIFO)/g' \ |
|
+ -e 's/@''GNULIB_MKFIFOAT''@/$(GNULIB_MKFIFOAT)/g' \ |
|
+ -e 's/@''GNULIB_MKNOD''@/$(GNULIB_MKNOD)/g' \ |
|
+ -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \ |
|
+ -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \ |
|
+ -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \ |
|
+ -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ |
|
+ -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ |
|
+ -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \ |
|
+ -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ |
|
+ -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ |
|
+ -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \ |
|
+ -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \ |
|
+ -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \ |
|
+ -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \ |
|
+ -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \ |
|
+ -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \ |
|
+ -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \ |
|
+ -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \ |
|
+ -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \ |
|
+ -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ |
|
+ -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ |
|
+ -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \ |
|
+ -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \ |
|
+ -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \ |
|
+ -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \ |
|
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ |
|
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ |
|
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ |
|
+ < $(srcdir)/sys_stat.in.h; \ |
|
+ } > $@-t && \ |
|
+ mv $@-t $@ |
|
+MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t |
|
+MOSTLYCLEANDIRS += sys |
|
+ |
|
+EXTRA_DIST += sys_stat.in.h |
|
+ |
|
+## end gnulib module sys_stat |
|
+ |
|
+## begin gnulib module sys_time |
|
+ |
|
+BUILT_SOURCES += sys/time.h |
|
+ |
|
+# We need the following in order to create <sys/time.h> when the system |
|
+# doesn't have one that works with the given compiler. |
|
+sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) |
|
+ $(AM_V_at)$(MKDIR_P) sys |
|
+ $(AM_V_GEN)rm -f $@-t $@ && \ |
|
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ |
|
+ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ |
|
+ -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \ |
|
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ |
|
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ |
|
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ |
|
+ -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ |
|
+ -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \ |
|
+ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ |
|
+ -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \ |
|
+ -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \ |
|
+ -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \ |
|
+ -e 's/@''REPLACE_STRUCT_TIMEVAL''@/$(REPLACE_STRUCT_TIMEVAL)/g' \ |
|
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ |
|
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ |
|
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ |
|
+ < $(srcdir)/sys_time.in.h; \ |
|
+ } > $@-t && \ |
|
+ mv $@-t $@ |
|
+MOSTLYCLEANFILES += sys/time.h sys/time.h-t |
|
+ |
|
+EXTRA_DIST += sys_time.in.h |
|
+ |
|
+## end gnulib module sys_time |
|
+ |
|
## begin gnulib module sys_types |
|
|
|
BUILT_SOURCES += sys/types.h |
|
@@ -1334,6 +1464,51 @@ EXTRA_DIST += sysexits.in.h |
|
|
|
## end gnulib module sysexits |
|
|
|
+## begin gnulib module time |
|
+ |
|
+BUILT_SOURCES += time.h |
|
+ |
|
+# We need the following in order to create <time.h> when the system |
|
+# doesn't have one that works with the given compiler. |
|
+time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) |
|
+ $(AM_V_GEN)rm -f $@-t $@ && \ |
|
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ |
|
+ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ |
|
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ |
|
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ |
|
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ |
|
+ -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ |
|
+ -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \ |
|
+ -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \ |
|
+ -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \ |
|
+ -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \ |
|
+ -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \ |
|
+ -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \ |
|
+ -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ |
|
+ -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ |
|
+ -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ |
|
+ -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ |
|
+ -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ |
|
+ -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ |
|
+ -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ |
|
+ -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ |
|
+ -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ |
|
+ -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ |
|
+ -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ |
|
+ -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ |
|
+ -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ |
|
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ |
|
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ |
|
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ |
|
+ < $(srcdir)/time.in.h; \ |
|
+ } > $@-t && \ |
|
+ mv $@-t $@ |
|
+MOSTLYCLEANFILES += time.h time.h-t |
|
+ |
|
+EXTRA_DIST += time.in.h |
|
+ |
|
+## end gnulib module time |
|
+ |
|
## begin gnulib module unistd |
|
|
|
BUILT_SOURCES += unistd.h |
|
diff --git a/m4/gettimeofday.m4 b/m4/gettimeofday.m4 |
|
new file mode 100644 |
|
index 00000000000..1c2d66ee261 |
|
--- /dev/null |
|
+++ b/m4/gettimeofday.m4 |
|
@@ -0,0 +1,138 @@ |
|
+# serial 21 |
|
+ |
|
+# Copyright (C) 2001-2003, 2005, 2007, 2009-2014 Free Software Foundation, Inc. |
|
+# This file is free software; the Free Software Foundation |
|
+# gives unlimited permission to copy and/or distribute it, |
|
+# with or without modifications, as long as this notice is preserved. |
|
+ |
|
+dnl From Jim Meyering. |
|
+ |
|
+AC_DEFUN([gl_FUNC_GETTIMEOFDAY], |
|
+[ |
|
+ AC_REQUIRE([AC_C_RESTRICT]) |
|
+ AC_REQUIRE([gl_HEADER_SYS_TIME_H]) |
|
+ AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) |
|
+ AC_CHECK_FUNCS_ONCE([gettimeofday]) |
|
+ |
|
+ gl_gettimeofday_timezone=void |
|
+ if test $ac_cv_func_gettimeofday != yes; then |
|
+ HAVE_GETTIMEOFDAY=0 |
|
+ else |
|
+ gl_FUNC_GETTIMEOFDAY_CLOBBER |
|
+ AC_CACHE_CHECK([for gettimeofday with POSIX signature], |
|
+ [gl_cv_func_gettimeofday_posix_signature], |
|
+ [AC_COMPILE_IFELSE( |
|
+ [AC_LANG_PROGRAM( |
|
+ [[#include <sys/time.h> |
|
+ struct timeval c; |
|
+ int gettimeofday (struct timeval *restrict, void *restrict); |
|
+ ]], |
|
+ [[/* glibc uses struct timezone * rather than the POSIX void * |
|
+ if _GNU_SOURCE is defined. However, since the only portable |
|
+ use of gettimeofday uses NULL as the second parameter, and |
|
+ since the glibc definition is actually more typesafe, it is |
|
+ not worth wrapping this to get a compliant signature. */ |
|
+ int (*f) (struct timeval *restrict, void *restrict) |
|
+ = gettimeofday; |
|
+ int x = f (&c, 0); |
|
+ return !(x | c.tv_sec | c.tv_usec); |
|
+ ]])], |
|
+ [gl_cv_func_gettimeofday_posix_signature=yes], |
|
+ [AC_COMPILE_IFELSE( |
|
+ [AC_LANG_PROGRAM( |
|
+ [[#include <sys/time.h> |
|
+int gettimeofday (struct timeval *restrict, struct timezone *restrict); |
|
+ ]])], |
|
+ [gl_cv_func_gettimeofday_posix_signature=almost], |
|
+ [gl_cv_func_gettimeofday_posix_signature=no])])]) |
|
+ if test $gl_cv_func_gettimeofday_posix_signature = almost; then |
|
+ gl_gettimeofday_timezone='struct timezone' |
|
+ elif test $gl_cv_func_gettimeofday_posix_signature != yes; then |
|
+ REPLACE_GETTIMEOFDAY=1 |
|
+ fi |
|
+ dnl If we override 'struct timeval', we also have to override gettimeofday. |
|
+ if test $REPLACE_STRUCT_TIMEVAL = 1; then |
|
+ REPLACE_GETTIMEOFDAY=1 |
|
+ fi |
|
+ m4_ifdef([gl_FUNC_TZSET_CLOBBER], [ |
|
+ gl_FUNC_TZSET_CLOBBER |
|
+ case "$gl_cv_func_tzset_clobber" in |
|
+ *yes) |
|
+ REPLACE_GETTIMEOFDAY=1 |
|
+ gl_GETTIMEOFDAY_REPLACE_LOCALTIME |
|
+ AC_DEFINE([tzset], [rpl_tzset], |
|
+ [Define to rpl_tzset if the wrapper function should be used.]) |
|
+ AC_DEFINE([TZSET_CLOBBERS_LOCALTIME], [1], |
|
+ [Define if tzset clobbers localtime's static buffer.]) |
|
+ ;; |
|
+ esac |
|
+ ]) |
|
+ fi |
|
+ AC_DEFINE_UNQUOTED([GETTIMEOFDAY_TIMEZONE], [$gl_gettimeofday_timezone], |
|
+ [Define this to 'void' or 'struct timezone' to match the system's |
|
+ declaration of the second argument to gettimeofday.]) |
|
+]) |
|
+ |
|
+ |
|
+dnl See if gettimeofday clobbers the static buffer that localtime uses |
|
+dnl for its return value. The gettimeofday function from Mac OS X 10.0.4 |
|
+dnl (i.e., Darwin 1.3.7) has this problem. |
|
+dnl |
|
+dnl If it does, then arrange to use gettimeofday and localtime only via |
|
+dnl the wrapper functions that work around the problem. |
|
+ |
|
+AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER], |
|
+[ |
|
+ AC_REQUIRE([gl_HEADER_SYS_TIME_H]) |
|
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles |
|
+ |
|
+ AC_CACHE_CHECK([whether gettimeofday clobbers localtime buffer], |
|
+ [gl_cv_func_gettimeofday_clobber], |
|
+ [AC_RUN_IFELSE( |
|
+ [AC_LANG_PROGRAM( |
|
+ [[#include <string.h> |
|
+ #include <sys/time.h> |
|
+ #include <time.h> |
|
+ #include <stdlib.h> |
|
+ ]], |
|
+ [[ |
|
+ time_t t = 0; |
|
+ struct tm *lt; |
|
+ struct tm saved_lt; |
|
+ struct timeval tv; |
|
+ lt = localtime (&t); |
|
+ saved_lt = *lt; |
|
+ gettimeofday (&tv, NULL); |
|
+ return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0; |
|
+ ]])], |
|
+ [gl_cv_func_gettimeofday_clobber=no], |
|
+ [gl_cv_func_gettimeofday_clobber=yes], |
|
+ [# When cross-compiling: |
|
+ case "$host_os" in |
|
+ # Guess all is fine on glibc systems. |
|
+ *-gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;; |
|
+ # If we don't know, assume the worst. |
|
+ *) gl_cv_func_gettimeofday_clobber="guessing yes" ;; |
|
+ esac |
|
+ ])]) |
|
+ |
|
+ case "$gl_cv_func_gettimeofday_clobber" in |
|
+ *yes) |
|
+ REPLACE_GETTIMEOFDAY=1 |
|
+ gl_GETTIMEOFDAY_REPLACE_LOCALTIME |
|
+ AC_DEFINE([GETTIMEOFDAY_CLOBBERS_LOCALTIME], [1], |
|
+ [Define if gettimeofday clobbers the localtime buffer.]) |
|
+ ;; |
|
+ esac |
|
+]) |
|
+ |
|
+AC_DEFUN([gl_GETTIMEOFDAY_REPLACE_LOCALTIME], [ |
|
+ REPLACE_GMTIME=1 |
|
+ REPLACE_LOCALTIME=1 |
|
+]) |
|
+ |
|
+# Prerequisites of lib/gettimeofday.c. |
|
+AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [ |
|
+ AC_CHECK_HEADERS([sys/timeb.h]) |
|
+ AC_CHECK_FUNCS([_ftime]) |
|
+]) |
|
diff --git a/m4/gnulib-cache.m4 b/m4/gnulib-cache.m4 |
|
index 408918440b6..ef2ec5bcce0 100644 |
|
--- a/m4/gnulib-cache.m4 |
|
+++ b/m4/gnulib-cache.m4 |
|
@@ -27,7 +27,7 @@ |
|
|
|
|
|
# Specification in the form of a command-line invocation: |
|
-# gnulib-tool --import --dir=. --lib=libgnu --source-base=grub-core/gnulib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files argp error fnmatch getdelim getline gettext progname regex |
|
+# gnulib-tool --import --dir=. --lib=libgnu --source-base=grub-core/gnulib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files argp error fnmatch getdelim getline gettext progname readlink regex |
|
|
|
# Specification in the form of a few gnulib-tool.m4 macro invocations: |
|
gl_LOCAL_DIR([]) |
|
@@ -39,6 +39,7 @@ gl_MODULES([ |
|
getline |
|
gettext |
|
progname |
|
+ readlink |
|
regex |
|
]) |
|
gl_AVOID([]) |
|
diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4 |
|
index 7a19f60d85e..66fd0eda901 100644 |
|
--- a/m4/gnulib-comp.m4 |
|
+++ b/m4/gnulib-comp.m4 |
|
@@ -60,10 +60,13 @@ AC_DEFUN([gl_EARLY], |
|
# Code from module getopt-posix: |
|
# Code from module gettext: |
|
# Code from module gettext-h: |
|
+ # Code from module gettimeofday: |
|
# Code from module havelib: |
|
# Code from module include_next: |
|
# Code from module intprops: |
|
# Code from module langinfo: |
|
+ # Code from module largefile: |
|
+ AC_REQUIRE([AC_SYS_LARGEFILE]) |
|
# Code from module localcharset: |
|
# Code from module locale: |
|
# Code from module localeconv: |
|
@@ -81,8 +84,10 @@ AC_DEFUN([gl_EARLY], |
|
# Code from module multiarch: |
|
# Code from module nl_langinfo: |
|
# Code from module nocrash: |
|
+ # Code from module pathmax: |
|
# Code from module progname: |
|
# Code from module rawmemchr: |
|
+ # Code from module readlink: |
|
# Code from module realloc-posix: |
|
# Code from module regex: |
|
# Code from module size_max: |
|
@@ -92,6 +97,7 @@ AC_DEFUN([gl_EARLY], |
|
# Code from module snippet/c++defs: |
|
# Code from module snippet/warn-on-use: |
|
# Code from module ssize_t: |
|
+ # Code from module stat: |
|
# Code from module stdalign: |
|
# Code from module stdbool: |
|
# Code from module stddef: |
|
@@ -108,8 +114,11 @@ AC_DEFUN([gl_EARLY], |
|
# Code from module strndup: |
|
# Code from module strnlen: |
|
# Code from module strnlen1: |
|
+ # Code from module sys_stat: |
|
+ # Code from module sys_time: |
|
# Code from module sys_types: |
|
# Code from module sysexits: |
|
+ # Code from module time: |
|
# Code from module unistd: |
|
# Code from module unitypes: |
|
# Code from module uniwidth/base: |
|
@@ -211,7 +220,14 @@ AC_DEFUN([gl_INIT], |
|
AM_GNU_GETTEXT_VERSION([0.18.1]) |
|
AC_SUBST([LIBINTL]) |
|
AC_SUBST([LTLIBINTL]) |
|
+ gl_FUNC_GETTIMEOFDAY |
|
+ if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then |
|
+ AC_LIBOBJ([gettimeofday]) |
|
+ gl_PREREQ_GETTIMEOFDAY |
|
+ fi |
|
+ gl_SYS_TIME_MODULE_INDICATOR([gettimeofday]) |
|
gl_LANGINFO_H |
|
+ AC_REQUIRE([gl_LARGEFILE]) |
|
gl_LOCALCHARSET |
|
LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\"" |
|
AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT]) |
|
@@ -284,6 +300,7 @@ AC_DEFUN([gl_INIT], |
|
AC_LIBOBJ([nl_langinfo]) |
|
fi |
|
gl_LANGINFO_MODULE_INDICATOR([nl_langinfo]) |
|
+ gl_PATHMAX |
|
AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>]) |
|
AC_CHECK_DECLS([program_invocation_short_name], [], [], [#include <errno.h>]) |
|
gl_FUNC_RAWMEMCHR |
|
@@ -292,6 +309,12 @@ AC_DEFUN([gl_INIT], |
|
gl_PREREQ_RAWMEMCHR |
|
fi |
|
gl_STRING_MODULE_INDICATOR([rawmemchr]) |
|
+ gl_FUNC_READLINK |
|
+ if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then |
|
+ AC_LIBOBJ([readlink]) |
|
+ gl_PREREQ_READLINK |
|
+ fi |
|
+ gl_UNISTD_MODULE_INDICATOR([readlink]) |
|
gl_FUNC_REALLOC_POSIX |
|
if test $REPLACE_REALLOC = 1; then |
|
AC_LIBOBJ([realloc]) |
|
@@ -309,6 +332,12 @@ AC_DEFUN([gl_INIT], |
|
fi |
|
gl_UNISTD_MODULE_INDICATOR([sleep]) |
|
gt_TYPE_SSIZE_T |
|
+ gl_FUNC_STAT |
|
+ if test $REPLACE_STAT = 1; then |
|
+ AC_LIBOBJ([stat]) |
|
+ gl_PREREQ_STAT |
|
+ fi |
|
+ gl_SYS_STAT_MODULE_INDICATOR([stat]) |
|
gl_STDALIGN_H |
|
AM_STDBOOL_H |
|
gl_STDDEF_H |
|
@@ -355,9 +384,14 @@ AC_DEFUN([gl_INIT], |
|
gl_PREREQ_STRNLEN |
|
fi |
|
gl_STRING_MODULE_INDICATOR([strnlen]) |
|
+ gl_HEADER_SYS_STAT_H |
|
+ AC_PROG_MKDIR_P |
|
+ gl_HEADER_SYS_TIME_H |
|
+ AC_PROG_MKDIR_P |
|
gl_SYS_TYPES_H |
|
AC_PROG_MKDIR_P |
|
gl_SYSEXITS |
|
+ gl_HEADER_TIME_H |
|
gl_UNISTD_H |
|
gl_LIBUNISTRING_LIBHEADER([0.9], [unitypes.h]) |
|
gl_LIBUNISTRING_LIBHEADER([0.9], [uniwidth.h]) |
|
@@ -562,6 +596,7 @@ AC_DEFUN([gl_FILE_LIST], [ |
|
lib/getopt1.c |
|
lib/getopt_int.h |
|
lib/gettext.h |
|
+ lib/gettimeofday.c |
|
lib/intprops.h |
|
lib/itold.c |
|
lib/langinfo.in.h |
|
@@ -587,6 +622,7 @@ AC_DEFUN([gl_FILE_LIST], [ |
|
lib/msvc-nothrow.c |
|
lib/msvc-nothrow.h |
|
lib/nl_langinfo.c |
|
+ lib/pathmax.h |
|
lib/printf-args.c |
|
lib/printf-args.h |
|
lib/printf-parse.c |
|
@@ -595,6 +631,7 @@ AC_DEFUN([gl_FILE_LIST], [ |
|
lib/progname.h |
|
lib/rawmemchr.c |
|
lib/rawmemchr.valgrind |
|
+ lib/readlink.c |
|
lib/realloc.c |
|
lib/ref-add.sin |
|
lib/ref-del.sin |
|
@@ -606,6 +643,7 @@ AC_DEFUN([gl_FILE_LIST], [ |
|
lib/regexec.c |
|
lib/size_max.h |
|
lib/sleep.c |
|
+ lib/stat.c |
|
lib/stdalign.in.h |
|
lib/stdbool.in.h |
|
lib/stddef.in.h |
|
@@ -627,8 +665,11 @@ AC_DEFUN([gl_FILE_LIST], [ |
|
lib/strnlen.c |
|
lib/strnlen1.c |
|
lib/strnlen1.h |
|
+ lib/sys_stat.in.h |
|
+ lib/sys_time.in.h |
|
lib/sys_types.in.h |
|
lib/sysexits.in.h |
|
+ lib/time.in.h |
|
lib/unistd.c |
|
lib/unistd.in.h |
|
lib/unitypes.in.h |
|
@@ -667,6 +708,7 @@ AC_DEFUN([gl_FILE_LIST], [ |
|
m4/getline.m4 |
|
m4/getopt.m4 |
|
m4/gettext.m4 |
|
+ m4/gettimeofday.m4 |
|
m4/glibc2.m4 |
|
m4/glibc21.m4 |
|
m4/gnulib-common.m4 |
|
@@ -681,6 +723,7 @@ AC_DEFUN([gl_FILE_LIST], [ |
|
m4/inttypes-pri.m4 |
|
m4/inttypes_h.m4 |
|
m4/langinfo_h.m4 |
|
+ m4/largefile.m4 |
|
m4/lcmessage.m4 |
|
m4/lib-ld.m4 |
|
m4/lib-link.m4 |
|
@@ -712,16 +755,19 @@ AC_DEFUN([gl_FILE_LIST], [ |
|
m4/nls.m4 |
|
m4/nocrash.m4 |
|
m4/off_t.m4 |
|
+ m4/pathmax.m4 |
|
m4/po.m4 |
|
m4/printf-posix.m4 |
|
m4/printf.m4 |
|
m4/progtest.m4 |
|
m4/rawmemchr.m4 |
|
+ m4/readlink.m4 |
|
m4/realloc.m4 |
|
m4/regex.m4 |
|
m4/size_max.m4 |
|
m4/sleep.m4 |
|
m4/ssize_t.m4 |
|
+ m4/stat.m4 |
|
m4/stdalign.m4 |
|
m4/stdbool.m4 |
|
m4/stddef_h.m4 |
|
@@ -737,9 +783,12 @@ AC_DEFUN([gl_FILE_LIST], [ |
|
m4/strndup.m4 |
|
m4/strnlen.m4 |
|
m4/sys_socket_h.m4 |
|
+ m4/sys_stat_h.m4 |
|
+ m4/sys_time_h.m4 |
|
m4/sys_types_h.m4 |
|
m4/sysexits.m4 |
|
m4/threadlib.m4 |
|
+ m4/time_h.m4 |
|
m4/uintmax_t.m4 |
|
m4/unistd_h.m4 |
|
m4/vasnprintf.m4 |
|
diff --git a/m4/largefile.m4 b/m4/largefile.m4 |
|
new file mode 100644 |
|
index 00000000000..a1b564ad9af |
|
--- /dev/null |
|
+++ b/m4/largefile.m4 |
|
@@ -0,0 +1,146 @@ |
|
+# Enable large files on systems where this is not the default. |
|
+ |
|
+# Copyright 1992-1996, 1998-2014 Free Software Foundation, Inc. |
|
+# This file is free software; the Free Software Foundation |
|
+# gives unlimited permission to copy and/or distribute it, |
|
+# with or without modifications, as long as this notice is preserved. |
|
+ |
|
+# The following implementation works around a problem in autoconf <= 2.69; |
|
+# AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5, |
|
+# or configures them incorrectly in some cases. |
|
+m4_version_prereq([2.70], [] ,[ |
|
+ |
|
+# _AC_SYS_LARGEFILE_TEST_INCLUDES |
|
+# ------------------------------- |
|
+m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES], |
|
+[@%:@include <sys/types.h> |
|
+ /* Check that off_t can represent 2**63 - 1 correctly. |
|
+ We can't simply define LARGE_OFF_T to be 9223372036854775807, |
|
+ since some C++ compilers masquerading as C compilers |
|
+ incorrectly reject 9223372036854775807. */ |
|
+@%:@define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) |
|
+ int off_t_is_large[[(LARGE_OFF_T % 2147483629 == 721 |
|
+ && LARGE_OFF_T % 2147483647 == 1) |
|
+ ? 1 : -1]];[]dnl |
|
+]) |
|
+ |
|
+ |
|
+# _AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, |
|
+# CACHE-VAR, |
|
+# DESCRIPTION, |
|
+# PROLOGUE, [FUNCTION-BODY]) |
|
+# -------------------------------------------------------- |
|
+m4_define([_AC_SYS_LARGEFILE_MACRO_VALUE], |
|
+[AC_CACHE_CHECK([for $1 value needed for large files], [$3], |
|
+[while :; do |
|
+ m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])( |
|
+ [AC_LANG_PROGRAM([$5], [$6])], |
|
+ [$3=no; break]) |
|
+ m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])( |
|
+ [AC_LANG_PROGRAM([@%:@define $1 $2 |
|
+$5], [$6])], |
|
+ [$3=$2; break]) |
|
+ $3=unknown |
|
+ break |
|
+done]) |
|
+case $$3 in #( |
|
+ no | unknown) ;; |
|
+ *) AC_DEFINE_UNQUOTED([$1], [$$3], [$4]);; |
|
+esac |
|
+rm -rf conftest*[]dnl |
|
+])# _AC_SYS_LARGEFILE_MACRO_VALUE |
|
+ |
|
+ |
|
+# AC_SYS_LARGEFILE |
|
+# ---------------- |
|
+# By default, many hosts won't let programs access large files; |
|
+# one must use special compiler options to get large-file access to work. |
|
+# For more details about this brain damage please see: |
|
+# http://www.unix-systems.org/version2/whatsnew/lfs20mar.html |
|
+AC_DEFUN([AC_SYS_LARGEFILE], |
|
+[AC_ARG_ENABLE(largefile, |
|
+ [ --disable-largefile omit support for large files]) |
|
+if test "$enable_largefile" != no; then |
|
+ |
|
+ AC_CACHE_CHECK([for special C compiler options needed for large files], |
|
+ ac_cv_sys_largefile_CC, |
|
+ [ac_cv_sys_largefile_CC=no |
|
+ if test "$GCC" != yes; then |
|
+ ac_save_CC=$CC |
|
+ while :; do |
|
+ # IRIX 6.2 and later do not support large files by default, |
|
+ # so use the C compiler's -n32 option if that helps. |
|
+ AC_LANG_CONFTEST([AC_LANG_PROGRAM([_AC_SYS_LARGEFILE_TEST_INCLUDES])]) |
|
+ AC_COMPILE_IFELSE([], [break]) |
|
+ CC="$CC -n32" |
|
+ AC_COMPILE_IFELSE([], [ac_cv_sys_largefile_CC=' -n32'; break]) |
|
+ break |
|
+ done |
|
+ CC=$ac_save_CC |
|
+ rm -f conftest.$ac_ext |
|
+ fi]) |
|
+ if test "$ac_cv_sys_largefile_CC" != no; then |
|
+ CC=$CC$ac_cv_sys_largefile_CC |
|
+ fi |
|
+ |
|
+ _AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64, |
|
+ ac_cv_sys_file_offset_bits, |
|
+ [Number of bits in a file offset, on hosts where this is settable.], |
|
+ [_AC_SYS_LARGEFILE_TEST_INCLUDES]) |
|
+ if test $ac_cv_sys_file_offset_bits = unknown; then |
|
+ _AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1, |
|
+ ac_cv_sys_large_files, |
|
+ [Define for large files, on AIX-style hosts.], |
|
+ [_AC_SYS_LARGEFILE_TEST_INCLUDES]) |
|
+ fi |
|
+ |
|
+ AC_DEFINE([_DARWIN_USE_64_BIT_INODE], [1], |
|
+ [Enable large inode numbers on Mac OS X 10.5.]) |
|
+fi |
|
+])# AC_SYS_LARGEFILE |
|
+])# m4_version_prereq 2.70 |
|
+ |
|
+# Enable large files on systems where this is implemented by Gnulib, not by the |
|
+# system headers. |
|
+# Set the variables WINDOWS_64_BIT_OFF_T, WINDOWS_64_BIT_ST_SIZE if Gnulib |
|
+# overrides ensure that off_t or 'struct size.st_size' are 64-bit, respectively. |
|
+AC_DEFUN([gl_LARGEFILE], |
|
+[ |
|
+ AC_REQUIRE([AC_CANONICAL_HOST]) |
|
+ case "$host_os" in |
|
+ mingw*) |
|
+ dnl Native Windows. |
|
+ dnl mingw64 defines off_t to a 64-bit type already, if |
|
+ dnl _FILE_OFFSET_BITS=64, which is ensured by AC_SYS_LARGEFILE. |
|
+ AC_CACHE_CHECK([for 64-bit off_t], [gl_cv_type_off_t_64], |
|
+ [AC_COMPILE_IFELSE( |
|
+ [AC_LANG_PROGRAM( |
|
+ [[#include <sys/types.h> |
|
+ int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1]; |
|
+ ]], |
|
+ [[]])], |
|
+ [gl_cv_type_off_t_64=yes], [gl_cv_type_off_t_64=no]) |
|
+ ]) |
|
+ if test $gl_cv_type_off_t_64 = no; then |
|
+ WINDOWS_64_BIT_OFF_T=1 |
|
+ else |
|
+ WINDOWS_64_BIT_OFF_T=0 |
|
+ fi |
|
+ dnl But all native Windows platforms (including mingw64) have a 32-bit |
|
+ dnl st_size member in 'struct stat'. |
|
+ WINDOWS_64_BIT_ST_SIZE=1 |
|
+ ;; |
|
+ *) |
|
+ dnl Nothing to do on gnulib's side. |
|
+ dnl A 64-bit off_t is |
|
+ dnl - already the default on Mac OS X, FreeBSD, NetBSD, OpenBSD, IRIX, |
|
+ dnl OSF/1, Cygwin, |
|
+ dnl - enabled by _FILE_OFFSET_BITS=64 (ensured by AC_SYS_LARGEFILE) on |
|
+ dnl glibc, HP-UX, Solaris, |
|
+ dnl - enabled by _LARGE_FILES=1 (ensured by AC_SYS_LARGEFILE) on AIX, |
|
+ dnl - impossible to achieve on Minix 3.1.8. |
|
+ WINDOWS_64_BIT_OFF_T=0 |
|
+ WINDOWS_64_BIT_ST_SIZE=0 |
|
+ ;; |
|
+ esac |
|
+]) |
|
diff --git a/m4/pathmax.m4 b/m4/pathmax.m4 |
|
new file mode 100644 |
|
index 00000000000..114f91f04b5 |
|
--- /dev/null |
|
+++ b/m4/pathmax.m4 |
|
@@ -0,0 +1,42 @@ |
|
+# pathmax.m4 serial 10 |
|
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2014 Free Software Foundation, |
|
+dnl Inc. |
|
+dnl This file is free software; the Free Software Foundation |
|
+dnl gives unlimited permission to copy and/or distribute it, |
|
+dnl with or without modifications, as long as this notice is preserved. |
|
+ |
|
+AC_DEFUN([gl_PATHMAX], |
|
+[ |
|
+ dnl Prerequisites of lib/pathmax.h. |
|
+ AC_CHECK_HEADERS_ONCE([sys/param.h]) |
|
+]) |
|
+ |
|
+# Expands to a piece of C program that defines PATH_MAX in the same way as |
|
+# "pathmax.h" will do. |
|
+AC_DEFUN([gl_PATHMAX_SNIPPET], [[ |
|
+/* Arrange to define PATH_MAX, like "pathmax.h" does. */ |
|
+#if HAVE_UNISTD_H |
|
+# include <unistd.h> |
|
+#endif |
|
+#include <limits.h> |
|
+#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN |
|
+# include <sys/param.h> |
|
+#endif |
|
+#if !defined PATH_MAX && defined MAXPATHLEN |
|
+# define PATH_MAX MAXPATHLEN |
|
+#endif |
|
+#ifdef __hpux |
|
+# undef PATH_MAX |
|
+# define PATH_MAX 1024 |
|
+#endif |
|
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ |
|
+# undef PATH_MAX |
|
+# define PATH_MAX 260 |
|
+#endif |
|
+]]) |
|
+ |
|
+# Prerequisites of gl_PATHMAX_SNIPPET. |
|
+AC_DEFUN([gl_PATHMAX_SNIPPET_PREREQ], |
|
+[ |
|
+ AC_CHECK_HEADERS_ONCE([unistd.h sys/param.h]) |
|
+]) |
|
diff --git a/m4/readlink.m4 b/m4/readlink.m4 |
|
new file mode 100644 |
|
index 00000000000..f9ce868c2e4 |
|
--- /dev/null |
|
+++ b/m4/readlink.m4 |
|
@@ -0,0 +1,71 @@ |
|
+# readlink.m4 serial 12 |
|
+dnl Copyright (C) 2003, 2007, 2009-2014 Free Software Foundation, Inc. |
|
+dnl This file is free software; the Free Software Foundation |
|
+dnl gives unlimited permission to copy and/or distribute it, |
|
+dnl with or without modifications, as long as this notice is preserved. |
|
+ |
|
+AC_DEFUN([gl_FUNC_READLINK], |
|
+[ |
|
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) |
|
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles |
|
+ AC_CHECK_FUNCS_ONCE([readlink]) |
|
+ if test $ac_cv_func_readlink = no; then |
|
+ HAVE_READLINK=0 |
|
+ else |
|
+ AC_CACHE_CHECK([whether readlink signature is correct], |
|
+ [gl_cv_decl_readlink_works], |
|
+ [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);]])], |
|
+ [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], |
|
+ [gl_cv_func_readlink_works], |
|
+ [# We have readlink, so assume ln -s works. |
|
+ ln -s conftest.no-such conftest.link |
|
+ ln -s conftest.link conftest.lnk2 |
|
+ AC_RUN_IFELSE( |
|
+ [AC_LANG_PROGRAM( |
|
+ [[#include <unistd.h> |
|
+]], [[char buf[20]; |
|
+ return readlink ("conftest.lnk2/", buf, sizeof buf) != -1;]])], |
|
+ [gl_cv_func_readlink_works=yes], [gl_cv_func_readlink_works=no], |
|
+ [case "$host_os" in |
|
+ # Guess yes on glibc systems. |
|
+ *-gnu*) gl_cv_func_readlink_works="guessing yes" ;; |
|
+ # If we don't know, assume the worst. |
|
+ *) gl_cv_func_readlink_works="guessing no" ;; |
|
+ esac |
|
+ ]) |
|
+ rm -f conftest.link conftest.lnk2]) |
|
+ case "$gl_cv_func_readlink_works" in |
|
+ *yes) |
|
+ if test "$gl_cv_decl_readlink_works" != yes; then |
|
+ REPLACE_READLINK=1 |
|
+ fi |
|
+ ;; |
|
+ *) |
|
+ AC_DEFINE([READLINK_TRAILING_SLASH_BUG], [1], [Define to 1 if readlink |
|
+ fails to recognize a trailing slash.]) |
|
+ REPLACE_READLINK=1 |
|
+ ;; |
|
+ esac |
|
+ fi |
|
+]) |
|
+ |
|
+# Like gl_FUNC_READLINK, except prepare for separate compilation |
|
+# (no REPLACE_READLINK, no AC_LIBOBJ). |
|
+AC_DEFUN([gl_FUNC_READLINK_SEPARATE], |
|
+[ |
|
+ AC_CHECK_FUNCS_ONCE([readlink]) |
|
+ gl_PREREQ_READLINK |
|
+]) |
|
+ |
|
+# Prerequisites of lib/readlink.c. |
|
+AC_DEFUN([gl_PREREQ_READLINK], |
|
+[ |
|
+ : |
|
+]) |
|
diff --git a/m4/stat.m4 b/m4/stat.m4 |
|
new file mode 100644 |
|
index 00000000000..1ae327b3684 |
|
--- /dev/null |
|
+++ b/m4/stat.m4 |
|
@@ -0,0 +1,71 @@ |
|
+# serial 11 |
|
+ |
|
+# Copyright (C) 2009-2014 Free Software Foundation, Inc. |
|
+# |
|
+# This file is free software; the Free Software Foundation |
|
+# gives unlimited permission to copy and/or distribute it, |
|
+# with or without modifications, as long as this notice is preserved. |
|
+ |
|
+AC_DEFUN([gl_FUNC_STAT], |
|
+[ |
|
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles |
|
+ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) |
|
+ AC_CHECK_FUNCS_ONCE([lstat]) |
|
+ dnl mingw is the only known platform where stat(".") and stat("./") differ |
|
+ AC_CACHE_CHECK([whether stat handles trailing slashes on directories], |
|
+ [gl_cv_func_stat_dir_slash], |
|
+ [AC_RUN_IFELSE( |
|
+ [AC_LANG_PROGRAM( |
|
+ [[#include <sys/stat.h> |
|
+]], [[struct stat st; return stat (".", &st) != stat ("./", &st);]])], |
|
+ [gl_cv_func_stat_dir_slash=yes], [gl_cv_func_stat_dir_slash=no], |
|
+ [case $host_os in |
|
+ mingw*) gl_cv_func_stat_dir_slash="guessing no";; |
|
+ *) gl_cv_func_stat_dir_slash="guessing yes";; |
|
+ esac])]) |
|
+ dnl AIX 7.1, Solaris 9, mingw64 mistakenly succeed on stat("file/"). |
|
+ dnl (For mingw, this is due to a broken stat() override in libmingwex.a.) |
|
+ dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/"). |
|
+ AC_CACHE_CHECK([whether stat handles trailing slashes on files], |
|
+ [gl_cv_func_stat_file_slash], |
|
+ [touch conftest.tmp |
|
+ # Assume that if we have lstat, we can also check symlinks. |
|
+ if test $ac_cv_func_lstat = yes; then |
|
+ ln -s conftest.tmp conftest.lnk |
|
+ fi |
|
+ AC_RUN_IFELSE( |
|
+ [AC_LANG_PROGRAM( |
|
+ [[#include <sys/stat.h> |
|
+]], [[int result = 0; |
|
+ struct stat st; |
|
+ if (!stat ("conftest.tmp/", &st)) |
|
+ result |= 1; |
|
+#if HAVE_LSTAT |
|
+ if (!stat ("conftest.lnk/", &st)) |
|
+ result |= 2; |
|
+#endif |
|
+ return result; |
|
+ ]])], |
|
+ [gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no], |
|
+ [case "$host_os" in |
|
+ # Guess yes on glibc systems. |
|
+ *-gnu*) gl_cv_func_stat_file_slash="guessing yes" ;; |
|
+ # If we don't know, assume the worst. |
|
+ *) gl_cv_func_stat_file_slash="guessing no" ;; |
|
+ esac |
|
+ ]) |
|
+ rm -f conftest.tmp conftest.lnk]) |
|
+ case $gl_cv_func_stat_dir_slash in |
|
+ *no) REPLACE_STAT=1 |
|
+ AC_DEFINE([REPLACE_FUNC_STAT_DIR], [1], [Define to 1 if stat needs |
|
+ help when passed a directory name with a trailing slash]);; |
|
+ esac |
|
+ case $gl_cv_func_stat_file_slash in |
|
+ *no) REPLACE_STAT=1 |
|
+ AC_DEFINE([REPLACE_FUNC_STAT_FILE], [1], [Define to 1 if stat needs |
|
+ help when passed a file name with a trailing slash]);; |
|
+ esac |
|
+]) |
|
+ |
|
+# Prerequisites of lib/stat.c. |
|
+AC_DEFUN([gl_PREREQ_STAT], [:]) |
|
diff --git a/m4/sys_stat_h.m4 b/m4/sys_stat_h.m4 |
|
new file mode 100644 |
|
index 00000000000..eaa7642ba31 |
|
--- /dev/null |
|
+++ b/m4/sys_stat_h.m4 |
|
@@ -0,0 +1,96 @@ |
|
+# sys_stat_h.m4 serial 28 -*- Autoconf -*- |
|
+dnl Copyright (C) 2006-2014 Free Software Foundation, Inc. |
|
+dnl This file is free software; the Free Software Foundation |
|
+dnl gives unlimited permission to copy and/or distribute it, |
|
+dnl with or without modifications, as long as this notice is preserved. |
|
+ |
|
+dnl From Eric Blake. |
|
+dnl Provide a GNU-like <sys/stat.h>. |
|
+ |
|
+AC_DEFUN([gl_HEADER_SYS_STAT_H], |
|
+[ |
|
+ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) |
|
+ |
|
+ dnl Check for broken stat macros. |
|
+ AC_REQUIRE([AC_HEADER_STAT]) |
|
+ |
|
+ gl_CHECK_NEXT_HEADERS([sys/stat.h]) |
|
+ |
|
+ dnl Ensure the type mode_t gets defined. |
|
+ AC_REQUIRE([AC_TYPE_MODE_T]) |
|
+ |
|
+ dnl Whether to override 'struct stat'. |
|
+ m4_ifdef([gl_LARGEFILE], [ |
|
+ AC_REQUIRE([gl_LARGEFILE]) |
|
+ ], [ |
|
+ WINDOWS_64_BIT_ST_SIZE=0 |
|
+ ]) |
|
+ AC_SUBST([WINDOWS_64_BIT_ST_SIZE]) |
|
+ if test $WINDOWS_64_BIT_ST_SIZE = 1; then |
|
+ AC_DEFINE([_GL_WINDOWS_64_BIT_ST_SIZE], [1], |
|
+ [Define to 1 if Gnulib overrides 'struct stat' on Windows so that |
|
+ struct stat.st_size becomes 64-bit.]) |
|
+ fi |
|
+ |
|
+ dnl Define types that are supposed to be defined in <sys/types.h> or |
|
+ dnl <sys/stat.h>. |
|
+ AC_CHECK_TYPE([nlink_t], [], |
|
+ [AC_DEFINE([nlink_t], [int], |
|
+ [Define to the type of st_nlink in struct stat, or a supertype.])], |
|
+ [#include <sys/types.h> |
|
+ #include <sys/stat.h>]) |
|
+ |
|
+ dnl Check for declarations of anything we want to poison if the |
|
+ dnl corresponding gnulib module is not in use. |
|
+ gl_WARN_ON_USE_PREPARE([[#include <sys/stat.h> |
|
+ ]], [fchmodat fstat fstatat futimens lchmod lstat mkdirat mkfifo mkfifoat |
|
+ mknod mknodat stat utimensat]) |
|
+]) # gl_HEADER_SYS_STAT_H |
|
+ |
|
+AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR], |
|
+[ |
|
+ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. |
|
+ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) |
|
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1]) |
|
+ dnl Define it also as a C macro, for the benefit of the unit tests. |
|
+ gl_MODULE_INDICATOR_FOR_TESTS([$1]) |
|
+]) |
|
+ |
|
+AC_DEFUN([gl_SYS_STAT_H_DEFAULTS], |
|
+[ |
|
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl for REPLACE_FCHDIR |
|
+ GNULIB_FCHMODAT=0; AC_SUBST([GNULIB_FCHMODAT]) |
|
+ GNULIB_FSTAT=0; AC_SUBST([GNULIB_FSTAT]) |
|
+ GNULIB_FSTATAT=0; AC_SUBST([GNULIB_FSTATAT]) |
|
+ GNULIB_FUTIMENS=0; AC_SUBST([GNULIB_FUTIMENS]) |
|
+ GNULIB_LCHMOD=0; AC_SUBST([GNULIB_LCHMOD]) |
|
+ GNULIB_LSTAT=0; AC_SUBST([GNULIB_LSTAT]) |
|
+ GNULIB_MKDIRAT=0; AC_SUBST([GNULIB_MKDIRAT]) |
|
+ GNULIB_MKFIFO=0; AC_SUBST([GNULIB_MKFIFO]) |
|
+ GNULIB_MKFIFOAT=0; AC_SUBST([GNULIB_MKFIFOAT]) |
|
+ GNULIB_MKNOD=0; AC_SUBST([GNULIB_MKNOD]) |
|
+ GNULIB_MKNODAT=0; AC_SUBST([GNULIB_MKNODAT]) |
|
+ GNULIB_STAT=0; AC_SUBST([GNULIB_STAT]) |
|
+ GNULIB_UTIMENSAT=0; AC_SUBST([GNULIB_UTIMENSAT]) |
|
+ dnl Assume proper GNU behavior unless another module says otherwise. |
|
+ HAVE_FCHMODAT=1; AC_SUBST([HAVE_FCHMODAT]) |
|
+ HAVE_FSTATAT=1; AC_SUBST([HAVE_FSTATAT]) |
|
+ HAVE_FUTIMENS=1; AC_SUBST([HAVE_FUTIMENS]) |
|
+ HAVE_LCHMOD=1; AC_SUBST([HAVE_LCHMOD]) |
|
+ HAVE_LSTAT=1; AC_SUBST([HAVE_LSTAT]) |
|
+ HAVE_MKDIRAT=1; AC_SUBST([HAVE_MKDIRAT]) |
|
+ HAVE_MKFIFO=1; AC_SUBST([HAVE_MKFIFO]) |
|
+ HAVE_MKFIFOAT=1; AC_SUBST([HAVE_MKFIFOAT]) |
|
+ HAVE_MKNOD=1; AC_SUBST([HAVE_MKNOD]) |
|
+ HAVE_MKNODAT=1; AC_SUBST([HAVE_MKNODAT]) |
|
+ HAVE_UTIMENSAT=1; AC_SUBST([HAVE_UTIMENSAT]) |
|
+ REPLACE_FSTAT=0; AC_SUBST([REPLACE_FSTAT]) |
|
+ REPLACE_FSTATAT=0; AC_SUBST([REPLACE_FSTATAT]) |
|
+ REPLACE_FUTIMENS=0; AC_SUBST([REPLACE_FUTIMENS]) |
|
+ REPLACE_LSTAT=0; AC_SUBST([REPLACE_LSTAT]) |
|
+ REPLACE_MKDIR=0; AC_SUBST([REPLACE_MKDIR]) |
|
+ REPLACE_MKFIFO=0; AC_SUBST([REPLACE_MKFIFO]) |
|
+ REPLACE_MKNOD=0; AC_SUBST([REPLACE_MKNOD]) |
|
+ REPLACE_STAT=0; AC_SUBST([REPLACE_STAT]) |
|
+ REPLACE_UTIMENSAT=0; AC_SUBST([REPLACE_UTIMENSAT]) |
|
+]) |
|
diff --git a/m4/sys_time_h.m4 b/m4/sys_time_h.m4 |
|
new file mode 100644 |
|
index 00000000000..5c79300f8ec |
|
--- /dev/null |
|
+++ b/m4/sys_time_h.m4 |
|
@@ -0,0 +1,110 @@ |
|
+# Configure a replacement for <sys/time.h>. |
|
+# serial 8 |
|
+ |
|
+# Copyright (C) 2007, 2009-2014 Free Software Foundation, Inc. |
|
+# This file is free software; the Free Software Foundation |
|
+# gives unlimited permission to copy and/or distribute it, |
|
+# with or without modifications, as long as this notice is preserved. |
|
+ |
|
+# Written by Paul Eggert and Martin Lambers. |
|
+ |
|
+AC_DEFUN([gl_HEADER_SYS_TIME_H], |
|
+[ |
|
+ dnl Use AC_REQUIRE here, so that the REPLACE_GETTIMEOFDAY=0 statement |
|
+ dnl below is expanded once only, before all REPLACE_GETTIMEOFDAY=1 |
|
+ dnl statements that occur in other macros. |
|
+ AC_REQUIRE([gl_HEADER_SYS_TIME_H_BODY]) |
|
+]) |
|
+ |
|
+AC_DEFUN([gl_HEADER_SYS_TIME_H_BODY], |
|
+[ |
|
+ AC_REQUIRE([AC_C_RESTRICT]) |
|
+ AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) |
|
+ AC_CHECK_HEADERS_ONCE([sys/time.h]) |
|
+ gl_CHECK_NEXT_HEADERS([sys/time.h]) |
|
+ |
|
+ if test $ac_cv_header_sys_time_h != yes; then |
|
+ HAVE_SYS_TIME_H=0 |
|
+ fi |
|
+ |
|
+ dnl On native Windows with MSVC, 'struct timeval' is defined in <winsock2.h> |
|
+ dnl only. So include that header in the list. |
|
+ gl_PREREQ_SYS_H_WINSOCK2 |
|
+ AC_CACHE_CHECK([for struct timeval], [gl_cv_sys_struct_timeval], |
|
+ [AC_COMPILE_IFELSE( |
|
+ [AC_LANG_PROGRAM( |
|
+ [[#if HAVE_SYS_TIME_H |
|
+ #include <sys/time.h> |
|
+ #endif |
|
+ #include <time.h> |
|
+ #if HAVE_WINSOCK2_H |
|
+ # include <winsock2.h> |
|
+ #endif |
|
+ ]], |
|
+ [[static struct timeval x; x.tv_sec = x.tv_usec;]])], |
|
+ [gl_cv_sys_struct_timeval=yes], |
|
+ [gl_cv_sys_struct_timeval=no]) |
|
+ ]) |
|
+ if test $gl_cv_sys_struct_timeval != yes; then |
|
+ HAVE_STRUCT_TIMEVAL=0 |
|
+ else |
|
+ dnl On native Windows with a 64-bit 'time_t', 'struct timeval' is defined |
|
+ dnl (in <sys/time.h> and <winsock2.h> for mingw64, in <winsock2.h> only |
|
+ dnl for MSVC) with a tv_sec field of type 'long' (32-bit!), which is |
|
+ dnl smaller than the 'time_t' type mandated by POSIX. |
|
+ dnl On OpenBSD 5.1 amd64, tv_sec is 64 bits and time_t 32 bits, but |
|
+ dnl that is good enough. |
|
+ AC_CACHE_CHECK([for wide-enough struct timeval.tv_sec member], |
|
+ [gl_cv_sys_struct_timeval_tv_sec], |
|
+ [AC_COMPILE_IFELSE( |
|
+ [AC_LANG_PROGRAM( |
|
+ [[#if HAVE_SYS_TIME_H |
|
+ #include <sys/time.h> |
|
+ #endif |
|
+ #include <time.h> |
|
+ #if HAVE_WINSOCK2_H |
|
+ # include <winsock2.h> |
|
+ #endif |
|
+ ]], |
|
+ [[static struct timeval x; |
|
+ typedef int verify_tv_sec_type[ |
|
+ sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1 |
|
+ ]; |
|
+ ]])], |
|
+ [gl_cv_sys_struct_timeval_tv_sec=yes], |
|
+ [gl_cv_sys_struct_timeval_tv_sec=no]) |
|
+ ]) |
|
+ if test $gl_cv_sys_struct_timeval_tv_sec != yes; then |
|
+ REPLACE_STRUCT_TIMEVAL=1 |
|
+ fi |
|
+ fi |
|
+ |
|
+ dnl Check for declarations of anything we want to poison if the |
|
+ dnl corresponding gnulib module is not in use. |
|
+ gl_WARN_ON_USE_PREPARE([[ |
|
+#if HAVE_SYS_TIME_H |
|
+# include <sys/time.h> |
|
+#endif |
|
+#include <time.h> |
|
+ ]], [gettimeofday]) |
|
+]) |
|
+ |
|
+AC_DEFUN([gl_SYS_TIME_MODULE_INDICATOR], |
|
+[ |
|
+ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. |
|
+ AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) |
|
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1]) |
|
+ dnl Define it also as a C macro, for the benefit of the unit tests. |
|
+ gl_MODULE_INDICATOR_FOR_TESTS([$1]) |
|
+]) |
|
+ |
|
+AC_DEFUN([gl_HEADER_SYS_TIME_H_DEFAULTS], |
|
+[ |
|
+ GNULIB_GETTIMEOFDAY=0; AC_SUBST([GNULIB_GETTIMEOFDAY]) |
|
+ dnl Assume POSIX behavior unless another module says otherwise. |
|
+ HAVE_GETTIMEOFDAY=1; AC_SUBST([HAVE_GETTIMEOFDAY]) |
|
+ HAVE_STRUCT_TIMEVAL=1; AC_SUBST([HAVE_STRUCT_TIMEVAL]) |
|
+ HAVE_SYS_TIME_H=1; AC_SUBST([HAVE_SYS_TIME_H]) |
|
+ REPLACE_GETTIMEOFDAY=0; AC_SUBST([REPLACE_GETTIMEOFDAY]) |
|
+ REPLACE_STRUCT_TIMEVAL=0; AC_SUBST([REPLACE_STRUCT_TIMEVAL]) |
|
+]) |
|
diff --git a/m4/time_h.m4 b/m4/time_h.m4 |
|
new file mode 100644 |
|
index 00000000000..9852778f9a5 |
|
--- /dev/null |
|
+++ b/m4/time_h.m4 |
|
@@ -0,0 +1,118 @@ |
|
+# Configure a more-standard replacement for <time.h>. |
|
+ |
|
+# Copyright (C) 2000-2001, 2003-2007, 2009-2014 Free Software Foundation, Inc. |
|
+ |
|
+# serial 8 |
|
+ |
|
+# This file is free software; the Free Software Foundation |
|
+# gives unlimited permission to copy and/or distribute it, |
|
+# with or without modifications, as long as this notice is preserved. |
|
+ |
|
+# Written by Paul Eggert and Jim Meyering. |
|
+ |
|
+AC_DEFUN([gl_HEADER_TIME_H], |
|
+[ |
|
+ dnl Use AC_REQUIRE here, so that the default behavior below is expanded |
|
+ dnl once only, before all statements that occur in other macros. |
|
+ AC_REQUIRE([gl_HEADER_TIME_H_BODY]) |
|
+]) |
|
+ |
|
+AC_DEFUN([gl_HEADER_TIME_H_BODY], |
|
+[ |
|
+ AC_REQUIRE([AC_C_RESTRICT]) |
|
+ AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) |
|
+ gl_NEXT_HEADERS([time.h]) |
|
+ AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) |
|
+]) |
|
+ |
|
+dnl Check whether 'struct timespec' is declared |
|
+dnl in time.h, sys/time.h, or pthread.h. |
|
+ |
|
+AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC], |
|
+[ |
|
+ AC_CHECK_HEADERS_ONCE([sys/time.h]) |
|
+ AC_CACHE_CHECK([for struct timespec in <time.h>], |
|
+ [gl_cv_sys_struct_timespec_in_time_h], |
|
+ [AC_COMPILE_IFELSE( |
|
+ [AC_LANG_PROGRAM( |
|
+ [[#include <time.h> |
|
+ ]], |
|
+ [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], |
|
+ [gl_cv_sys_struct_timespec_in_time_h=yes], |
|
+ [gl_cv_sys_struct_timespec_in_time_h=no])]) |
|
+ |
|
+ TIME_H_DEFINES_STRUCT_TIMESPEC=0 |
|
+ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 |
|
+ PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 |
|
+ if test $gl_cv_sys_struct_timespec_in_time_h = yes; then |
|
+ TIME_H_DEFINES_STRUCT_TIMESPEC=1 |
|
+ else |
|
+ AC_CACHE_CHECK([for struct timespec in <sys/time.h>], |
|
+ [gl_cv_sys_struct_timespec_in_sys_time_h], |
|
+ [AC_COMPILE_IFELSE( |
|
+ [AC_LANG_PROGRAM( |
|
+ [[#include <sys/time.h> |
|
+ ]], |
|
+ [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], |
|
+ [gl_cv_sys_struct_timespec_in_sys_time_h=yes], |
|
+ [gl_cv_sys_struct_timespec_in_sys_time_h=no])]) |
|
+ if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then |
|
+ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 |
|
+ else |
|
+ AC_CACHE_CHECK([for struct timespec in <pthread.h>], |
|
+ [gl_cv_sys_struct_timespec_in_pthread_h], |
|
+ [AC_COMPILE_IFELSE( |
|
+ [AC_LANG_PROGRAM( |
|
+ [[#include <pthread.h> |
|
+ ]], |
|
+ [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], |
|
+ [gl_cv_sys_struct_timespec_in_pthread_h=yes], |
|
+ [gl_cv_sys_struct_timespec_in_pthread_h=no])]) |
|
+ if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then |
|
+ PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 |
|
+ fi |
|
+ fi |
|
+ fi |
|
+ AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC]) |
|
+ AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC]) |
|
+ AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC]) |
|
+]) |
|
+ |
|
+AC_DEFUN([gl_TIME_MODULE_INDICATOR], |
|
+[ |
|
+ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. |
|
+ AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) |
|
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1]) |
|
+ dnl Define it also as a C macro, for the benefit of the unit tests. |
|
+ gl_MODULE_INDICATOR_FOR_TESTS([$1]) |
|
+]) |
|
+ |
|
+AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS], |
|
+[ |
|
+ GNULIB_MKTIME=0; AC_SUBST([GNULIB_MKTIME]) |
|
+ GNULIB_NANOSLEEP=0; AC_SUBST([GNULIB_NANOSLEEP]) |
|
+ GNULIB_STRPTIME=0; AC_SUBST([GNULIB_STRPTIME]) |
|
+ GNULIB_TIMEGM=0; AC_SUBST([GNULIB_TIMEGM]) |
|
+ GNULIB_TIME_R=0; AC_SUBST([GNULIB_TIME_R]) |
|
+ dnl Assume proper GNU behavior unless another module says otherwise. |
|
+ HAVE_DECL_LOCALTIME_R=1; AC_SUBST([HAVE_DECL_LOCALTIME_R]) |
|
+ HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP]) |
|
+ HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME]) |
|
+ HAVE_TIMEGM=1; AC_SUBST([HAVE_TIMEGM]) |
|
+ dnl If another module says to replace or to not replace, do that. |
|
+ dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK; |
|
+ dnl this lets maintainers check for portability. |
|
+ REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; AC_SUBST([REPLACE_LOCALTIME_R]) |
|
+ REPLACE_MKTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_MKTIME]) |
|
+ REPLACE_NANOSLEEP=GNULIB_PORTCHECK; AC_SUBST([REPLACE_NANOSLEEP]) |
|
+ REPLACE_TIMEGM=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TIMEGM]) |
|
+ |
|
+ dnl Hack so that the time module doesn't depend on the sys_time module. |
|
+ dnl First, default GNULIB_GETTIMEOFDAY to 0 if sys_time is absent. |
|
+ : ${GNULIB_GETTIMEOFDAY=0}; AC_SUBST([GNULIB_GETTIMEOFDAY]) |
|
+ dnl Second, it's OK to not use GNULIB_PORTCHECK for REPLACE_GMTIME |
|
+ dnl and REPLACE_LOCALTIME, as portability to Solaris 2.6 and earlier |
|
+ dnl is no longer a big deal. |
|
+ REPLACE_GMTIME=0; AC_SUBST([REPLACE_GMTIME]) |
|
+ REPLACE_LOCALTIME=0; AC_SUBST([REPLACE_LOCALTIME]) |
|
+])
|
|
|