aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid <david@xagasoft.com>2006-08-30 00:34:28 +0000
committerDavid <david@xagasoft.com>2006-08-30 00:34:28 +0000
commitb797d7a7c4481c20b26ecf6ce7ef77e4782534bb (patch)
treec16d8138d6e025ed2ba0f133cef0bd9c2c322638
parent5ff43b1a4abd06a47a996b817846567f8d1bc615 (diff)
downloadlibbu++-b797d7a7c4481c20b26ecf6ce7ef77e4782534bb.tar.gz
libbu++-b797d7a7c4481c20b26ecf6ce7ef77e4782534bb.tar.bz2
libbu++-b797d7a7c4481c20b26ecf6ce7ef77e4782534bb.tar.xz
libbu++-b797d7a7c4481c20b26ecf6ce7ef77e4782534bb.zip
david - creepy forgot to commit hashtable stuff... also fixed something in md5... it was using uninitialized data...
-rw-r--r--src/hashfunctionstring.cpp17
-rw-r--r--src/hashtable.cpp72
-rw-r--r--src/md5.cpp2
3 files changed, 58 insertions, 33 deletions
diff --git a/src/hashfunctionstring.cpp b/src/hashfunctionstring.cpp
index 6ce7bb3..bd14643 100644
--- a/src/hashfunctionstring.cpp
+++ b/src/hashfunctionstring.cpp
@@ -1,4 +1,7 @@
1#include "hashfunctionstring.h" 1#include "hashfunctionstring.h"
2#ifndef NULL
3#define NULL ((void *) 0)
4#endif
2 5
3HashFunctionString::HashFunctionString() 6HashFunctionString::HashFunctionString()
4{ 7{
@@ -10,6 +13,11 @@ HashFunctionString::~HashFunctionString()
10 13
11unsigned long int HashFunctionString::hash( const void *id ) 14unsigned long int HashFunctionString::hash( const void *id )
12{ 15{
16 if (id == NULL)
17 {
18 return 0;
19 }
20
13 unsigned long int nPos = 0; 21 unsigned long int nPos = 0;
14 for( const char *s = (const char *)id; *s; s++ ) 22 for( const char *s = (const char *)id; *s; s++ )
15 { 23 {
@@ -20,6 +28,15 @@ unsigned long int HashFunctionString::hash( const void *id )
20 28
21bool HashFunctionString::cmpIDs( const void *id1, const void *id2 ) 29bool HashFunctionString::cmpIDs( const void *id1, const void *id2 )
22{ 30{
31 if (id1 == NULL || id2 == NULL)
32 {
33 return false;
34 }
35 if (id1 == id2)
36 {
37 return true;
38 }
39
23 const char *str1 = (const char *)id1; 40 const char *str1 = (const char *)id1;
24 const char *str2 = (const char *)id2; 41 const char *str2 = (const char *)id2;
25 42
diff --git a/src/hashtable.cpp b/src/hashtable.cpp
index ea13236..37c3149 100644
--- a/src/hashtable.cpp
+++ b/src/hashtable.cpp
@@ -203,16 +203,18 @@ const void *HashTable::get( const void *id, unsigned long int nSkip )
203 for( unsigned long int j=0; j < 32; nPos = (nPos+(1<<j))%nTableSize, j++ ) 203 for( unsigned long int j=0; j < 32; nPos = (nPos+(1<<j))%nTableSize, j++ )
204 { 204 {
205 if( !isFilled( nPos ) ) return NULL; 205 if( !isFilled( nPos ) ) return NULL;
206 if( hFunc->cmpIDs( id, aTable[nPos].id ) && 206 if( aTable[nPos].bDeleted == false )
207 aTable[nPos].bDeleted == false )
208 { 207 {
209 if( nSkip == 0 ) 208 if( hFunc->cmpIDs( id, aTable[nPos].id ) )
210 {
211 return aTable[nPos].data;
212 }
213 else
214 { 209 {
215 nSkip--; 210 if( nSkip == 0 )
211 {
212 return aTable[nPos].data;
213 }
214 else
215 {
216 nSkip--;
217 }
216 } 218 }
217 } 219 }
218 } 220 }
@@ -223,16 +225,18 @@ const void *HashTable::get( const void *id, unsigned long int nSkip )
223 for( nPos++; nPos != nOldPos; nPos=(nPos+1)%nTableSize ) 225 for( nPos++; nPos != nOldPos; nPos=(nPos+1)%nTableSize )
224 { 226 {
225 if( !isFilled( nPos ) ) return NULL; 227 if( !isFilled( nPos ) ) return NULL;
226 if( hFunc->cmpIDs( id, aTable[nPos].id ) && 228 if( aTable[nPos].bDeleted == false )
227 aTable[nPos].bDeleted == false )
228 { 229 {
229 if( nSkip == 0 ) 230 if( hFunc->cmpIDs( id, aTable[nPos].id ) )
230 { 231 {
231 return aTable[nPos].data; 232 if( nSkip == 0 )
232 } 233 {
233 else 234 return aTable[nPos].data;
234 { 235 }
235 nSkip--; 236 else
237 {
238 nSkip--;
239 }
236 } 240 }
237 } 241 }
238 } 242 }
@@ -248,16 +252,18 @@ const void *HashTable::getKey( const void *id, unsigned long int nSkip )
248 for( unsigned long int j=0; j < 32; nPos = (nPos+(1<<j))%nTableSize, j++ ) 252 for( unsigned long int j=0; j < 32; nPos = (nPos+(1<<j))%nTableSize, j++ )
249 { 253 {
250 if( !isFilled( nPos ) ) return NULL; 254 if( !isFilled( nPos ) ) return NULL;
251 if( hFunc->cmpIDs( id, aTable[nPos].id ) && 255 if( aTable[nPos].bDeleted == false )
252 aTable[nPos].bDeleted == false )
253 { 256 {
254 if( nSkip == 0 ) 257 if( hFunc->cmpIDs( id, aTable[nPos].id ) )
255 {
256 return aTable[nPos].id;
257 }
258 else
259 { 258 {
260 nSkip--; 259 if( nSkip == 0 )
260 {
261 return aTable[nPos].id;
262 }
263 else
264 {
265 nSkip--;
266 }
261 } 267 }
262 } 268 }
263 } 269 }
@@ -268,16 +274,18 @@ const void *HashTable::getKey( const void *id, unsigned long int nSkip )
268 for( nPos++; nPos != nOldPos; nPos=(nPos+1)%nTableSize ) 274 for( nPos++; nPos != nOldPos; nPos=(nPos+1)%nTableSize )
269 { 275 {
270 if( !isFilled( nPos ) ) return NULL; 276 if( !isFilled( nPos ) ) return NULL;
271 if( hFunc->cmpIDs( id, aTable[nPos].id ) && 277 if( aTable[nPos].bDeleted == false )
272 aTable[nPos].bDeleted == false )
273 { 278 {
274 if( nSkip == 0 ) 279 if( hFunc->cmpIDs( id, aTable[nPos].id ) )
275 { 280 {
276 return aTable[nPos].id; 281 if( nSkip == 0 )
277 } 282 {
278 else 283 return aTable[nPos].id;
279 { 284 }
280 nSkip--; 285 else
286 {
287 nSkip--;
288 }
281 } 289 }
282 } 290 }
283 } 291 }
diff --git a/src/md5.cpp b/src/md5.cpp
index ed7e4ac..c0cacdd 100644
--- a/src/md5.cpp
+++ b/src/md5.cpp
@@ -143,7 +143,7 @@ long *md5::c2l( const char *str, long len, long *nNewLen )
143 long mlen = OBLOC( len8 ); 143 long mlen = OBLOC( len8 );
144 long flen = (((mlen/16)+((mlen%16)?(1):(0))))*16; 144 long flen = (((mlen/16)+((mlen%16)?(1):(0))))*16;
145 long *aBin = new long[flen]; 145 long *aBin = new long[flen];
146 memset( aBin, 0, flen ); 146 memset( aBin, 0, flen*4 );
147 147
148 for( long i = 0; i < len8; i+=8 ) 148 for( long i = 0; i < len8; i+=8 )
149 { 149 {