(file) Return to CommonUTF.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/CommonUTF.cpp between version 1.9 and 1.23

version 1.9, 2004/11/21 11:37:11 version 1.23, 2008/12/01 17:49:51
Line 1 
Line 1 
 //%2003////////////////////////////////////////////////////////////////////////  //%LICENSE////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001, 2002  BMC Software, Hewlett-Packard Development  // Licensed to The Open Group (TOG) under one or more contributor license
 // Company, L. P., IBM Corp., The Open Group, Tivoli Systems.  // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.;  // this work for additional information regarding copyright ownership.
 // IBM Corp.; EMC Corporation, The Open Group.  // Each contributor licenses this file to you under the OpenPegasus Open
   // Source License; you may not use this file except in compliance with the
   // License.
 // //
 // Permission is hereby granted, free of charge, to any person obtaining a copy  // Permission is hereby granted, free of charge, to any person obtaining a
 // of this software and associated documentation files (the "Software"), to  // copy of this software and associated documentation files (the "Software"),
 // deal in the Software without restriction, including without limitation the  // to deal in the Software without restriction, including without limitation
 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or  // the rights to use, copy, modify, merge, publish, distribute, sublicense,
 // sell copies of the Software, and to permit persons to whom the Software is  // and/or sell copies of the Software, and to permit persons to whom the
 // furnished to do so, subject to the following conditions:  // Software is furnished to do so, subject to the following conditions:
 // //
 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN  // The above copyright notice and this permission notice shall be included
 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED  // in all copies or substantial portions of the Software.
 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT  
 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR  
 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT  
 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  
 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION  
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  
 // //
 //==============================================================================  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
   // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
   // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
   // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
   // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 // //
 // Author: Dave Rosckes   (rosckes@us.ibm.com)  //////////////////////////////////////////////////////////////////////////
 // //
 //  //%////////////////////////////////////////////////////////////////////////////
 //%/////////////////////////////////////////////////////////////////////////////  
  
 #include <Pegasus/Common/Config.h> #include <Pegasus/Common/Config.h>
 #include <Pegasus/Common/Array.h> #include <Pegasus/Common/Array.h>
   #include <Pegasus/Common/Logger.h>
 #include "CommonUTF.h" #include "CommonUTF.h"
 #include <cctype>  
 #include <cstdio> #include <cstdio>
 #include <cstring> #include <cstring>
   #include <cctype>
  
 PEGASUS_NAMESPACE_BEGIN  #ifdef PEGASUS_HAS_ICU
   #include <unicode/uclean.h>
   #endif
  
   PEGASUS_NAMESPACE_BEGIN
  
 inline Uint8 _hexCharToNumeric(const Uint16 c)  const Uint32 halfBase = 0x0010000UL;
   const Uint32 halfMask = 0x3FFUL;
   const int halfShift  = 10;
   const Uint8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
   
   const Uint32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL,
                0x03C82080UL, 0xFA082080UL, 0x82082080UL };
   
   const char trailingBytesForUTF8[256] = {
       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
       2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5
   };
   inline Uint8 _hexCharToNumeric(Char16 c)
 { {
     Uint8 n;     Uint8 n;
  
Line 53 
Line 76 
 } }
  
 // Note: Caller must ensure that "src" contains "size" bytes. // Note: Caller must ensure that "src" contains "size" bytes.
 int isValid_U8(const Uint8 *src, int size)  Boolean isValid_U8(const Uint8 *src, int size)
 { {
     Uint8 U8_char;     Uint8 U8_char;
     const Uint8 *srcptr = src+size;     const Uint8 *srcptr = src+size;
Line 129 
Line 152 
     Uint8* tgt = *tgtHead;     Uint8* tgt = *tgtHead;
     while (src < srcEnd)     while (src < srcEnd)
     {     {
           if (*src < 128)
           {
               if (tgt == tgtEnd)
               {
                   returnCode = -1;
                   break;
               }
   
               *tgt++ = (Uint8)*src++;
               continue;
           }
   
         Uint32 tempchar;         Uint32 tempchar;
         Uint16 numberOfBytes = 0;         Uint16 numberOfBytes = 0;
         const Uint16* oldsrc = src;         const Uint16* oldsrc = src;
Line 279 
Line 314 
     return returnCode;     return returnCode;
 } }
  
 Boolean isUTF8(const char *legal)  Boolean isUTF8Aux(const char *legal)
 { {
     char numBytes = UTF_8_COUNT_TRAIL_BYTES(*legal)+1;     char numBytes = UTF_8_COUNT_TRAIL_BYTES(*legal)+1;
  
Line 293 
Line 328 
         }         }
     }     }
  
     return (isValid_U8((const Uint8 *)legal, numBytes));      return isValid_U8((const Uint8 *)legal, numBytes);
 } }
  
 Boolean isUTF8Str(const char *legal) Boolean isUTF8Str(const char *legal)
Line 303 
Line 338 
                       0x00};*/                       0x00};*/
 //      char tmp_[] = "class"; //      char tmp_[] = "class";
 //      char * tmp = legal; //      char * tmp = legal;
         Uint32 count = 0;      size_t count = 0;
         Uint32 size = strlen(legal);      const size_t size = strlen(legal);
 //      printf("size = %d\n",size); //      printf("size = %d\n",size);
         while(count<size)         while(count<size)
         {         {
 //              printf("count = %d\n",count); //              printf("count = %d\n",count);
                 if(isUTF8(&legal[count]) == true){          if (isUTF8(&legal[count]) == true)
           {
                         UTF8_NEXT(legal,count);                         UTF8_NEXT(legal,count);
                 }else{          }
           else
           {
 //                      printf("bad string\n"); //                      printf("bad string\n");
                         return false;                         return false;
                 }                 }
Line 327 
Line 365 
         while(count<size-1)         while(count<size-1)
         {         {
                 printf("count = %d\n", count);                 printf("count = %d\n", count);
                 if(isUTF8((char*)&legal[count]) == true){          if (isUTF8((char*)&legal[count]) == true)
           {
                         UTF8_NEXT(legal,trailingBytes);                         UTF8_NEXT(legal,trailingBytes);
                         count += trailingBytes;                         count += trailingBytes;
                 } else{          }
           else
           {
                         printf("CommonUTF8:: returning false; position[%d]",count);                         printf("CommonUTF8:: returning false; position[%d]",count);
                          return false;                          return false;
                 }                 }
Line 359 
Line 400 
             escapeStr.append(hexencoding);             escapeStr.append(hexencoding);
         }         }
     }     }
     return(escapeStr);      return escapeStr;
 } }
  
 String escapeStringDecoder(const String& Str) String escapeStringDecoder(const String& Str)
Line 400 
Line 441 
     }     }
 } }
  
   #ifdef PEGASUS_HAS_ICU
   
   Boolean InitializeICU::_initAttempted = false;
   Boolean InitializeICU::_initSuccessful = false;
   Mutex InitializeICU::_initMutex;
   
   Boolean InitializeICU::initICUSuccessful()
   {
       if (!_initAttempted)
       {
           {
               AutoMutex lock(_initMutex);
   
               if (!_initAttempted)
               {
                   UErrorCode _status = U_ZERO_ERROR;
   
                   // Initialize ICU
                   u_init(&_status);
   
                   if (U_FAILURE(_status))
                   {
                       _initSuccessful = false;
                       Logger::put(
                           Logger::STANDARD_LOG , System::CIMSERVER,
                           Logger::WARNING,
                           "ICU initialization failed with error: $0.",
                           _status);
                   }
                   else
                   {
                       _initSuccessful = true;
                   }
                   _initAttempted = true;
               }
           }
       }
   
       return _initSuccessful;
   }
   
   #endif
   
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END


Legend:
Removed from v.1.9  
changed lines
  Added in v.1.23

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2