SvPV_set(dstr, SvPVX(sstr));
SvLEN_set(dstr, SvLEN(sstr));
SvCUR_set(dstr, SvCUR(sstr));
+ if (SvUTF8(sstr))
+ SvUTF8_on(dstr);
+ else
+ SvUTF8_off(dstr);
+
SvTEMP_off(dstr);
(void)SvOK_off(sstr);
SvPV_set(sstr, Nullch);
bool is_utf = FALSE;
char esignbuf[4];
- U8 utf8buf[10];
+ U8 utf8buf[UTF8_MAXLEN];
STRLEN esignlen = 0;
char *eptr = Nullch;
/* what about long double NVs? --jhi */
SV *vecsv;
- char *vecstr = Nullch;
+ U8 *vecstr = Null(U8*);
STRLEN veclen = 0;
char c;
int i;
vecsv = va_arg(*args, SV*);
else if (svix < svmax)
vecsv = svargs[svix++];
- vecstr = SvPVx(vecsv,veclen);
+ vecstr = (U8*)SvPVx(vecsv,veclen);
utf = DO_UTF8(vecsv);
continue;
if (utf)
iv = (IV)utf8_to_uv(vecstr, &ulen);
else {
- iv = (U8)*vecstr;
+ iv = *vecstr;
ulen = 1;
}
vecstr += ulen;
if (utf)
uv = utf8_to_uv(vecstr, &ulen);
else {
- uv = (U8)*vecstr;
+ uv = *vecstr;
ulen = 1;
}
vecstr += ulen;
ptr = POPPTR(ss,ix);
TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
dptr = POPDPTR(ss,ix);
- TOPDPTR(nss,ix) = (void (*)(void*))any_dup(dptr, proto_perl);
+ TOPDPTR(nss,ix) = (void (*)(void*))any_dup((void *)dptr, proto_perl);
break;
case SAVEt_DESTRUCTOR_X:
ptr = POPPTR(ss,ix);
TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
dxptr = POPDXPTR(ss,ix);
- TOPDXPTR(nss,ix) = (void (*)(pTHXo_ void*))any_dup(dxptr, proto_perl);
+ TOPDXPTR(nss,ix) = (void (*)(pTHXo_ void*))any_dup((void *)dxptr, proto_perl);
break;
case SAVEt_REGCONTEXT:
case SAVEt_ALLOC: