78 lines
1.7 KiB
Diff
78 lines
1.7 KiB
Diff
diff -rc aterm-2.8-orig/aterm/hash.c aterm-2.8/aterm/hash.c
|
|
*** aterm-2.8-orig/aterm/hash.c 2008-11-10 13:54:22.000000000 +0100
|
|
--- aterm-2.8/aterm/hash.c 2009-01-27 18:14:14.000000000 +0100
|
|
***************
|
|
*** 93,146 ****
|
|
}
|
|
|
|
/*}}} */
|
|
- /*{{{ static long calc_long_max() */
|
|
- static long calc_long_max()
|
|
- {
|
|
- long try_long_max;
|
|
- long long_max;
|
|
- long delta;
|
|
-
|
|
- try_long_max = 1;
|
|
- do {
|
|
- long_max = try_long_max;
|
|
- try_long_max = long_max * 2;
|
|
- } while (try_long_max > 0);
|
|
-
|
|
- delta = long_max;
|
|
- while (delta > 1) {
|
|
- while (long_max + delta < 0) {
|
|
- delta /= 2;
|
|
- }
|
|
- long_max += delta;
|
|
- }
|
|
-
|
|
- return long_max;
|
|
-
|
|
- }
|
|
- /*}}} */
|
|
/*{{{ static long calculateNewSize(sizeMinus1, nrdel, nrentries) */
|
|
|
|
static long calculateNewSize
|
|
(long sizeMinus1, long nr_deletions, long nr_entries)
|
|
{
|
|
-
|
|
- /* Hack: LONG_MAX (limits.h) is often unreliable, we need to find
|
|
- * out the maximum possible value of a signed long dynamically.
|
|
- */
|
|
- static long st_long_max = 0;
|
|
-
|
|
- /* the resulting length has the form 2^k-1 */
|
|
-
|
|
if (nr_deletions >= nr_entries/2) {
|
|
return sizeMinus1;
|
|
}
|
|
|
|
! if (st_long_max == 0) {
|
|
! st_long_max = calc_long_max();
|
|
! }
|
|
!
|
|
! if (sizeMinus1 > st_long_max / 2) {
|
|
! return st_long_max-1;
|
|
}
|
|
|
|
return (2*sizeMinus1)+1;
|
|
--- 93,109 ----
|
|
}
|
|
|
|
/*}}} */
|
|
/*{{{ static long calculateNewSize(sizeMinus1, nrdel, nrentries) */
|
|
|
|
static long calculateNewSize
|
|
(long sizeMinus1, long nr_deletions, long nr_entries)
|
|
{
|
|
if (nr_deletions >= nr_entries/2) {
|
|
return sizeMinus1;
|
|
}
|
|
|
|
! if (sizeMinus1 > LONG_MAX / 2) {
|
|
! return LONG_MAX-1;
|
|
}
|
|
|
|
return (2*sizeMinus1)+1;
|