}
break;
case 'C':
- case 'U':
if (len > strend - s)
len = strend - s;
if (checksum) {
STRLEN l;
auv = utf8_to_uv((U8*)s, strend - s,
&l, UTF8_ALLOW_ANYUV);
- if (checksum > 32)
- cdouble += (NV)auv;
- else
- culong += auv;
+ culong += auv;
s += l;
len -= l;
}
}
}
break;
+ case 'U':
+ if (len > strend - s)
+ len = strend - s;
+ if (checksum) {
+ while (len-- > 0 && s < strend) {
+ STRLEN alen;
+ auint = utf8_to_uv((U8*)s, strend - s, &alen, 0);
+ along = alen;
+ s += along;
+ if (checksum > 32)
+ cdouble += (NV)auint;
+ else
+ culong += auint;
+ }
+ }
+ else {
+ EXTEND(SP, len);
+ EXTEND_MORTAL(len);
+ while (len-- > 0 && s < strend) {
+ STRLEN alen;
+ auint = utf8_to_uv((U8*)s, strend - s, &alen, 0);
+ along = alen;
+ s += along;
+ sv = NEWSV(37, 0);
+ sv_setuv(sv, (UV)auint);
+ PUSHs(sv_2mortal(sv));
+ }
+ }
+ break;
case 's':
#if SHORTSIZE == SIZE16
along = (strend - s) / SIZE16;
require Config; import Config;
}
-print "1..165\n";
+print "1..163\n";
$format = "c2 x5 C C x s d i l a6";
# Need the expression in here to force ary[5] to be numeric. This avoids
print "ok $test\n"; $test++;
}
-# 164: pack C and pack U equivalence
-
-print "not " unless pack("C", 0x100) eq pack("U", 0x100) &&
- chr(0x100) eq pack("U", 0x100);
-print "ok $test\n"; $test++;
-
-# 165: unpack C and unpack U equivalence
-
-print "not " unless "@{[unpack('C*', chr(0x100) . chr(0x200))]}" eq
- "@{[unpack('U*', chr(0x100) . chr(0x200))]}" &&
- "@{[unpack('U*', chr(0x100) . chr(0x200))]}" eq "256 512";
-print "ok $test\n"; $test++;
-