summaryrefslogtreecommitdiff
path: root/src/sys2.h
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>1997-11-19 18:59:48 +0000
committerJim Meyering <jim@meyering.net>1997-11-19 18:59:48 +0000
commit49803907f5dbd7646184a8912c9db9b09dcd0f22 (patch)
treef84bd34ddb79dbe5124055888a9b46259cc4bc0b /src/sys2.h
parent4c3aa5cba3a818bed9bfc094c05069338d682087 (diff)
downloadcoreutils-49803907f5dbd7646184a8912c9db9b09dcd0f22.tar.xz
.
Diffstat (limited to 'src/sys2.h')
-rw-r--r--src/sys2.h153
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