From d2212429110ea5c7ffe992aa2cb18bde7ce6e83d Mon Sep 17 00:00:00 2001 From: Jarkko Hietaniemi Date: Wed, 27 Mar 2002 14:45:05 +0000 Subject: [PATCH] Possible fix for "Orks, Dragons, and Elves": should now build under UTF-8 locales (is building under Solaris en_US.UTF-8 right now). p4raw-id: //depot/perl@15549 --- Makefile.SH | 2 +- regexec.c | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Makefile.SH b/Makefile.SH index 21427ba..a5d9f78 100644 --- a/Makefile.SH +++ b/Makefile.SH @@ -668,7 +668,7 @@ preplibrary: miniperl$(EXE_EXT) lib/Config.pm lib/lib.pm $(PREPLIBRARY_LIBPERL) # (If trying to create a new port and having problems with the configpm script, # try 'make minitest' and/or commenting out the tests at the end of configpm.) lib/Config.pm: config.sh miniperl$(EXE_EXT) configpm - $(LDLIBPTH) ./miniperl configpm configpm.tmp + $(LDLIBPTH) ./miniperl -Ilib configpm configpm.tmp sh mv-if-diff configpm.tmp $@ lib/ExtUtils/Miniperl.pm: miniperlmain.c miniperl$(EXE_EXT) minimod.pl lib/Config.pm diff --git a/regexec.c b/regexec.c index 5a6d72d..5dbe166 100644 --- a/regexec.c +++ b/regexec.c @@ -1131,8 +1131,9 @@ S_find_byclass(pTHX_ regexp * prog, regnode *c, char *s, char *strend, char *sta else { U8 *r = reghop3((U8*)s, -1, (U8*)startpos); - if (s > (char*)r) - tmp = (I32)utf8n_to_uvchr(r, s - (char*)r, 0, 0); + tmp = s > (char*)r ? + utf8n_to_uvchr(r, s - (char*)r, 0, 0) : + utf8n_to_uvchr(s, UTF8SKIP(s), 0, 0); } tmp = ((OP(c) == BOUND ? isALNUM_uni(tmp) : isALNUM_LC_uvchr(UNI_TO_NATIVE(tmp))) != 0); @@ -1175,8 +1176,9 @@ S_find_byclass(pTHX_ regexp * prog, regnode *c, char *s, char *strend, char *sta else { U8 *r = reghop3((U8*)s, -1, (U8*)startpos); - if (s > (char*)r) - tmp = (I32)utf8n_to_uvchr(r, s - (char*)r, 0, 0); + tmp = s > (char*)r ? + utf8n_to_uvchr(r, s - (char*)r, 0, 0) : + utf8n_to_uvchr(s, UTF8SKIP(s), 0, 0); } tmp = ((OP(c) == NBOUND ? isALNUM_uni(tmp) : isALNUM_LC_uvchr(UNI_TO_NATIVE(tmp))) != 0); @@ -2563,9 +2565,11 @@ S_regmatch(pTHX_ regnode *prog) if (locinput == PL_bostr) ln = '\n'; else { - U8 *r = reghop((U8*)locinput, -1); + U8 *r = reghop3((U8*)locinput, -1, (U8*)PL_reg_starttry); - ln = utf8n_to_uvchr(r, s - (char*)r, 0, 0); + ln = locinput > (char*)r ? + utf8n_to_uvchr(r, locinput - (char*)r, 0, 0) : + utf8n_to_uvchr(locinput, UTF8SKIP(locinput), 0, 0); } if (OP(scan) == BOUND || OP(scan) == NBOUND) { ln = isALNUM_uni(ln); -- 2.7.4