UNIMPLEMENTED(_encoded_utf8_to_bytes, I32)
UNIMPLEMENTED(_encoded_bytes_to_utf8, I32)
-#ifdef USE_PERLIO
+#if defined(USE_PERLIO) && !defined(USE_SFIO)
/* Define an encoding "layer" in the perliol.h sense.
The layer defined here "inherits" in an object-oriented sense from the
"perlio" layer with its PerlIOBuf_* "methods".
ENTER;
SAVETMPS;
PUSHMARK(sp);
- XPUSHs(sv_2mortal(newSVpv("Encode",0)));
XPUSHs(sv_2mortal(newSVpvn(arg,len)));
PUTBACK;
- if (perl_call_method("getEncoding",G_SCALAR) != 1)
+ if (perl_call_pv("Encode::find_encoding",G_SCALAR) != 1)
{
/* should never happen */
- Perl_die(aTHX_ "Encode::getEncoding did not return a value");
+ Perl_die(aTHX_ "Encode::find_encoding did not return a value");
return -1;
}
SPAGAIN;
PerlIOBuf_get_cnt,
PerlIOBuf_set_ptrcnt,
};
-#endif
+#endif /* encode layer */
void
Encode_Define(pTHX_ encode_t *enc)
{
- HV *hash = get_hv("Encode::encoding",GV_ADD|GV_ADDMULTI);
+ dSP;
HV *stash = gv_stashpv("Encode::XS", TRUE);
SV *sv = sv_bless(newRV_noinc(newSViv(PTR2IV(enc))),stash);
int i = 0;
+ PUSHMARK(sp);
+ XPUSHs(sv);
while (enc->name[i])
{
const char *name = enc->name[i++];
- hv_store(hash,name,strlen(name),SvREFCNT_inc(sv),0);
+ XPUSHs(sv_2mortal(newSVpvn(name,strlen(name))));
}
+ PUTBACK;
+ call_pv("Encode::define_encoding",G_DISCARD);
SvREFCNT_dec(sv);
}
if (!check && ckWARN_d(WARN_UTF8))
{
STRLEN clen;
- UV ch = utf8_to_uv(s+slen,(SvCUR(src)-slen),&clen,0);
- Perl_warner(aTHX_ WARN_UTF8, "\"\\x{%"UVxf"}\" does not map to %s", ch, enc->name[0]);
+ UV ch = utf8n_to_uvuni(s+slen,(SvCUR(src)-slen),&clen,0);
+ Perl_warner(aTHX_ WARN_UTF8, "\"\\N{U+%"UVxf"}\" does not map to %s", ch, enc->name[0]);
/* FIXME: Skip over the character, copy in replacement and continue
* but that is messy so for now just fail.
*/
BOOT:
{
-#ifdef USE_PERLIO
+#if defined(USE_PERLIO) && !defined(USE_SFIO)
PerlIO_define_layer(&PerlIO_encode);
#endif
#include "iso8859.def"