How about just lose chardef[] entirely now?

Index: charset.c
===================================================================
RCS file: /cvs/src/usr.bin/less/charset.c,v
retrieving revision 1.16
diff -u -p -r1.16 charset.c
--- charset.c   7 Nov 2015 18:06:38 -0000       1.16
+++ charset.c   11 Nov 2015 09:59:02 -0000
@@ -23,29 +23,10 @@
 
 int utf_mode = 0;
 
-#define        IS_BINARY_CHAR  01
-#define        IS_CONTROL_CHAR 02
-
-static char chardef[256];
 static const char *binfmt = NULL;
 static const char *utfbinfmt = NULL;
 int binattr = AT_STANDOUT;
 
-static void
-ilocale(void)
-{
-       int c;
-
-       for (c = 0; c < sizeof (chardef); c++) {
-               if (isprint(c))
-                       chardef[c] = 0;
-               else if (iscntrl(c))
-                       chardef[c] = IS_CONTROL_CHAR;
-               else
-                       chardef[c] = IS_BINARY_CHAR|IS_CONTROL_CHAR;
-       }
-}
-
 static int
 checkfmt(const char *s)
 {
@@ -146,29 +127,18 @@ attr:
 }
 
 /*
- *
- */
-static void
-set_charset(void)
-{
-       char *s;
-
-       s = nl_langinfo(CODESET);
-       if (s && strcasecmp(s, "utf-8") == 0)
-               utf_mode = 1;
-
-       ilocale();
-}
-
-/*
  * Initialize charset data structures.
  */
 void
 init_charset(void)
 {
+       char *s;
+
        setlocale(LC_ALL, "");
 
-       set_charset();
+       s = nl_langinfo(CODESET);
+       if (s && strcasecmp(s, "utf-8") == 0)
+               utf_mode = 1;
 
        setbinfmt("LESSBINFMT", &binfmt, "*s<%02X>");
        setbinfmt("LESSUTFBINFMT", &utfbinfmt, "<U+%04lX>");
@@ -183,7 +153,7 @@ binary_char(LWCHAR c)
        if (utf_mode)
                return (is_ubin_char(c));
        c &= 0377;
-       return (chardef[c] & IS_BINARY_CHAR);
+       return (!isprint((unsigned char)c) && !iscntrl((unsigned char)c));
 }
 
 /*
@@ -193,7 +163,7 @@ int
 control_char(LWCHAR c)
 {
        c &= 0377;
-       return (chardef[c] & IS_CONTROL_CHAR);
+       return (iscntrl((unsigned char)c));
 }
 
 /*

Reply via email to