(file) Return to naming.c CVS log (file) (dir) Up to [OMI] / omi / base

  1 mike  1.1 /*
  2           **==============================================================================
  3           **
  4           ** Open Management Infrastructure (OMI)
  5           **
  6           ** Copyright (c) Microsoft Corporation
  7           ** 
  8           ** Licensed under the Apache License, Version 2.0 (the "License"); you may not 
  9           ** use this file except in compliance with the License. You may obtain a copy 
 10           ** of the License at 
 11           **
 12           **     http://www.apache.org/licenses/LICENSE-2.0 
 13           **
 14           ** THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 15           ** KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED 
 16           ** WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 
 17           ** MERCHANTABLITY OR NON-INFRINGEMENT. 
 18           **
 19           ** See the Apache 2 License for the specific language governing permissions 
 20           ** and limitations under the License.
 21           **
 22 mike  1.1 **==============================================================================
 23           */
 24           
 25           #include "naming.h"
 26           
 27           MI_Boolean LegalName(const MI_Char* name)
 28           {
 29               /* Table for determining whether character is [A-Za-z_] */
 30               static const MI_Uint8 _FirstChar[256] =
 31               {
 32                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 33                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 34                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 35                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 36                   0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
 37                   1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,
 38                   0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
 39                   1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,
 40                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 41                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 42                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 43 mike  1.1         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 44                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 45                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 46                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 47                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 48               };
 49               /* Table for determining whether character is [A-Za-z0-9_] */
 50               static const MI_Uint8 _InnerChar[256] =
 51               {
 52                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 53                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 54                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 55                   1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,
 56                   0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
 57                   1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,
 58                   0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
 59                   1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,
 60                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 61                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 62                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 63                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 64 mike  1.1         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 65                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 66                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 67                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 68               };
 69               const MI_Char* p = name;
 70           
 71               /* Check the 1st character */
 72               if (!_FirstChar[(MI_Uint8)*p])
 73                   return MI_FALSE;
 74           
 75           # if (MI_CHAR_TYPE == 2)
 76               if (*p >= 128)
 77                   return MI_FALSE;
 78           # endif
 79           
 80               p++;
 81           
 82               /* Check subsequent characters */
 83               while (_InnerChar[(MI_Uint8)*p])
 84               {
 85 mike  1.1 # if (MI_CHAR_TYPE == 2)
 86               if (*p >= 128)
 87                   return MI_FALSE;
 88           # endif
 89                   p++;
 90               }
 91           
 92               return *p == '\0' ? MI_TRUE : MI_FALSE;
 93           }
 94           
 95           const MI_Uint8 __omi_ToLowerTable[256] =
 96           {
 97               0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
 98               0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
 99               0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
100               0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
101               0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
102               0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
103               0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
104               0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
105               0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
106 mike  1.1     0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
107               0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
108               0x78, 0x79, 0x7A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
109               0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
110               0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
111               0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
112               0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
113               0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
114               0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
115               0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
116               0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
117               0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
118               0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
119               0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
120               0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
121               0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
122               0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
123               0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
124               0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
125               0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
126               0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
127 mike  1.1     0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
128               0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
129           };

ViewCVS 0.9.2