diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/chartypes.h | 2 | ||||
-rw-r--r-- | include/posixdir.h | 14 | ||||
-rw-r--r-- | include/posixjmp.h | 2 | ||||
-rw-r--r-- | include/shmbutil.h | 22 | ||||
-rw-r--r-- | include/stat-time.h | 214 | ||||
-rw-r--r-- | include/stdc.h | 5 | ||||
-rw-r--r-- | include/systimes.h | 2 | ||||
-rw-r--r-- | include/typemax.h | 4 |
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 */ |