summaryrefslogtreecommitdiff
path: root/embedvar.h
diff options
context:
space:
mode:
authorKarl Williamson <khw@cpan.org>2016-04-11 19:11:07 -0600
committerKarl Williamson <khw@cpan.org>2016-05-24 10:26:29 -0600
commitc664130fefeaef47ddc7dcbf7ec1830d04af8ea7 (patch)
tree3f203657dc83b4a2216da92694804e5b020fc2ff /embedvar.h
parent3c5f993ee8b2fd0912839a82e5d7d8c871a363ea (diff)
downloadperl-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 'embedvar.h')
-rw-r--r--embedvar.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/embedvar.h b/embedvar.h
index 794ed9a31e..67383680f5 100644
--- a/embedvar.h
+++ b/embedvar.h
@@ -309,6 +309,7 @@
#define PL_stderrgv (vTHX->Istderrgv)
#define PL_stdingv (vTHX->Istdingv)
#define PL_strtab (vTHX->Istrtab)
+#define PL_strxfrm_is_behaved (vTHX->Istrxfrm_is_behaved)
#define PL_strxfrm_min_char (vTHX->Istrxfrm_min_char)
#define PL_sub_generation (vTHX->Isub_generation)
#define PL_subline (vTHX->Isubline)