summaryrefslogtreecommitdiff
path: root/src/tr.c
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>1992-11-24 19:54:21 +0000
committerJim Meyering <jim@meyering.net>1992-11-24 19:54:21 +0000
commitdf9f61fd4a3e3b8088013cbde3331321c5393649 (patch)
treefaf9e9f3a93a0ceb0fc464c0d4821e0ef85fa20d /src/tr.c
parentc856423cb523d58a3810d6a441b84d51f9e7f5e8 (diff)
downloadcoreutils-df9f61fd4a3e3b8088013cbde3331321c5393649.tar.xz
* Define new macros ISPRINT, ISALNUM, ISXDIGIT, ... that use isascii
if it is defined. (is_char_class_member, make_printable_char, make_printable_str, non_neg_strtol): Use new macros instead of lower case ones from <ctype.h>.
Diffstat (limited to 'src/tr.c')
-rw-r--r--src/tr.c61
1 files changed, 42 insertions, 19 deletions
diff --git a/src/tr.c b/src/tr.c
index f30fa9cb6..ecd6ca60c 100644
--- a/src/tr.c
+++ b/src/tr.c
@@ -20,12 +20,35 @@
/* Get isblank from GNU libc. */
#define _GNU_SOURCE
#include <ctype.h>
-#ifndef isblank
-#define isblank(c) ((c) == ' ' || (c) == '\t')
+
+#ifdef isascii
+#define CTYPE_PREFIX(c) isascii (c) &&
+#else
+#define CTYPE_PREFIX(c) /* empty */
+#endif
+
+#ifdef isblank
+#define ISBLANK(c) (CTYPE_PREFIX (c) isblank (c))
+#else
+#define ISBLANK(c) ((c) == ' ' || (c) == '\t')
#endif
-#ifndef isgraph
-#define isgraph(c) (isprint (c) && !isspace (c))
+#ifdef isgraph
+#define ISGRAPH(c) (CTYPE_PREFIX (c) isgraph (c))
+#else
+#define ISGRAPH(c) (CTYPE_PREFIX (c) isprint (c) && !isspace (c))
#endif
+
+#define ISPRINT(c) (CTYPE_PREFIX (c) isprint (c))
+#define ISDIGIT(c) (CTYPE_PREFIX (c) isdigit (c))
+#define ISALNUM(c) (CTYPE_PREFIX (c) isalnum (c))
+#define ISALPHA(c) (CTYPE_PREFIX (c) isalpha (c))
+#define ISCNTRL(c) (CTYPE_PREFIX (c) iscntrl (c))
+#define ISLOWER(c) (CTYPE_PREFIX (c) islower (c))
+#define ISPUNCT(c) (CTYPE_PREFIX (c) ispunct (c))
+#define ISSPACE(c) (CTYPE_PREFIX (c) isspace (c))
+#define ISUPPER(c) (CTYPE_PREFIX (c) isupper (c))
+#define ISXDIGIT(c) (CTYPE_PREFIX (c) isxdigit (c))
+
#include <stdio.h>
#include <assert.h>
#include <errno.h>
@@ -332,40 +355,40 @@ is_char_class_member (char_class, c)
switch (char_class)
{
case CC_ALNUM:
- return isalnum (c);
+ return ISALNUM (c);
break;
case CC_ALPHA:
- return isalpha (c);
+ return ISALPHA (c);
break;
case CC_BLANK:
- return isblank (c);
+ return ISBLANK (c);
break;
case CC_CNTRL:
- return iscntrl (c);
+ return ISCNTRL (c);
break;
case CC_DIGIT:
- return isdigit (c);
+ return ISDIGIT (c);
break;
case CC_GRAPH:
- return isgraph (c);
+ return ISGRAPH (c);
break;
case CC_LOWER:
- return islower (c);
+ return ISLOWER (c);
break;
case CC_PRINT:
- return isprint (c);
+ return ISPRINT (c);
break;
case CC_PUNCT:
- return ispunct (c);
+ return ISPUNCT (c);
break;
case CC_SPACE:
- return isspace (c);
+ return ISSPACE (c);
break;
case CC_UPPER:
- return isupper (c);
+ return ISUPPER (c);
break;
case CC_XDIGIT:
- return isxdigit (c);
+ return ISXDIGIT (c);
break;
case CC_NO_CLASS:
abort ();
@@ -510,7 +533,7 @@ make_printable_char (c)
char *buf = xmalloc (5);
assert (c < N_CHARS);
- if (isprint (c))
+ if (ISPRINT (c))
{
buf[0] = c;
buf[1] = '\0';
@@ -572,7 +595,7 @@ make_printable_str (s, len)
tmp = "\\v";
break;
default:
- if (isprint (s[i]))
+ if (ISPRINT (s[i]))
{
buf[0] = s[i];
buf[1] = '\0';
@@ -791,7 +814,7 @@ non_neg_strtol (s, len, val)
return 1;
if (s[0] == '0')
base = 8;
- else if (isdigit (s[0]))
+ else if (ISDIGIT (s[0]))
base = 10;
else
return 1;