diff options
author | Karl Williamson <khw@cpan.org> | 2016-04-11 19:11:07 -0600 |
---|---|---|
committer | Karl Williamson <khw@cpan.org> | 2016-05-24 10:26:29 -0600 |
commit | c664130fefeaef47ddc7dcbf7ec1830d04af8ea7 (patch) | |
tree | 3f203657dc83b4a2216da92694804e5b020fc2ff /caretx.c | |
parent | 3c5f993ee8b2fd0912839a82e5d7d8c871a363ea (diff) | |
download | perl-c664130fefeaef47ddc7dcbf7ec1830d04af8ea7.tar.gz |
locale.c: Change algorithm for strxfrm() trials
It's kind of guess work deciding how big a buffer to give to strxfrm().
If you give it too small a one, it will fail. Prior to this commit, the
buffer size was doubled and then strxfrm() was called again, looping
until it worked, or we used too much memory.
Each time a new locale is made, we try to minimize the necessity of
doing this by calculating numbers 'm' and 'b' that can be plugged into
the equation
mx + b
where 'x' is the size of the string passed to strxfrm(). strxfrm() is
roughly linear with respect to its input's length, so this generally
works without us having to do many loops to get a large enough size.
But on many systems, strxfrm(), in failing, returns how much space you
should have given it. On such systems, we can just use that number on
the 2nd try and not have to keep guessing. This commit changes to do
that.
But on other systems this doesn't work. So the original method is
retained if we determine that there are problems with strxfrm(), either
from previous experience, or because using the size returned from the
first trial didn't work
Diffstat (limited to 'caretx.c')
0 files changed, 0 insertions, 0 deletions