changeset: 76197:170bdc5c798b parent: 76184:02ecb8261cd8 user: Stefan Krah date: Mon Apr 09 20:47:57 2012 +0200 files: Modules/_decimal/libmpdec/mpdecimal.c description: Resize the coefficient to MPD_MINALLOC also if the requested size is below MPD_MINALLOC. Previously the resize was skipped as a micro optimization. diff -r 02ecb8261cd8 -r 170bdc5c798b Modules/_decimal/libmpdec/mpdecimal.c --- a/Modules/_decimal/libmpdec/mpdecimal.c Mon Apr 09 20:31:15 2012 +0200 +++ b/Modules/_decimal/libmpdec/mpdecimal.c Mon Apr 09 20:47:57 2012 +0200 @@ -480,17 +480,20 @@ { assert(!mpd_isconst_data(result)); /* illegal operation for a const */ assert(!mpd_isshared_data(result)); /* illegal operation for a shared */ - + assert(MPD_MINALLOC <= result->alloc); + + nwords = (nwords <= MPD_MINALLOC) ? MPD_MINALLOC : nwords; + if (nwords == result->alloc) { + return 1; + } if (mpd_isstatic_data(result)) { if (nwords> result->alloc) { return mpd_switch_to_dyn(result, nwords, status); } - } - else if (nwords != result->alloc && nwords>= MPD_MINALLOC) { - return mpd_realloc_dyn(result, nwords, status); - } - - return 1; + return 1; + } + + return mpd_realloc_dyn(result, nwords, status); } /* Same as mpd_qresize, but the complete coefficient (including the old @@ -500,20 +503,21 @@ { assert(!mpd_isconst_data(result)); /* illegal operation for a const */ assert(!mpd_isshared_data(result)); /* illegal operation for a shared */ - - if (mpd_isstatic_data(result)) { - if (nwords> result->alloc) { - return mpd_switch_to_dyn_zero(result, nwords, status); - } - } - else if (nwords != result->alloc && nwords>= MPD_MINALLOC) { - if (!mpd_realloc_dyn(result, nwords, status)) { + assert(MPD_MINALLOC <= result->alloc); + + nwords = (nwords <= MPD_MINALLOC) ? MPD_MINALLOC : nwords; + if (nwords != result->alloc) { + if (mpd_isstatic_data(result)) { + if (nwords> result->alloc) { + return mpd_switch_to_dyn_zero(result, nwords, status); + } + } + else if (!mpd_realloc_dyn(result, nwords, status)) { return 0; } } mpd_uint_zero(result->data, nwords); - return 1; }

AltStyle によって変換されたページ (->オリジナル) /