X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/374ca955a76ecab1204ca8bfa63ff9238d998416..ba6d6ed23dec08b1cd5700a128c0752491c10ac9:/icuSources/tools/gensprep/store.c diff --git a/icuSources/tools/gensprep/store.c b/icuSources/tools/gensprep/store.c index 6a70d615..49ea02eb 100644 --- a/icuSources/tools/gensprep/store.c +++ b/icuSources/tools/gensprep/store.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2012, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -22,16 +22,13 @@ #include "cstring.h" #include "filestrm.h" #include "unicode/udata.h" +#include "unicode/utf16.h" #include "utrie.h" #include "unewdata.h" #include "gensprep.h" #include "uhash.h" -#ifdef WIN32 -# pragma warning(disable: 4100) -#endif - #define DO_DEBUG_OUT 0 @@ -200,8 +197,7 @@ static UNewTrie *sprepTrie; extern void init() { - sprepTrie = (UNewTrie *)uprv_malloc(sizeof(UNewTrie)); - uprv_memset(sprepTrie, 0, sizeof(UNewTrie)); + sprepTrie = (UNewTrie *)uprv_calloc(1, sizeof(UNewTrie)); /* initialize the two tries */ if(NULL==utrie_open(sprepTrie, NULL, MAX_DATA_LENGTH, 0, 0, FALSE)) { @@ -244,17 +240,20 @@ storeMappingData(){ const UHashElement* element = NULL; ValueStruct* value = NULL; int32_t codepoint = 0; - int32_t elementCount = uhash_count(hashTable); + int32_t elementCount = 0; int32_t writtenElementCount = 0; int32_t mappingLength = 1; /* minimum mapping length */ int32_t oldMappingLength = 0; uint16_t trieWord =0; int32_t limitIndex = 0; - /*initialize the mapping data */ - mappingData = (uint16_t*) uprv_malloc(U_SIZEOF_UCHAR * (mappingDataCapacity)); + if (hashTable == NULL) { + return; + } + elementCount = uhash_count(hashTable); - uprv_memset(mappingData,0,U_SIZEOF_UCHAR * mappingDataCapacity); + /*initialize the mapping data */ + mappingData = (uint16_t*) uprv_calloc(mappingDataCapacity, U_SIZEOF_UCHAR); while(writtenElementCount < elementCount){ @@ -381,7 +380,7 @@ storeMapping(uint32_t codepoint, uint32_t* mapping,int32_t length, /* initialize the hashtable */ if(hashTable==NULL){ - hashTable = uhash_open(hashEntry, compareEntries, status); + hashTable = uhash_open(hashEntry, compareEntries, NULL, status); uhash_setValueDeleter(hashTable, valueDeleter); } @@ -457,17 +456,15 @@ storeMapping(uint32_t codepoint, uint32_t* mapping,int32_t length, */ } - map = (UChar*) uprv_malloc(U_SIZEOF_UCHAR * (adjustedLen+1)); - uprv_memset(map,0,U_SIZEOF_UCHAR * (adjustedLen+1)); - + map = (UChar*) uprv_calloc(adjustedLen + 1, U_SIZEOF_UCHAR); i=0; while(i 0xFFFF){ + if((int)(_SPREP_TYPE_THRESHOLD + type) > 0xFFFF){ fprintf(stderr,"trieWord cannot contain value greater than 0xFFFF.\n"); exit(U_ILLEGAL_CHAR_FOUND); } + trieWord = (_SPREP_TYPE_THRESHOLD + type); /* the top 4 bits contain the value */ if(start == end){ uint32_t savedTrieWord = utrie_get32(sprepTrie, start, NULL); if(savedTrieWord>0){ @@ -554,12 +551,10 @@ storeRange(uint32_t start, uint32_t end, UStringPrepType type,UErrorCode* status /* folding value: just store the offset (16 bits) if there is any non-0 entry */ static uint32_t U_CALLCONV getFoldedValue(UNewTrie *trie, UChar32 start, int32_t offset) { - uint32_t foldedValue, value; + uint32_t value; UChar32 limit=0; UBool inBlockZero; - foldedValue=0; - limit=start+0x400; while(start