get rid of doschar_table[]
authorVolker Lendecke <vl@samba.org>
Sat, 15 Dec 2007 23:25:49 +0000 (00:25 +0100)
committerJeremy Allison <jra@samba.org>
Sun, 16 Dec 2007 18:57:01 +0000 (10:57 -0800)
If I'm not completely blind, then check_dos_char is *only* used in the case
when we can't mmap() valid.dat. To me this looks as if we initialize the 65536
bits in doschar_table[] with check_dos_char_slowly, use it once to initialize
valid_table[] and *never* use them again. I think there's no point in keeping
these 8k of modified memory around for an unlikely case (no "valid.dat") and
even that only to use it exactly once.
(This used to be commit 0bfea7259e4091c6d914528a0e65fc10d8a56fb8)

source3/lib/util_unistr.c

index 2949d7d795e8f76f975f1eb4074d41845dfa0743..84ee673a67315e19095fded7bcc80f44f9cca7e3 100644 (file)
@@ -34,14 +34,6 @@ static bool upcase_table_use_unmap;
 static bool lowcase_table_use_unmap;
 static bool valid_table_use_unmap;
 
-/**
- * This table says which Unicode characters are valid dos
- * characters.
- *
- * Each value is just a single bit.
- **/
-static uint8 doschar_table[8192]; /* 65536 characters / 8 bits/byte */
-
 /**
  * Destroy global objects allocated by load_case_tables()
  **/
@@ -153,21 +145,6 @@ void load_case_tables(void)
        TALLOC_FREE(frame);
 }
 
-/*
-  see if a ucs2 character can be mapped correctly to a dos character
-  and mapped back to the same character in ucs2
-*/
-
-static int check_dos_char(smb_ucs2_t c)
-{
-       lazy_initialize_conv();
-
-       /* Find the right byte, and right bit within the byte; return
-        * 1 or 0 */
-       return (doschar_table[(c & 0xffff) / 8] & (1 << (c & 7))) != 0;
-}
-
-
 static int check_dos_char_slowly(smb_ucs2_t c)
 {
        char buf[10];
@@ -185,33 +162,6 @@ static int check_dos_char_slowly(smb_ucs2_t c)
        return (c == c2);
 }
 
-
-/**
- * Fill out doschar table the hard way, by examining each character
- **/
-
-static void init_doschar_table(void)
-{
-       int i, j, byteval;
-
-       /* For each byte of packed table */
-       
-       for (i = 0; i <= 0xffff; i += 8) {
-               byteval = 0;
-               for (j = 0; j <= 7; j++) {
-                       smb_ucs2_t c;
-
-                       c = i + j;
-                       
-                       if (check_dos_char_slowly(c)) {
-                               byteval |= 1 << j;
-                       }
-               }
-               doschar_table[i/8] = byteval;
-       }
-}
-
-
 /**
  * Load the valid character map table from <tt>valid.dat</tt> or
  * create from the configured codepage.
@@ -228,8 +178,6 @@ void init_valid_table(void)
        const char *allowed = ".!#$%&'()_-@^`~";
        uint8 *valid_file;
 
-       init_doschar_table();
-
        if (mapped_file) {
                /* Can't unmap files, so stick with what we have */
                return;
@@ -258,11 +206,13 @@ void init_valid_table(void)
        for (i=0;i<128;i++) {
                valid_table[i] = isalnum(i) || strchr(allowed,i);
        }
-       
+
+       lazy_initialize_conv();
+
        for (;i<0x10000;i++) {
                smb_ucs2_t c;
                SSVAL(&c, 0, i);
-               valid_table[i] = check_dos_char(c);
+               valid_table[i] = check_dos_char_slowly(c);
        }
 }