]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/tools/gensprep/store.c
ICU-491.11.3.tar.gz
[apple/icu.git] / icuSources / tools / gensprep / store.c
index 6a70d615adfe3dd29c80ded778e9b53fa5f0deb3..49ea02eb5f7bdd78e1ba9add1b48ebcc1c4d2ad8 100644 (file)
@@ -1,7 +1,7 @@
 /*
 *******************************************************************************
 *
-*   Copyright (C) 1999-2004, International Business Machines
+*   Copyright (C) 1999-2012, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 *******************************************************************************
 #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<length){
         if(mapping[i] <= 0xFFFF){
             map[i] = (uint16_t)mapping[i];
         }else{
-            map[i]   = UTF16_LEAD(mapping[i]);
-            map[i+1] = UTF16_TRAIL(mapping[i]);
+            map[i]   = U16_LEAD(mapping[i]);
+            map[i+1] = U16_TRAIL(mapping[i]);
         }
         i++;
     }
@@ -496,11 +493,11 @@ extern void
 storeRange(uint32_t start, uint32_t end, UStringPrepType type,UErrorCode* status){
     uint16_t trieWord = 0;
 
-    trieWord += (_SPREP_TYPE_THRESHOLD + type); /* the top 4 bits contain the value */
-    if(trieWord > 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<limit) {
         value=utrie_get32(trie, start, &inBlockZero);
@@ -578,7 +573,7 @@ getFoldedValue(UNewTrie *trie, UChar32 start, int32_t offset) {
 #endif /* #if !UCONFIG_NO_IDNA */
 
 extern void
-generateData(const char *dataDir, const char *packageName, const char* bundleName) {
+generateData(const char *dataDir, const char* bundleName) {
     static uint8_t sprepTrieBlock[100000];
 
     UNewDataMemory *pData;
@@ -614,12 +609,7 @@ generateData(const char *dataDir, const char *packageName, const char* bundleNam
 
 #endif
 
-    if(packageName != NULL) {
-      uprv_strcpy(fileName,packageName);
-      uprv_strcat(fileName,"_");
-    } else {
-      fileName[0]=0;
-    }
+    fileName[0]=0;
     uprv_strcat(fileName,bundleName);
     /* write the data */
     pData=udata_create(dataDir, DATA_TYPE, fileName, &dataInfo,
@@ -656,7 +646,9 @@ generateData(const char *dataDir, const char *packageName, const char* bundleNam
 
 #if !UCONFIG_NO_IDNA
     /* done with writing the data .. close the hashtable */
-    uhash_close(hashTable);
+    if (hashTable != NULL) {
+        uhash_close(hashTable);
+    }
 #endif
 }