{
dVAR; dSP; dTARGET;
SV *sv;
- IV len = 0;
+ I32 len = 0;
STRLEN curlen;
STRLEN utf8_curlen;
- IV pos;
- IV rem;
- IV fail;
+ I32 pos;
+ I32 rem;
+ I32 fail;
const I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
const char *tmps;
const I32 arybase = CopARYBASE_get(PL_curcop);
rem = curlen;
else if (len >= 0) {
rem = pos+len;
- if (rem > (IV)curlen)
+ if (rem > (I32)curlen)
rem = curlen;
}
else {
RETPUSHUNDEF;
}
else {
- const IV upos = pos;
- const IV urem = rem;
- /* FIXME -- if an IV is longer than an I32, we're truncating here,
- * but a 64-bit version of sv_pos_u2b is not (yet) available.
- */
+ const I32 upos = pos;
+ const I32 urem = rem;
if (utf8_curlen)
sv_pos_u2b(sv, (I32 *)&pos, (I32 *)&rem);
tmps += pos;
require './test.pl';
-plan(338);
+plan(334);
run_tests() unless caller;
is(substr($a,1,1), 'b');
}
-# [perl #62646] offsets exceeding 32 bits on 64-bit system
-SKIP: {
- skip("32-bit system", 4) unless ~0 > 0xffffffff;
- my $a = "abc";
- my $r;
- $w = 0;
- $r = substr($a, 0xffffffff, 1);
- is($r, undef);
- is($w, 1);
- $w = 0;
- $r = substr($a, 0xffffffff+1, 1);
- is($r, undef);
- is($w, 1);
-}
-
}