aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorChet Ramey <chet.ramey@case.edu>2014-02-26 09:36:43 -0500
committerChet Ramey <chet.ramey@case.edu>2014-02-26 09:36:43 -0500
commitac50fbac377e32b98d2de396f016ea81e8ee9961 (patch)
treef71882366b98fedf1a88a063103219a4935de926 /include
parent4539d736f1aff232857a854fd2a68df0c98d9f34 (diff)
downloadandroid_external_bash-ac50fbac377e32b98d2de396f016ea81e8ee9961.tar.gz
android_external_bash-ac50fbac377e32b98d2de396f016ea81e8ee9961.tar.bz2
android_external_bash-ac50fbac377e32b98d2de396f016ea81e8ee9961.zip
Bash-4.3 distribution sources and documentation
Diffstat (limited to 'include')
-rw-r--r--include/chartypes.h2
-rw-r--r--include/posixdir.h14
-rw-r--r--include/posixjmp.h2
-rw-r--r--include/shmbutil.h22
-rw-r--r--include/stat-time.h214
-rw-r--r--include/stdc.h5
-rw-r--r--include/systimes.h2
-rw-r--r--include/typemax.h4
8 files changed, 249 insertions, 16 deletions
diff --git a/include/chartypes.h b/include/chartypes.h
index 77bcad9..c708018 100644
--- a/include/chartypes.h
+++ b/include/chartypes.h
@@ -35,7 +35,7 @@
eliminate the && through constant folding."
Solaris defines some of these symbols so we must undefine them first. */
-#if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
+#if STDC_HEADERS || (!defined (isascii) && !HAVE_ISASCII)
# define IN_CTYPE_DOMAIN(c) 1
#else
# define IN_CTYPE_DOMAIN(c) isascii(c)
diff --git a/include/posixdir.h b/include/posixdir.h
index bd33694..0921c5d 100644
--- a/include/posixdir.h
+++ b/include/posixdir.h
@@ -1,6 +1,6 @@
/* posixdir.h -- Posix directory reading includes and defines. */
-/* Copyright (C) 1987,1991 Free Software Foundation, Inc.
+/* Copyright (C) 1987,1991,2012 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
@@ -46,16 +46,26 @@
# define D_NAMLEN(d) ((d)->d_namlen)
#endif /* !HAVE_DIRENT_H */
+/* The bash code fairly consistenly uses d_fileno; make sure it's available */
#if defined (HAVE_STRUCT_DIRENT_D_INO) && !defined (HAVE_STRUCT_DIRENT_D_FILENO)
# define d_fileno d_ino
#endif
-#if defined (_POSIX_SOURCE) && (!defined (HAVE_STRUCT_DIRENT_D_INO) || defined (BROKEN_DIRENT_D_INO))
/* Posix does not require that the d_ino field be present, and some
systems do not provide it. */
+#if !defined (HAVE_STRUCT_DIRENT_D_INO) || defined (BROKEN_DIRENT_D_INO)
# define REAL_DIR_ENTRY(dp) 1
#else
# define REAL_DIR_ENTRY(dp) (dp->d_ino != 0)
#endif /* _POSIX_SOURCE */
+#if defined (HAVE_STRUCT_DIRENT_D_INO) && !defined (BROKEN_DIRENT_D_INO)
+# define D_INO_AVAILABLE
+#endif
+
+/* Signal the rest of the code that it can safely use dirent.d_fileno */
+#if defined (D_INO_AVAILABLE) || defined (HAVE_STRUCT_DIRENT_D_FILENO)
+# define D_FILENO_AVAILABLE 1
+#endif
+
#endif /* !_POSIXDIR_H_ */
diff --git a/include/posixjmp.h b/include/posixjmp.h
index 49bfecf..98cf718 100644
--- a/include/posixjmp.h
+++ b/include/posixjmp.h
@@ -30,11 +30,13 @@
# if !defined (__OPENNT)
# undef setjmp
# define setjmp(x) sigsetjmp((x), 1)
+# define setjmp_nosigs(x) sigsetjmp((x), 0)
# undef longjmp
# define longjmp(x, n) siglongjmp((x), (n))
# endif /* !__OPENNT */
#else
# define procenv_t jmp_buf
+# define setjmp_nosigs setjmp
#endif
#endif /* _POSIXJMP_H_ */
diff --git a/include/shmbutil.h b/include/shmbutil.h
index e349e6f..afb381a 100644
--- a/include/shmbutil.h
+++ b/include/shmbutil.h
@@ -36,6 +36,8 @@ extern size_t mbstrlen __P((const char *));
extern char *xstrchr __P((const char *, int));
+extern int locale_mb_cur_max; /* XXX */
+
#ifndef MB_INVALIDCH
#define MB_INVALIDCH(x) ((x) == (size_t)-1 || (x) == (size_t)-2)
#define MB_NULLWCH(x) ((x) == 0)
@@ -98,7 +100,7 @@ extern char *xstrchr __P((const char *, int));
# define ADVANCE_CHAR(_str, _strsize, _i) \
do \
{ \
- if (MB_CUR_MAX > 1) \
+ if (locale_mb_cur_max > 1) \
{ \
mbstate_t state_bak; \
size_t mblength; \
@@ -138,7 +140,7 @@ extern char *xstrchr __P((const char *, int));
# define ADVANCE_CHAR_P(_str, _strsize) \
do \
{ \
- if (MB_CUR_MAX > 1) \
+ if (locale_mb_cur_max > 1) \
{ \
mbstate_t state_bak; \
size_t mblength; \
@@ -173,7 +175,7 @@ extern char *xstrchr __P((const char *, int));
# define BACKUP_CHAR(_str, _strsize, _i) \
do \
{ \
- if (MB_CUR_MAX > 1) \
+ if (locale_mb_cur_max > 1) \
{ \
mbstate_t state_bak; \
size_t mblength; \
@@ -215,7 +217,7 @@ extern char *xstrchr __P((const char *, int));
# define BACKUP_CHAR_P(_base, _strsize, _str) \
do \
{ \
- if (MB_CUR_MAX > 1) \
+ if (locale_mb_cur_max > 1) \
{ \
mbstate_t state_bak; \
size_t mblength; \
@@ -256,7 +258,7 @@ extern char *xstrchr __P((const char *, int));
# define COPY_CHAR_P(_dst, _src, _srcend) \
do \
{ \
- if (MB_CUR_MAX > 1) \
+ if (locale_mb_cur_max > 1) \
{ \
mbstate_t state_bak; \
size_t mblength; \
@@ -295,7 +297,7 @@ extern char *xstrchr __P((const char *, int));
# define COPY_CHAR_I(_dst, _di, _src, _srcend, _si) \
do \
{ \
- if (MB_CUR_MAX > 1) \
+ if (locale_mb_cur_max > 1) \
{ \
mbstate_t state_bak; \
size_t mblength; \
@@ -338,7 +340,7 @@ extern char *xstrchr __P((const char *, int));
# define SCOPY_CHAR_I(_dst, _escchar, _sc, _src, _si, _slen) \
do \
{ \
- if (MB_CUR_MAX > 1) \
+ if (locale_mb_cur_max > 1) \
{ \
mbstate_t state_bak; \
size_t mblength; \
@@ -385,7 +387,7 @@ extern char *xstrchr __P((const char *, int));
# define SCOPY_CHAR_M(_dst, _src, _srcend, _si) \
do \
{ \
- if (MB_CUR_MAX > 1) \
+ if (locale_mb_cur_max > 1) \
{ \
mbstate_t state_bak; \
size_t mblength; \
@@ -429,7 +431,7 @@ extern char *xstrchr __P((const char *, int));
# define SADD_MBCHAR(_dst, _src, _si, _srcsize) \
do \
{ \
- if (MB_CUR_MAX > 1) \
+ if (locale_mb_cur_max > 1) \
{ \
int i; \
mbstate_t state_bak; \
@@ -465,7 +467,7 @@ extern char *xstrchr __P((const char *, int));
# define SADD_MBCHAR(_dst, _src, _si, _srcsize)
#endif
-/* Watch out when using this -- it's just straight textual subsitution */
+/* Watch out when using this -- it's just straight textual substitution */
#if defined (HANDLE_MULTIBYTE)
# define SADD_MBQCHAR_BODY(_dst, _src, _si, _srcsize) \
\
diff --git a/include/stat-time.h b/include/stat-time.h
new file mode 100644
index 0000000..e04cc61
--- /dev/null
+++ b/include/stat-time.h
@@ -0,0 +1,214 @@
+/* stat-related time functions.
+
+ Copyright (C) 2005, 2007, 2009-2012 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 Paul Eggert. */
+
+#ifndef STAT_TIME_H
+#define STAT_TIME_H 1
+
+#include <sys/stat.h>
+
+#if defined (TIME_H_DEFINES_STRUCT_TIMESPEC)
+# include <time.h>
+#elif defined (SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)
+# include <sys/time.h>
+#elif defined (PTHREAD_H_DEFINES_STRUCT_TIMESPEC)
+# include <pthread.h>
+#endif
+
+#ifndef HAVE_STRUCT_TIMESPEC
+struct timespec
+{
+ time_t tv_sec;
+ long int tv_nsec;
+};
+#endif
+
+/* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type
+ struct timespec, if available. If not, then STAT_TIMESPEC_NS (ST,
+ ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST,
+ if available. ST_XTIM can be st_atim, st_ctim, st_mtim, or st_birthtim
+ for access, status change, data modification, or birth (creation)
+ time respectively.
+
+ These macros are private to stat-time.h. */
+#if defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC
+# ifdef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC
+# define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim)
+# else
+# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.tv_nsec)
+# endif
+#elif defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC
+# define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim##espec)
+#elif defined HAVE_STRUCT_STAT_ST_ATIMENSEC
+# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim##ensec)
+#elif defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC
+# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.st__tim.tv_nsec)
+#endif
+
+/* Return the nanosecond component of *ST's access time. */
+static inline long int
+get_stat_atime_ns (struct stat const *st)
+{
+# if defined STAT_TIMESPEC
+ return STAT_TIMESPEC (st, st_atim).tv_nsec;
+# elif defined STAT_TIMESPEC_NS
+ return STAT_TIMESPEC_NS (st, st_atim);
+# else
+ return 0;
+# endif
+}
+
+/* Return the nanosecond component of *ST's status change time. */
+static inline long int
+get_stat_ctime_ns (struct stat const *st)
+{
+# if defined STAT_TIMESPEC
+ return STAT_TIMESPEC (st, st_ctim).tv_nsec;
+# elif defined STAT_TIMESPEC_NS
+ return STAT_TIMESPEC_NS (st, st_ctim);
+# else
+ return 0;
+# endif
+}
+
+/* Return the nanosecond component of *ST's data modification time. */
+static inline long int
+get_stat_mtime_ns (struct stat const *st)
+{
+# if defined STAT_TIMESPEC
+ return STAT_TIMESPEC (st, st_mtim).tv_nsec;
+# elif defined STAT_TIMESPEC_NS
+ return STAT_TIMESPEC_NS (st, st_mtim);
+# else
+ return 0;
+# endif
+}
+
+/* Return the nanosecond component of *ST's birth time. */
+static inline long int
+get_stat_birthtime_ns (struct stat const *st)
+{
+# if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC
+ return STAT_TIMESPEC (st, st_birthtim).tv_nsec;
+# elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC
+ return STAT_TIMESPEC_NS (st, st_birthtim);
+# else
+ /* Avoid a "parameter unused" warning. */
+ (void) st;
+ return 0;
+# endif
+}
+
+/* Return *ST's access time. */
+static inline struct timespec
+get_stat_atime (struct stat const *st)
+{
+#ifdef STAT_TIMESPEC
+ return STAT_TIMESPEC (st, st_atim);
+#else
+ struct timespec t;
+ t.tv_sec = st->st_atime;
+ t.tv_nsec = get_stat_atime_ns (st);
+ return t;
+#endif
+}
+
+/* Return *ST's status change time. */
+static inline struct timespec
+get_stat_ctime (struct stat const *st)
+{
+#ifdef STAT_TIMESPEC
+ return STAT_TIMESPEC (st, st_ctim);
+#else
+ struct timespec t;
+ t.tv_sec = st->st_ctime;
+ t.tv_nsec = get_stat_ctime_ns (st);
+ return t;
+#endif
+}
+
+/* Return *ST's data modification time. */
+static inline struct timespec
+get_stat_mtime (struct stat const *st)
+{
+#ifdef STAT_TIMESPEC
+ return STAT_TIMESPEC (st, st_mtim);
+#else
+ struct timespec t;
+ t.tv_sec = st->st_mtime;
+ t.tv_nsec = get_stat_mtime_ns (st);
+ return t;
+#endif
+}
+
+static inline int
+timespec_cmp (struct timespec a, struct timespec b)
+{
+ return (a.tv_sec < b.tv_sec
+ ? -1
+ : (a.tv_sec > b.tv_sec
+ ? 1
+ : (int) (a.tv_nsec - b.tv_nsec)));
+}
+
+/* Return *ST's birth time, if available; otherwise return a value
+ with tv_sec and tv_nsec both equal to -1. */
+static inline struct timespec
+get_stat_birthtime (struct stat const *st)
+{
+ struct timespec t;
+
+#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \
+ || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC)
+ t = STAT_TIMESPEC (st, st_birthtim);
+#elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC
+ t.tv_sec = st->st_birthtime;
+ t.tv_nsec = st->st_birthtimensec;
+#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+ /* Native Windows platforms (but not Cygwin) put the "file creation
+ time" in st_ctime (!). See
+ <http://msdn2.microsoft.com/de-de/library/14h5k7ff(VS.80).aspx>. */
+ t.tv_sec = st->st_ctime;
+ t.tv_nsec = 0;
+#else
+ /* Birth time is not supported. */
+ t.tv_sec = -1;
+ t.tv_nsec = -1;
+ /* Avoid a "parameter unused" warning. */
+ (void) st;
+#endif
+
+#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \
+ || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC \
+ || defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC)
+ /* FreeBSD and NetBSD sometimes signal the absence of knowledge by
+ using zero. Attempt to work around this problem. Alas, this can
+ report failure even for valid time stamps. Also, NetBSD
+ sometimes returns junk in the birth time fields; work around this
+ bug if it is detected. */
+ if (! (t.tv_sec && 0 <= t.tv_nsec && t.tv_nsec < 1000000000))
+ {
+ t.tv_sec = -1;
+ t.tv_nsec = -1;
+ }
+#endif
+
+ return t;
+}
+
+#endif
diff --git a/include/stdc.h b/include/stdc.h
index df01d81..d2fd4b2 100644
--- a/include/stdc.h
+++ b/include/stdc.h
@@ -36,10 +36,11 @@
# endif
#endif
+/* Fortify, at least, has trouble with this definition */
#if defined (HAVE_STRINGIZE)
-# define __STRING(x) #x
+# define CPP_STRING(x) #x
#else
-# define __STRING(x) "x"
+# define CPP_STRING(x) "x"
#endif
#if !defined (__STDC__)
diff --git a/include/systimes.h b/include/systimes.h
index 9629d25..ec2d92f 100644
--- a/include/systimes.h
+++ b/include/systimes.h
@@ -45,7 +45,7 @@ struct tms
};
/* Store the CPU time used by this process and all its
- dead descendents in BUFFER.
+ dead descendants in BUFFER.
Return the elapsed real time from an arbitrary point in the
past (the bash emulation uses the epoch), or (clock_t) -1 for
errors. All times are in CLK_TCKths of a second. */
diff --git a/include/typemax.h b/include/typemax.h
index 300b113..aa21c9c 100644
--- a/include/typemax.h
+++ b/include/typemax.h
@@ -96,4 +96,8 @@ static const unsigned long long int maxquad = ULLONG_MAX;
# define SSIZE_MAX 32767 /* POSIX minimum max */
#endif
+#ifndef SIZE_MAX
+# define SIZE_MAX 65535 /* POSIX minimum max */
+#endif
+
#endif /* _SH_TYPEMAX_H */