Possible fix for "Orks, Dragons, and Elves":
Jarkko Hietaniemi [Wed, 27 Mar 2002 14:45:05 +0000 (14:45 +0000)]
should now build under UTF-8 locales (is building
under Solaris en_US.UTF-8 right now).

p4raw-id: //depot/perl@15549

Makefile.SH
regexec.c

index 21427ba..a5d9f78 100644 (file)
@@ -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
index 5a6d72d..5dbe166 100644 (file)
--- 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);