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;