diff options
author | Jim Meyering <jim@meyering.net> | 1997-11-19 18:59:48 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 1997-11-19 18:59:48 +0000 |
commit | 49803907f5dbd7646184a8912c9db9b09dcd0f22 (patch) | |
tree | f84bd34ddb79dbe5124055888a9b46259cc4bc0b /src/sys2.h | |
parent | 4c3aa5cba3a818bed9bfc094c05069338d682087 (diff) | |
download | coreutils-49803907f5dbd7646184a8912c9db9b09dcd0f22.tar.xz |
.
Diffstat (limited to 'src/sys2.h')
-rw-r--r-- | src/sys2.h | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/src/sys2.h b/src/sys2.h new file mode 100644 index 000000000..608307216 --- /dev/null +++ b/src/sys2.h @@ -0,0 +1,153 @@ +#ifndef RETSIGTYPE +# define RETSIGTYPE void +#endif + +#ifndef __GNUC__ +# ifdef HAVE_ALLOCA_H +# include <alloca.h> +# else +# ifdef _AIX + # pragma alloca +# else +# ifdef _WIN32 +# include <malloc.h> +# include <io.h> +# else +# ifndef alloca +char *alloca (); +# endif +# endif +# endif +# endif +#endif + +#include <ctype.h> + +/* Jim Meyering writes: + + "... Some ctype macros are valid only for character codes that + isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when + using /bin/cc or gcc but without giving an ansi option). So, all + ctype uses should be through macros like ISPRINT... If + STDC_HEADERS is defined, then autoconf has verified that the ctype + macros don't need to be guarded with references to isascii. ... + Defining isascii to 1 should let any compiler worth its salt + eliminate the && through constant folding." + + Bruno Haible adds: + + "... Furthermore, isupper(c) etc. have an undefined result if c is + outside the range -1 <= c <= 255. One is tempted to write isupper(c) + with c being of type `char', but this is wrong if c is an 8-bit + character >= 128 which gets sign-extended to a negative value. + The macro ISUPPER protects against this as well." */ + +#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII)) +# define IN_CTYPE_DOMAIN(c) 1 +#else +# define IN_CTYPE_DOMAIN(c) isascii(c) +#endif + +#ifdef isblank +# define ISBLANK(c) (IN_CTYPE_DOMAIN (c) && isblank (c)) +#else +# define ISBLANK(c) ((c) == ' ' || (c) == '\t') +#endif +#ifdef isgraph +# define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isgraph (c)) +#else +# define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isprint (c) && !isspace (c)) +#endif + +#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c)) +#define ISALNUM(c) (IN_CTYPE_DOMAIN (c) && isalnum (c)) +#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c)) +#define ISCNTRL(c) (IN_CTYPE_DOMAIN (c) && iscntrl (c)) +#define ISLOWER(c) (IN_CTYPE_DOMAIN (c) && islower (c)) +#define ISPUNCT(c) (IN_CTYPE_DOMAIN (c) && ispunct (c)) +#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c)) +#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c)) +#define ISXDIGIT(c) (IN_CTYPE_DOMAIN (c) && isxdigit (c)) +#define ISDIGIT_LOCALE(c) (IN_CTYPE_DOMAIN (c) && isdigit (c)) + +/* ISDIGIT differs from ISDIGIT_LOCALE, as follows: + - Its arg may be any int or unsigned int; it need not be an unsigned char. + - It's guaranteed to evaluate its argument exactly once. + - It's typically faster. + Posix 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that + only '0' through '9' are digits. Prefer ISDIGIT to ISDIGIT_LOCALE unless + it's important to use the locale's definition of `digit' even when the + host does not conform to Posix. */ +#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9) + +#ifndef __P +# if PROTOTYPES +# define __P(Args) Args +# else +# define __P(Args) () +# endif +#endif + +/* Take care of NLS matters. */ + +#if HAVE_LOCALE_H +# include <locale.h> +#endif +#if !HAVE_SETLOCALE +# define setlocale(Category, Locale) /* empty */ +#endif + +#if ENABLE_NLS +# include <libintl.h> +# define _(Text) gettext (Text) +#else +# undef bindtextdomain +# define bindtextdomain(Domain, Directory) /* empty */ +# undef textdomain +# define textdomain(Domain) /* empty */ +# define _(Text) Text +#endif +#define N_(Text) Text + +#define STREQ(a,b) (strcmp((a), (b)) == 0) + +#ifndef HAVE_DECLARATION_FREE +void free (); +#endif + +#ifndef HAVE_DECLARATION_MALLOC +char *malloc (); +#endif + +#ifndef HAVE_DECLARATION_REALLOC +char *realloc (); +#endif + +#ifndef HAVE_DECLARATION_STPCPY +char *stpcpy (); +#endif + +#ifndef HAVE_DECLARATION_STRSTR +char *strstr (); +#endif + +#ifndef HAVE_DECLARATION_GETENV +char *getenv (); +#endif + +#include "xalloc.h" + +#ifndef HAVE_MEMPCPY +# if defined (__GNUC__) +/* Use an inline function with GNU C so we don't get the warning that + `value computed is not used'. */ +static __inline__ void* +mempcpy (void *d, const void *s, size_t n) +{ + return (char *) memcpy (d, s, n) + n; +} +# else +/* Be CAREFUL that there are no side effects in N. */ +# define mempcpy(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N))) +# endif +#endif |