--- embedaddon/libxml2/hash.c 2013/07/22 01:22:18 1.1.1.2 +++ embedaddon/libxml2/hash.c 2014/06/15 19:53:31 1.1.1.3 @@ -83,7 +83,7 @@ xmlHashComputeKey(xmlHashTablePtr table, const xmlChar const xmlChar *name2, const xmlChar *name3) { unsigned long value = 0L; char ch; - + #ifdef HASH_RANDOMIZATION value = table->random_seed; #endif @@ -93,11 +93,13 @@ xmlHashComputeKey(xmlHashTablePtr table, const xmlChar value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); } } + value = value ^ ((value << 5) + (value >> 3)); if (name2 != NULL) { while ((ch = *name2++) != 0) { value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); } } + value = value ^ ((value << 5) + (value >> 3)); if (name3 != NULL) { while ((ch = *name3++) != 0) { value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); @@ -113,7 +115,7 @@ xmlHashComputeQKey(xmlHashTablePtr table, const xmlChar *prefix3, const xmlChar *name3) { unsigned long value = 0L; char ch; - + #ifdef HASH_RANDOMIZATION value = table->random_seed; #endif @@ -133,6 +135,7 @@ xmlHashComputeQKey(xmlHashTablePtr table, value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); } } + value = value ^ ((value << 5) + (value >> 3)); if (prefix2 != NULL) { while ((ch = *prefix2++) != 0) { value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); @@ -144,6 +147,7 @@ xmlHashComputeQKey(xmlHashTablePtr table, value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); } } + value = value ^ ((value << 5) + (value >> 3)); if (prefix3 != NULL) { while ((ch = *prefix3++) != 0) { value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch); @@ -169,10 +173,10 @@ xmlHashComputeQKey(xmlHashTablePtr table, xmlHashTablePtr xmlHashCreate(int size) { xmlHashTablePtr table; - + if (size <= 0) size = 256; - + table = xmlMalloc(sizeof(xmlHashTable)); if (table) { table->dict = NULL; @@ -180,11 +184,11 @@ xmlHashCreate(int size) { table->nbElems = 0; table->table = xmlMalloc(size * sizeof(xmlHashEntry)); if (table->table) { - memset(table->table, 0, size * sizeof(xmlHashEntry)); + memset(table->table, 0, size * sizeof(xmlHashEntry)); #ifdef HASH_RANDOMIZATION table->random_seed = __xmlRandom(); #endif - return(table); + return(table); } xmlFree(table); } @@ -230,7 +234,7 @@ xmlHashGrow(xmlHashTablePtr table, int size) { #ifdef DEBUG_GROW unsigned long nbElem = 0; #endif - + if (table == NULL) return(-1); if (size < 8) @@ -242,7 +246,7 @@ xmlHashGrow(xmlHashTablePtr table, int size) { oldtable = table->table; if (oldtable == NULL) return(-1); - + table->table = xmlMalloc(size * sizeof(xmlHashEntry)); if (table->table == NULL) { table->table = oldtable; @@ -252,13 +256,13 @@ xmlHashGrow(xmlHashTablePtr table, int size) { table->size = size; /* If the two loops are merged, there would be situations where - a new entry needs to allocated and data copied into it from + a new entry needs to allocated and data copied into it from the main table. So instead, we run through the array twice, first copying all the elements in the main array (where we can't get conflicts) and then the rest, so we only free (and don't allocate) */ for (i = 0; i < oldsize; i++) { - if (oldtable[i].valid == 0) + if (oldtable[i].valid == 0) continue; key = xmlHashComputeKey(table, oldtable[i].name, oldtable[i].name2, oldtable[i].name3); @@ -282,8 +286,8 @@ xmlHashGrow(xmlHashTablePtr table, int size) { table->table[key].next = NULL; xmlFree(iter); } else { - iter->next = table->table[key].next; - table->table[key].next = iter; + iter->next = table->table[key].next; + table->table[key].next = iter; } #ifdef DEBUG_GROW @@ -599,7 +603,7 @@ xmlHashAddEntry3(xmlHashTablePtr table, const xmlChar entry->valid = 1; - if (insert != NULL) + if (insert != NULL) insert->next = entry; table->nbElems++; @@ -748,7 +752,7 @@ xmlHashUpdateEntry3(xmlHashTablePtr table, const xmlCh * Returns the a pointer to the userdata */ void * -xmlHashLookup3(xmlHashTablePtr table, const xmlChar *name, +xmlHashLookup3(xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, const xmlChar *name3) { unsigned long key; xmlHashEntryPtr entry; @@ -821,14 +825,14 @@ typedef struct { void *data; } stubData; -static void -stubHashScannerFull (void *payload, void *data, const xmlChar *name, +static void +stubHashScannerFull (void *payload, void *data, const xmlChar *name, const xmlChar *name2 ATTRIBUTE_UNUSED, const xmlChar *name3 ATTRIBUTE_UNUSED) { stubData *stubdata = (stubData *) data; stubdata->hashscanner (payload, stubdata->data, (xmlChar *) name); -} - +} + /** * xmlHashScan: * @table: the hash table @@ -841,7 +845,7 @@ void xmlHashScan(xmlHashTablePtr table, xmlHashScanner f, void *data) { stubData stubdata; stubdata.data = data; - stubdata.hashscanner = f; + stubdata.hashscanner = f; xmlHashScanFull (table, stubHashScannerFull, &stubdata); } @@ -866,7 +870,7 @@ xmlHashScanFull(xmlHashTablePtr table, xmlHashScannerF if (table->table) { for(i = 0; i < table->size; i++) { - if (table->table[i].valid == 0) + if (table->table[i].valid == 0) continue; iter = &(table->table[i]); while (iter) { @@ -905,7 +909,7 @@ xmlHashScanFull(xmlHashTablePtr table, xmlHashScannerF * the comparison is considered to match. */ void -xmlHashScan3(xmlHashTablePtr table, const xmlChar *name, +xmlHashScan3(xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, const xmlChar *name3, xmlHashScanner f, void *data) { xmlHashScanFull3 (table, name, name2, name3, @@ -926,7 +930,7 @@ xmlHashScan3(xmlHashTablePtr table, const xmlChar *nam * the comparison is considered to match. */ void -xmlHashScanFull3(xmlHashTablePtr table, const xmlChar *name, +xmlHashScanFull3(xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, const xmlChar *name3, xmlHashScannerFull f, void *data) { int i;