@@ -20,7 +20,7 @@ extern "C" {
20
20
21
21
htable_t * htable_new (htable_t * h , size_t size )
22
22
{
23
- if (size <= HT_N_INLINE / 2 ) {
23
+ if (size <= HT_N_INLINE / 2 ) {
24
24
h -> size = size = HT_N_INLINE ;
25
25
h -> table = & h -> _space [0 ];
26
26
}
@@ -29,11 +29,12 @@ htable_t *htable_new(htable_t *h, size_t size)
29
29
size *= 2 ; // 2 pointers per key/value pair
30
30
size *= 2 ; // aim for 50% occupancy
31
31
h -> size = size ;
32
- h -> table = (void * * )LLT_ALLOC (size * sizeof (void * ));
32
+ h -> table = (void * * )LLT_ALLOC (size * sizeof (void * ));
33
33
}
34
- if (h -> table == NULL ) return NULL ;
34
+ if (h -> table == NULL )
35
+ return NULL ;
35
36
size_t i ;
36
- for ( i = 0 ; i < size ; i ++ )
37
+ for ( i = 0 ; i < size ; i ++ )
37
38
h -> table [i ] = HT_NOTFOUND ;
38
39
return h ;
39
40
}
@@ -48,15 +49,17 @@ void htable_free(htable_t *h)
48
49
void htable_reset (htable_t * h , size_t sz )
49
50
{
50
51
sz = next_power_of_two (sz );
51
- if (h -> size > sz * 4 && h -> size > HT_N_INLINE ) {
52
- size_t newsz = sz * 4 ;
53
- void * * newtab = (void * * )LLT_REALLOC (h -> table , newsz * sizeof (void * ));
54
- h -> size = newsz ;
55
- h -> table = newtab ;
52
+ if (h -> size > sz * 4 && h -> size > HT_N_INLINE ) {
53
+ LLT_FREE (h -> table );
54
+ h -> table = NULL ;
55
+ if (htable_new (h , sz ) == NULL )
56
+ htable_new (h , 0 );
57
+ }
58
+ else {
59
+ size_t i , hsz = h -> size ;
60
+ for (i = 0 ; i < hsz ; i ++ )
61
+ h -> table [i ] = HT_NOTFOUND ;
56
62
}
57
- size_t i , hsz = h -> size ;
58
- for (i = 0 ; i < hsz ; i ++ )
59
- h -> table [i ] = HT_NOTFOUND ;
60
63
}
61
64
62
65
#ifdef __cplusplus
0 commit comments