diff options
Diffstat (limited to 'externals/max-long.patch')
-rw-r--r-- | externals/max-long.patch | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/externals/max-long.patch b/externals/max-long.patch new file mode 100644 index 000000000000..a2f260b970b3 --- /dev/null +++ b/externals/max-long.patch @@ -0,0 +1,77 @@ +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; |