Upgrade to Encode 0.99, from Dan Kogai.
[p5sagit/p5-mst-13.2.git] / ext / Encode / Encode.xs
index a71f69b..05ff836 100644 (file)
@@ -5,10 +5,10 @@
 #include "XSUB.h"
 #define U8 U8
 #include "encode.h"
-#include "8859.h"
-#include "EBCDIC.h"
-#include "Symbols.h"
-
+/* #include "8859.h" */
+/* #include "EBCDIC.h" */
+/* #include "Symbols.h" */
+#include "def_t.h"
 
 #define UNIMPLEMENTED(x,y) y x (SV *sv, char *encoding) {dTHX;   \
                          Perl_croak(aTHX_ "panic_unimplemented"); \
@@ -91,7 +91,7 @@ PerlIOEncode_pushed(pTHX_ PerlIO * f, const char *mode, SV * arg)
     if (!SvROK(e->enc)) {
        e->enc = Nullsv;
        errno = EINVAL;
-       Perl_warner(aTHX_ WARN_IO, "Cannot find encoding \"%" SVf "\"",
+       Perl_warner(aTHX_ packWARN(WARN_IO), "Cannot find encoding \"%" SVf "\"",
                    arg);
        code = -1;
     }
@@ -541,7 +541,7 @@ encode_method(pTHX_ encode_t * enc, encpage_t * dir, SV * src,
                        UV ch =
                            utf8n_to_uvuni(s + slen, (SvCUR(src) - slen),
                                           &clen, 0);
-                       Perl_warner(aTHX_ WARN_UTF8,
+                       Perl_warner(aTHX_ packWARN(WARN_UTF8),
                                    "\"\\N{U+%" UVxf
                                    "}\" does not map to %s", ch,
                                    enc->name[0]);
@@ -559,8 +559,8 @@ encode_method(pTHX_ encode_t * enc, encpage_t * dir, SV * src,
                       for real characters, but some encodings have non-assigned
                       codes which may occur.
                     */
-                   Perl_croak(aTHX_ "%s \"\\x%02X\" does not map to Unicode",
-                              enc->name[0], (U8) s[slen]);
+                   Perl_croak(aTHX_ "%s \"\\x%02X\" does not map to Unicode (%d)",
+                              enc->name[0], (U8) s[slen], code);
                }
                break;
 
@@ -576,7 +576,15 @@ encode_method(pTHX_ encode_t * enc, encpage_t * dir, SV * src,
        if (check) {
            sdone = SvCUR(src) - (slen+sdone);
            if (sdone) {
+#if 1
+               /* FIXME: A Move() is dangerous - PV could be mmap'ed readonly
+                  SvOOK would be ideal - but sv_backoff does not understand SvLEN == 0
+                  type SVs and sv_clear() calls it ...
+                */
+                sv_setpvn(src, (char*)s+slen, sdone);
+#else
                Move(s + slen, SvPVX(src), sdone , U8);
+#endif
            }
            SvCUR_set(src, sdone);
        }
@@ -782,7 +790,8 @@ BOOT:
 #if defined(USE_PERLIO) && !defined(USE_SFIO)
  PerlIO_define_layer(aTHX_ &PerlIO_encode);
 #endif
-#include "8859_def.h"
-#include "EBCDIC_def.h"
-#include "Symbols_def.h"
+/* #include "8859_def.h" */
+/* #include "EBCDIC_def.h" */
+/* #include "Symbols_def.h" */
+#include "def_t_def.h"
 }