]> granicus.if.org Git - python/commitdiff
Revert Patch #670715: iconv support.
authorMartin v. Löwis <martin@v.loewis.de>
Thu, 3 Apr 2003 04:49:12 +0000 (04:49 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Thu, 3 Apr 2003 04:49:12 +0000 (04:49 +0000)
Lib/encodings/__init__.py
Lib/encodings/iconv_codec.py [deleted file]
Lib/test/regrtest.py
Lib/test/test_iconv_codecs.py [deleted file]
Misc/NEWS
Modules/Setup.dist
Modules/_iconv_codec.c [deleted file]
setup.py

index e312fb80eb9cb9f6494a2890e48b5e3bd85c3f1a..a214190a9dc4504ccb2e7dbe357976df8262b2a4 100644 (file)
@@ -121,8 +121,3 @@ def search_function(encoding):
 # Register the search_function in the Python codec registry
 codecs.register(search_function)
 
-# Register iconv_codec lookup function if available
-try:
-    import iconv_codec
-except (ImportError, RuntimeError):
-    pass
diff --git a/Lib/encodings/iconv_codec.py b/Lib/encodings/iconv_codec.py
deleted file mode 100644 (file)
index 8bd0c3f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-""" Python 'iconv' Codec
-
-
-Written by Hye-Shik Chang (perky@FreeBSD.org).
-
-Copyright(c) Python Software Foundation, All Rights Reserved. NO WARRANTY.
-
-"""
-
-import _iconv_codec
-import codecs
-
-def lookup(enc):
-    class IconvCodec(_iconv_codec.iconvcodec, codecs.Codec):
-        encoding = enc
-
-    try:
-        c = IconvCodec()
-
-        class IconvStreamReader(IconvCodec, codecs.StreamReader):
-            __init__ = codecs.StreamReader.__init__
-        class IconvStreamWriter(IconvCodec, codecs.StreamWriter):
-            __init__ = codecs.StreamWriter.__init__
-
-        return (
-            c.encode, c.decode,
-            IconvStreamReader, IconvStreamWriter
-        )
-    except ValueError:
-        return None
-
-codecs.register(lookup)
-
-# ex: ts=8 sts=4 et
index 818b4aade706d93e1fcd0fa188ddcc08efe9e40e..4ec2855271a71646b61edfa79a4edd689177574e 100755 (executable)
@@ -569,7 +569,6 @@ _expectations = {
         test_gdbm
         test_gl
         test_grp
-        test_iconv_codecs
         test_imgfile
         test_ioctl
         test_largefile
@@ -626,7 +625,6 @@ _expectations = {
         test_fork1
         test_gl
         test_grp
-        test_iconv_codecs
         test_ioctl
         test_imgfile
         test_largefile
@@ -774,7 +772,6 @@ _expectations = {
         test_email_codecs
         test_gdbm
         test_gl
-        test_iconv_codecs
         test_imgfile
         test_largefile
         test_linuxaudiodev
@@ -890,7 +887,6 @@ _expectations = {
         test_dl
         test_email_codecs
         test_gl
-        test_iconv_codecs
         test_imgfile
         test_largefile
         test_linuxaudiodev
diff --git a/Lib/test/test_iconv_codecs.py b/Lib/test/test_iconv_codecs.py
deleted file mode 100644 (file)
index 9d27faa..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-from test import test_support
-import unittest, sys
-import codecs, _iconv_codec
-from encodings import iconv_codec
-from StringIO import StringIO
-
-class IconvCodecTest(unittest.TestCase):
-
-    if sys.byteorder == 'big':
-        spam = '\x00s\x00p\x00a\x00m' * 2
-    else:
-        spam = 's\x00p\x00a\x00m\x00' * 2
-
-    def test_sane(self):
-        # FIXME: Commented out, because it's not clear whether
-        # the internal encoding choosen requires byte swapping
-        # for this iconv() implementation.
-        if False:
-            self.encoder, self.decoder, self.reader, self.writer = \
-                codecs.lookup(_iconv_codec.internal_encoding)
-            self.assertEqual(self.decoder(self.spam), (u'spamspam', 16))
-            self.assertEqual(self.encoder(u'spamspam'), (self.spam, 8))
-            self.assertEqual(self.reader(StringIO(self.spam)).read(), u'spamspam')
-            f = StringIO()
-            self.writer(f).write(u'spamspam')
-            self.assertEqual(f.getvalue(), self.spam)
-
-    def test_basic_errors(self):
-        self.encoder, self.decoder, self.reader, self.writer = \
-            iconv_codec.lookup("ascii")
-        def testencerror(errors):
-            return self.encoder(u'sp\ufffdam', errors)
-        def testdecerror(errors):
-            return self.decoder('sp\xffam', errors)
-
-        self.assertRaises(UnicodeEncodeError, testencerror, 'strict')
-        self.assertRaises(UnicodeDecodeError, testdecerror, 'strict')
-        self.assertEqual(testencerror('replace'), ('sp?am', 5))
-        self.assertEqual(testdecerror('replace'), (u'sp\ufffdam', 5))
-        self.assertEqual(testencerror('ignore'), ('spam', 5))
-        self.assertEqual(testdecerror('ignore'), (u'spam', 5))
-
-    def test_pep293_errors(self):
-        self.encoder, self.decoder, self.reader, self.writer = \
-            iconv_codec.lookup("ascii")
-        def testencerror(errors):
-            return self.encoder(u'sp\ufffdam', errors)
-        def testdecerror(errors):
-            return self.decoder('sp\xffam', errors)
-
-        self.assertEqual(testencerror('xmlcharrefreplace'),
-                         ('sp&#65533;am', 5))
-        self.assertEqual(testencerror('backslashreplace'),
-                         ('sp\\ufffdam', 5))
-
-        def error_bomb(exc):
-            return (u'*'*40, len(exc.object))
-        def error_mock(exc):
-            error_mock.lastexc = exc
-            return (unicode(exc.object[exc.start - 1]), exc.end)
-
-        codecs.register_error('test_iconv_codec.bomb', error_bomb)
-        codecs.register_error('test_iconv_codec.mock', error_mock)
-
-        self.assertEqual(testencerror('test_iconv_codec.bomb'),
-                         ('sp' + ('*'*40), 5))
-        self.assertEqual(testdecerror('test_iconv_codec.bomb'),
-                         (u'sp' + (u'*'*40), 5))
-
-        self.assertEqual(testencerror('test_iconv_codec.mock'), ('sppam', 5))
-        exc = error_mock.lastexc
-        self.assertEqual(exc.object, u'sp\ufffdam')
-        self.assertEqual(exc.start, 2)
-        self.assertEqual(exc.end, 3)
-        self.assert_(isinstance(exc, UnicodeEncodeError))
-
-        self.assertEqual(testdecerror('test_iconv_codec.mock'), (u'sppam', 5))
-        exc = error_mock.lastexc
-        self.assertEqual(exc.object, 'sp\xffam')
-        self.assertEqual(exc.start, 2)
-        self.assertEqual(exc.end, 3)
-        self.assert_(isinstance(exc, UnicodeDecodeError))
-
-    def test_empty_escape_decode(self):
-        self.encoder, self.decoder, self.reader, self.writer = \
-            iconv_codec.lookup("ascii")
-        self.assertEquals(self.decoder(u""), ("", 0))
-        self.assertEquals(self.encoder(""), (u"", 0))
-
-def test_main():
-    suite = unittest.TestSuite()
-    suite.addTest(unittest.makeSuite(IconvCodecTest))
-    test_support.run_suite(suite)
-
-
-if __name__ == "__main__":
-    test_main()
-
-# ex: ts=8 sts=4 et
index 2356ca852987a01702bf42cedbaf39cfb8b9aa45..2e6c5367cdaff251ef7c9df712c2f6ba8c5211e4 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -41,6 +41,8 @@ Core and builtins
 Extension modules
 -----------------
 
+- The iconv module has been removed from this release.
+
 - The platform-independent routines for packing floats in IEEE formats
   (struct.pack's <f, >f, <d, and >d codes; pickle and cPickle's protocol 1
   pickling of floats) ignored that rounding can cause a carry to
@@ -105,8 +107,6 @@ TBD
 Build
 -----
 
-- Fix build problems when _iconv_codec failed.  (SF bug #690012.)
-
 - Fix problem building on OSF1 because the compiler only accepted
   preprocessor directives that start in column 1.  (SF bug #691793.)
 
@@ -276,9 +276,6 @@ Extension modules
 - The SSL module now handles sockets with a timeout set correctly (SF
   patch #675750, fixing SF bug #675552).
 
-- A new module _iconv_codec has been added, to expose the iconv(3)
-  library.
-
 - os/posixmodule has grown the sysexits.h constants (EX_OK and friends).
 
 - Fixed broken threadstate swap in readline that could cause fatal
index efb783eb0c390b9f4a627bb048707dadf95bad0d..503be2a14710c7d11e7a37f868e293c48670e5c8 100644 (file)
@@ -478,10 +478,6 @@ GLHACK=-Dclear=__GLclear
 #EXPAT_DIR=/usr/local/src/expat-1.95.2
 #pyexpat pyexpat.c -DHAVE_EXPAT_H -I$(EXPAT_DIR)/lib -L$(EXPAT_DIR) -lexpat
 
-# Wrapper for iconv(3). This requires either GNU iconv, or a native
-# iconv implementation (only Linux, Solaris, and BSD are known to work)
-#_iconv_codec _iconv_codec -I$(prefix)/include -L$(exec_prefix)/lib -liconv
-
 # Example -- included for reference only:
 # xx xxmodule.c
 
diff --git a/Modules/_iconv_codec.c b/Modules/_iconv_codec.c
deleted file mode 100644 (file)
index 3570f46..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-/*
- * _iconv_codec.c
- *
- * libiconv adaptor for Python iconvcodec
- *
- * Author  : Hye-Shik Chang <perky@FreeBSD.org>
- * Created : 17 January 2003
- */
-
-#include "Python.h"
-#include <string.h>
-#include <iconv.h>
-
-static const char *__version__ = "$Revision$";
-
-#if Py_USING_UNICODE
-# if Py_UNICODE_SIZE == 2
-#  ifdef __GNU_LIBRARY__
-#   define UNICODE_ENCODING        "ucs-2"
-#  else
-#   define UNICODE_ENCODING        "ucs-2-internal"
-#  endif
-#  define MBENCODED_LENGTH_MAX    4
-# elif Py_UNICODE_SIZE == 4
-#  ifdef __GNU_LIBRARY__
-#   define UNICODE_ENCODING        "ucs-4"
-#  else
-#   define UNICODE_ENCODING        "ucs-4-internal"
-#  endif
-#  define MBENCODED_LENGTH_MAX    6
-# endif
-#else
-# error "Unicode is not available"
-#endif
-
-typedef struct {
-    PyObject_HEAD
-    iconv_t  enchdl, dechdl;
-    char    *encoding;
-} iconvcodecObject;
-PyDoc_STRVAR(iconvcodec_doc, "iconvcodec object");
-
-/* does the chosen internal encoding require
- * byteswapping to get native endianness?
- * 0=no, 1=yes, -1=unknown */
-static int byteswap = -1;
-
-#define ERROR_STRICT                (PyObject *)(1)
-#define ERROR_IGNORE                (PyObject *)(2)
-#define ERROR_REPLACE               (PyObject *)(3)
-#define ERROR_MAX                   ERROR_REPLACE
-
-#define REPLACEMENT_CHAR_DECODE     0xFFFD
-#define REPLACEMENT_CHAR_ENCODE     '?'
-
-#define DEFAULT_ENCODING            "utf-8"
-
-
-static PyObject *
-get_errorcallback(const char *errors)
-{
-    if (errors == NULL || strcmp(errors, "strict") == 0)
-        return ERROR_STRICT;
-    else if (strcmp(errors, "ignore") == 0)
-        return ERROR_IGNORE;
-    else if (strcmp(errors, "replace") == 0)
-        return ERROR_REPLACE;
-    else
-        return PyCodec_LookupError(errors);
-}
-
-
-PyDoc_STRVAR(iconvcodec_encode__doc__,
-"I.encode(unicode, [,errors]) -> (string, length consumed)\n\
-\n\
-Return an encoded string version of `unicode'. errors may be given to\n\
-set a different error handling scheme. Default is 'strict' meaning that\n\
-encoding errors raise a UnicodeEncodeError. Other possible values are\n\
-'ignore', 'replace' and 'xmlcharrefreplace' as well as any other name\n\
-registered with codecs.register_error that can handle UnicodeEncodeErrors.");
-
-static PyObject *
-iconvcodec_encode(iconvcodecObject *self, PyObject *args, PyObject *kwargs)
-{
-    static char         *kwlist[] = { "input", "errors", NULL };
-    Py_UNICODE          *input;
-    int                  inputlen;
-    char                *errors = NULL/*strict*/, *out, *out_top;
-    const char          *inp, *inp_top;
-    size_t               inplen, inplen_total, outlen, outlen_total, estep;
-    PyObject            *outputobj = NULL, *errorcb = NULL,
-                        *exceptionobj = NULL;
-    Py_UNICODE          *swappedinput = NULL;
-    int                  swapi;
-
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "u#|s:encode",
-                kwlist, &input, &inputlen, &errors))
-        return NULL; /* TypeError */
-
-    errorcb = get_errorcallback(errors);
-    if (errorcb == NULL)
-        return NULL; /* LookupError or something else from error handler */
-
-    inp = inp_top = (char *)input;
-    inplen = inplen_total = (size_t)(inputlen * Py_UNICODE_SIZE);
-
-    outlen = inputlen * MBENCODED_LENGTH_MAX;
-    if (outlen < 16)
-        outlen = 16; /* for iso-2022 codecs */
-
-    outputobj = PyString_FromStringAndSize(NULL, outlen);
-    if (outputobj == NULL)
-        return NULL;
-    out = out_top = PyString_AS_STRING(outputobj);
-    outlen_total = outlen;
-
-    estep = inputlen * Py_UNICODE_SIZE / 2;
-
-#define RESIZE_OUTBUFFER(size) {                            \
-    size_t   toadd = (size);                                \
-    outlen_total += toadd;                                  \
-    outlen += toadd;                                        \
-    if (_PyString_Resize(&outputobj, outlen_total) == -1)   \
-        goto errorexit;                                     \
-    out = PyString_AS_STRING(outputobj) + (out - out_top);  \
-    out_top = PyString_AS_STRING(outputobj);                \
-}
-    if (byteswap) {
-        swappedinput = PyMem_Malloc(inplen);
-        if (swappedinput == NULL)
-            return NULL;
-        for (swapi = 0; swapi<inputlen; ++swapi)
-        {
-           Py_UNICODE c = input[swapi];
-#if Py_UNICODE_SIZE == 2
-           c = ((char *)&c)[0]<<8 | ((char *)&c)[1];
-#else
-           c = ((char *)&c)[0]<<24 | ((char *)&c)[1]<<16 |
-               ((char *)&c)[2]<<8 | ((char *)&c)[3];
-#endif
-           swappedinput[swapi] = c;
-        }
-        inp = inp_top = (char *)swappedinput;
-    }
-
-    while (inplen > 0) {
-        if (iconv(self->enchdl, (char**)&inp, &inplen, &out, &outlen)
-           == (size_t)-1)
-       {
-            char         reason[128];
-            int          errpos;
-
-            if (errno == E2BIG) {
-                RESIZE_OUTBUFFER(estep);
-                continue;
-            }
-
-            if (errorcb == ERROR_IGNORE || errorcb == ERROR_REPLACE) {
-                inplen -= Py_UNICODE_SIZE;
-                inp += Py_UNICODE_SIZE;
-                if (errorcb == ERROR_REPLACE) {
-                    if (outlen < 1)
-                        RESIZE_OUTBUFFER(errno == EINVAL ?  1 : estep);
-                    outlen--;
-                    *out++ = REPLACEMENT_CHAR_ENCODE;
-                }
-                if (errno == EINVAL) break;
-                else continue;
-            }
-
-            errpos = (int)(inp - inp_top) / Py_UNICODE_SIZE;
-            sprintf(reason, "Undefined character map from "
-#if Py_UNICODE_SIZE == 2
-                        "\\u%04x"
-#elif Py_UNICODE_SIZE == 4
-                        "\\u%08x"
-#endif
-                        , *(Py_UNICODE *)inp);
-
-            if (exceptionobj == NULL) {
-                if ((exceptionobj = PyUnicodeEncodeError_Create(
-                                        self->encoding, input, inputlen,
-                                        errpos, errpos + 1, reason)) == NULL)
-                    goto errorexit;
-            } else {
-                if (PyUnicodeEncodeError_SetStart(exceptionobj, errpos) != 0)
-                    goto errorexit;
-                if (PyUnicodeEncodeError_SetEnd(exceptionobj, errpos + 1) != 0)
-                    goto errorexit;
-                if (PyUnicodeEncodeError_SetReason(exceptionobj, reason) != 0)
-                    goto errorexit;
-            }
-
-            if (errorcb == ERROR_STRICT) {
-                PyCodec_StrictErrors(exceptionobj);
-                goto errorexit;
-            } else {
-                PyObject        *argsobj, *retobj, *retuni;
-                long             newpos;
-
-                argsobj = PyTuple_New(1);
-                if (argsobj == NULL)
-                    goto errorexit;
-                PyTuple_SET_ITEM(argsobj, 0, exceptionobj);
-                Py_INCREF(exceptionobj);
-                retobj = PyObject_CallObject(errorcb, argsobj);
-                Py_DECREF(argsobj);
-                if (retobj == NULL)
-                    goto errorexit;
-
-                if (!PyTuple_Check(retobj) || PyTuple_GET_SIZE(retobj) != 2 ||
-                    !PyUnicode_Check((retuni = PyTuple_GET_ITEM(retobj, 0))) ||
-                    !PyInt_Check(PyTuple_GET_ITEM(retobj, 1))) {
-                    Py_DECREF(retobj);
-                    PyErr_SetString(PyExc_ValueError, "encoding error handler "
-                                    "must return (unicode, int) tuple");
-                    goto errorexit;
-                }
-                if (PyUnicode_GET_SIZE(retuni) > 0) {
-#define errorexit errorexit_cbpad
-                    PyObject    *retstr = NULL;
-                    int          retstrsize;
-
-                    retstr = PyUnicode_AsEncodedString(
-                                    retuni, self->encoding, NULL);
-                    if (retstr == NULL || !PyString_Check(retstr))
-                        goto errorexit;
-
-                    retstrsize = PyString_GET_SIZE(retstr);
-                    if (outlen < retstrsize)
-                        RESIZE_OUTBUFFER(errno == EINVAL || retstrsize > estep
-                                         ? retstrsize - outlen : estep);
-
-                    memcpy(out, PyString_AS_STRING(retstr), retstrsize);
-                    out += retstrsize;
-                    outlen -= retstrsize;
-#undef errorexit
-                    if (0) {
-errorexit_cbpad:        Py_XDECREF(retobj);
-                        Py_XDECREF(retstr);
-                        goto errorexit;
-                    }
-                    Py_DECREF(retstr);
-                }
-
-                newpos = PyInt_AS_LONG(PyTuple_GET_ITEM(retobj, 1));
-                Py_DECREF(retobj);
-
-                if (newpos < 0)
-                    newpos = inputlen + newpos;
-                if (newpos < 0 || newpos > inputlen) {
-                    PyErr_Format(PyExc_IndexError,
-                       "position %ld from error handler out of bounds",
-                       newpos);
-                    goto errorexit;
-                }
-                if (newpos == inputlen)
-                    break;
-                inp = inp_top + Py_UNICODE_SIZE * newpos;
-                inplen = inplen_total - Py_UNICODE_SIZE * newpos;
-            }
-        } else
-            break;
-    }
-#undef RESIZE_OUTBUFFER
-
-    {
-        PyObject    *rettup;
-        int          finalsize;
-
-        finalsize = (int)(out - out_top);
-
-        if (finalsize != outlen_total) {
-            if (_PyString_Resize(&outputobj, finalsize) == -1)
-                goto errorexit;
-        }
-
-        if (errorcb > ERROR_MAX) {
-            Py_DECREF(errorcb);
-        }
-        Py_XDECREF(exceptionobj);
-
-        rettup = PyTuple_New(2);
-        if (rettup == NULL) {
-            Py_DECREF(outputobj);
-            if (byteswap)
-                PyMem_Free(swappedinput);
-            return NULL;
-        }
-        PyTuple_SET_ITEM(rettup, 0, outputobj);
-        PyTuple_SET_ITEM(rettup, 1, PyInt_FromLong(inputlen));
-        return rettup;
-    }
-
-errorexit:
-    Py_XDECREF(outputobj);
-    if (errorcb > ERROR_MAX) {
-        Py_DECREF(errorcb);
-    }
-    Py_XDECREF(exceptionobj);
-    if (byteswap)
-        PyMem_Free(swappedinput);
-
-    return NULL;
-}
-
-PyDoc_STRVAR(iconvcodec_decode__doc__,
-"I.decode(string, [,errors]) -> (unicodeobject, length consumed)\n\
-\n\
-Decodes `string' using I, an iconvcodec instance. errors may be given\n\
-to set a different error handling scheme. Default is 'strict' meaning\n\
-that encoding errors raise a UnicodeDecodeError. Other possible values\n\
-are 'ignore' and 'replace' as well as any other name registerd with\n\
-codecs.register_error that is able to handle UnicodeDecodeErrors.");
-
-static PyObject *
-iconvcodec_decode(iconvcodecObject *self, PyObject *args, PyObject *kwargs)
-{
-    static char         *kwlist[] = { "input", "errors", NULL };
-    char                *errors = NULL/*strict*/, *out, *out_top;
-    const char          *inp, *inp_top;
-    int                  inplen_int;
-    size_t               inplen, inplen_total, outlen, outlen_total, estep;
-    PyObject            *outputobj = NULL, *errorcb = NULL,
-                        *exceptionobj = NULL;
-
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s#|s:decode",
-                kwlist, &inp, &inplen_int, &errors))
-        return NULL; /* TypeError */
-
-    errorcb = get_errorcallback(errors);
-    if (errorcb == NULL)
-        return NULL; /* LookupError or something else from error handler */
-
-    inp_top = inp;
-    inplen_total = inplen = (size_t)inplen_int;
-
-    outputobj = PyUnicode_FromUnicode(NULL, inplen);
-    if (outputobj == NULL)
-        return NULL;
-    outlen_total = outlen = PyUnicode_GET_DATA_SIZE(outputobj);
-    out = out_top = (char *)PyUnicode_AS_UNICODE(outputobj);
-
-    estep = outlen / 2;
-
-#define RESIZE_OUTBUFFER(size) {                                            \
-    size_t   toadd = (size);                                                \
-    outlen_total += toadd;                                                  \
-    outlen += toadd;                                                        \
-    if (PyUnicode_Resize(&outputobj, outlen_total/Py_UNICODE_SIZE) == -1)   \
-        goto errorexit;                                                     \
-    out = (char *)PyUnicode_AS_UNICODE(outputobj) + (out - out_top);        \
-    out_top = (char *)PyUnicode_AS_UNICODE(outputobj);                      \
-}
-    while (inplen > 0) {
-        char *oldout = out;
-        size_t res = iconv(self->dechdl, (char**)&inp, &inplen, &out, &outlen);
-
-        if (byteswap) {
-            while (oldout < out)
-            {
-                char c0 = oldout[0];
-#if Py_UNICODE_SIZE == 2
-                oldout[0] = oldout[1];
-                oldout[1] = c0;
-#else
-                char c1 = oldout[1];
-                oldout[0] = oldout[3];
-                oldout[1] = oldout[2];
-                oldout[2] = c1;
-                oldout[3] = c0;
-#endif
-                oldout += sizeof(Py_UNICODE);
-            }
-        }
-        if (res == (size_t)-1) {
-            char         reason[128], *reasonpos = (char *)reason;
-            int          errpos;
-
-            if (errno == E2BIG) {
-                RESIZE_OUTBUFFER(estep);
-                continue;
-            }
-
-            if (errorcb == ERROR_IGNORE || errorcb == ERROR_REPLACE) {
-                inplen--; inp++;
-                if (errorcb == ERROR_REPLACE) {
-                    Py_UNICODE      *replp;
-
-                    if (outlen < Py_UNICODE_SIZE)
-                        RESIZE_OUTBUFFER(
-                            errno == EINVAL || Py_UNICODE_SIZE > estep
-                            ? Py_UNICODE_SIZE : estep);
-
-                    /* some compilers hate casted lvalue */
-                    replp   = (Py_UNICODE *)out;
-                    assert((long)replp % Py_UNICODE_SIZE == 0);/* aligned? */
-                    *replp  = REPLACEMENT_CHAR_DECODE;
-
-                    out     += Py_UNICODE_SIZE;
-                    outlen  -= Py_UNICODE_SIZE;
-                }
-                if (errno == EINVAL) break;
-                else continue;
-            }
-
-            errpos = (int)(inp - inp_top);
-            reasonpos += sprintf(reason, "Invalid multibyte sequence \\x%02x",
-                                            (unsigned char)*inp);
-            if (inplen > 1) {
-                reasonpos += sprintf(reasonpos,
-                                     "\\x%02x", (unsigned char)*(inp+1));
-                if (inplen > 2)
-                    sprintf(reasonpos, "\\x%02x", (unsigned char)*(inp+2));
-            }
-
-            if (exceptionobj == NULL) {
-                exceptionobj = PyUnicodeDecodeError_Create(
-                                    self->encoding, inp_top, inplen_total,
-                                    errpos, errpos + 1, reason);
-                if (exceptionobj == NULL)
-                    goto errorexit;
-            } else {
-                if (PyUnicodeDecodeError_SetStart(exceptionobj, errpos) != 0)
-                    goto errorexit;
-                if (PyUnicodeDecodeError_SetEnd(exceptionobj, errpos + 1) != 0)
-                    goto errorexit;
-                if (PyUnicodeDecodeError_SetReason(exceptionobj, reason) != 0)
-                    goto errorexit;
-            }
-
-            if (errorcb == ERROR_STRICT) {
-                PyCodec_StrictErrors(exceptionobj);
-                goto errorexit;
-            } else {
-                PyObject        *argsobj, *retobj, *retuni;
-                long             newpos;
-
-                argsobj = PyTuple_New(1);
-                if (argsobj == NULL)
-                    goto errorexit;
-                PyTuple_SET_ITEM(argsobj, 0, exceptionobj);
-                Py_INCREF(exceptionobj);
-                retobj = PyObject_CallObject(errorcb, argsobj);
-                Py_DECREF(argsobj);
-                if (retobj == NULL)
-                    goto errorexit;
-
-                if (!PyTuple_Check(retobj) || PyTuple_GET_SIZE(retobj) != 2 ||
-                    !PyUnicode_Check((retuni = PyTuple_GET_ITEM(retobj, 0))) ||
-                    !PyInt_Check(PyTuple_GET_ITEM(retobj, 1))) {
-                    Py_DECREF(retobj);
-                    PyErr_SetString(PyExc_ValueError, "decoding error handler "
-                                    "must return (unicode, int) tuple");
-                    goto errorexit;
-                }
-                if (PyUnicode_GET_SIZE(retuni) > 0) {
-#define errorexit errorexit_cbpad
-                    size_t       retunisize;
-
-                    retunisize = PyUnicode_GET_DATA_SIZE(retuni);
-                    if (outlen < retunisize)
-                        RESIZE_OUTBUFFER(errno == EINVAL || retunisize > estep
-                                         ? retunisize - outlen : estep);
-
-                    memcpy(out, PyUnicode_AS_DATA(retuni), retunisize);
-                    out += retunisize;
-                    outlen -= retunisize;
-#undef errorexit
-                    if (0) {
-errorexit_cbpad:        Py_DECREF(retobj);
-                        goto errorexit;
-                    }
-                }
-
-                newpos = PyInt_AS_LONG(PyTuple_GET_ITEM(retobj, 1));
-                Py_DECREF(retobj);
-
-                if (newpos < 0)
-                    newpos = inplen_total + newpos;
-                if (newpos < 0 || newpos > inplen_total) {
-                    PyErr_Format(PyExc_IndexError,
-                       "position %ld from error handler out of bounds",
-                       newpos);
-                    goto errorexit;
-                }
-                if (newpos == inplen_total)
-                    break;
-                inp = inp_top + newpos;
-                inplen = inplen_total - newpos;
-            }
-        } else
-            break;
-    }
-#undef RESIZE_OUTBUFFER
-
-    {
-        PyObject    *rettup;
-        int          finalsize;
-
-        finalsize = (int)(out - out_top);
-        if (finalsize != outlen_total) {
-            if (PyUnicode_Resize(&outputobj, finalsize / Py_UNICODE_SIZE)
-               == -1)
-                goto errorexit;
-        }
-
-        if (errorcb > ERROR_MAX) {
-            Py_DECREF(errorcb);
-        }
-        Py_XDECREF(exceptionobj);
-
-        rettup = PyTuple_New(2);
-        if (rettup == NULL) {
-            Py_DECREF(outputobj);
-            return NULL;
-        }
-        PyTuple_SET_ITEM(rettup, 0, outputobj);
-        PyTuple_SET_ITEM(rettup, 1, PyInt_FromLong(inplen_total));
-        return rettup;
-    }
-
-errorexit:
-    Py_XDECREF(outputobj);
-    if (errorcb > ERROR_MAX) {
-        Py_DECREF(errorcb);
-    }
-    Py_XDECREF(exceptionobj);
-
-    return NULL;
-}
-
-static struct PyMethodDef iconvcodec_methods[] = {
-    {"encode",      (PyCFunction)iconvcodec_encode,
-                    METH_VARARGS | METH_KEYWORDS,
-                    iconvcodec_encode__doc__},
-    {"decode",      (PyCFunction)iconvcodec_decode,
-                    METH_VARARGS | METH_KEYWORDS,
-                    iconvcodec_decode__doc__},
-    {NULL, NULL},
-};
-
-static PyObject *
-iconvcodec_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
-{
-    PyObject            *encobj = NULL;
-    iconvcodecObject    *new = NULL;
-
-    new = (iconvcodecObject *)type->tp_alloc(type, 0);
-    if (new == NULL)
-        return NULL;
-
-    new->encoding = NULL;
-    new->enchdl = new->dechdl = (iconv_t)(-1);
-
-    encobj = PyObject_GetAttrString((PyObject *)new, "encoding");
-    if (encobj == NULL) {
-        PyErr_Clear();
-        new->encoding = PyMem_Malloc(sizeof(DEFAULT_ENCODING));
-        strcpy(new->encoding, DEFAULT_ENCODING);
-    } else if (!PyString_Check(encobj)) {
-        Py_DECREF(encobj);
-        PyErr_SetString(PyExc_TypeError, 
-                        "`encoding' attribute must be a string.");
-        goto errorexit;
-    } else {
-        new->encoding = PyMem_Malloc(PyString_GET_SIZE(encobj) + 1);
-        strcpy(new->encoding, PyString_AS_STRING(encobj));
-        Py_DECREF(encobj);
-    }
-
-    new->dechdl = iconv_open(UNICODE_ENCODING, new->encoding);
-    if (new->dechdl == (iconv_t)(-1)) {
-        PyErr_SetString(PyExc_ValueError, "unsupported decoding");
-        goto errorexit;
-    }
-
-    new->enchdl = iconv_open(new->encoding, UNICODE_ENCODING);
-    if (new->enchdl == (iconv_t)(-1)) {
-        PyErr_SetString(PyExc_ValueError, "unsupported encoding");
-        iconv_close(new->dechdl);
-        new->dechdl = (iconv_t)(-1);
-        goto errorexit;
-    }
-
-    return (PyObject *)new;
-
-errorexit:
-    Py_XDECREF(new);
-
-    return NULL;
-}
-
-static void
-iconvcodec_dealloc(iconvcodecObject *self)
-{
-    if (self->enchdl != (iconv_t)-1)
-        iconv_close(self->enchdl);
-    if (self->dechdl != (iconv_t)-1)
-        iconv_close(self->dechdl);
-    if (self->encoding != NULL)
-        PyMem_Free(self->encoding);
-
-    self->ob_type->tp_free((PyObject *)self);
-}
-
-static PyObject *
-iconvcodec_repr(PyObject *self)
-{
-    return PyString_FromFormat("<iconvcodec encoding='%s'>",
-                    ((iconvcodecObject *)self)->encoding);
-}
-
-static PyTypeObject iconvcodec_Type = {
-    PyObject_HEAD_INIT(NULL)
-    0,                              /* Number of items for varobject */
-    "iconvcodec",                   /* Name of this type */
-    sizeof(iconvcodecObject),       /* Basic object size */
-    0,                              /* Item size for varobject */
-    (destructor)iconvcodec_dealloc, /* tp_dealloc */
-    0,                              /* tp_print */
-    0,                              /* tp_getattr */
-    0,                              /* tp_setattr */
-    0,                              /* tp_compare */
-    iconvcodec_repr,                /* tp_repr */
-    0,                              /* tp_as_number */
-    0,                              /* tp_as_sequence */
-    0,                              /* tp_as_mapping */
-    0,                              /* tp_hash */
-    0,                              /* tp_call */
-    0,                              /* tp_str */
-    PyObject_GenericGetAttr,        /* tp_getattro */
-    0,                              /* tp_setattro */
-    0,                              /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,    /* tp_flags */
-    iconvcodec_doc,                 /* tp_doc */
-    0,                              /* tp_traverse */
-    0,                              /* tp_clear */
-    0,                              /* tp_richcompare */
-    0,                              /* tp_weaklistoffset */
-    0,                              /* tp_iter */
-    0,                              /* tp_iterext */
-    iconvcodec_methods,             /* tp_methods */
-    0,                              /* tp_members */
-    0,                              /* tp_getset */
-    0,                              /* tp_base */
-    0,                              /* tp_dict */
-    0,                              /* tp_descr_get */
-    0,                              /* tp_descr_set */
-    0,                              /* tp_dictoffset */
-    0,                              /* tp_init */
-    PyType_GenericAlloc,            /* tp_alloc */
-    iconvcodec_new,                 /* tp_new */
-    PyObject_Del,                   /* tp_free */
-};
-
-static struct PyMethodDef _iconv_codec_methods[] = {
-    {NULL, NULL},
-};
-
-void
-init_iconv_codec(void)
-{
-    PyObject *m;
-
-    char in = '0';
-    char *inptr = &in;
-    size_t insize = 1;
-    Py_UNICODE out = 0;
-    char *outptr = (char *)&out;
-    size_t outsize = sizeof(out);
-    size_t res;
-
-    iconv_t hdl = iconv_open(UNICODE_ENCODING, "ISO-8859-1");
-
-    if (hdl == (iconv_t)-1) {
-        PyErr_SetString(PyExc_RuntimeError,
-         "can't initialize the _iconv_codec module: iconv_open() failed");
-       return;
-    }
-
-    res = iconv(hdl, &inptr, &insize, &outptr, &outsize);
-    if (res == (size_t)-1) {
-        PyErr_SetString(PyExc_RuntimeError,
-         "can't initialize the _iconv_codec module: iconv() failed");
-       return;
-    }
-
-    /* Check whether conv() returned native endianess or not for the chosen
-       encoding */
-    if (out == 0x30)
-       byteswap = 0;
-#if Py_UNICODE_SIZE == 2
-    else if (out == 0x3000)
-#else
-    else if (out == 0x30000000)
-#endif
-       byteswap = 1;
-    else {
-       iconv_close(hdl);
-        PyErr_SetString(PyExc_RuntimeError,
-         "can't initialize the _iconv_codec module: mixed endianess");
-       return;
-    }
-    iconv_close(hdl);
-
-    iconvcodec_Type.ob_type = &PyType_Type;
-    m = Py_InitModule("_iconv_codec", _iconv_codec_methods);
-
-    PyModule_AddStringConstant(m, "__version__", (char*)__version__);
-    Py_INCREF(&iconvcodec_Type);
-    PyModule_AddObject(m, "iconvcodec", (PyObject *)(&iconvcodec_Type));
-    PyModule_AddStringConstant(m, "internal_encoding", UNICODE_ENCODING);
-
-    if (PyErr_Occurred())
-        PyErr_SetString(PyExc_RuntimeError,
-                       "can't initialize the _iconv_codec module");
-}
-
-/*
- * ex: ts=8 sts=4 et
- * $Id$
- */
index 730e00c4c6ed16f0a6706c942daa7ae4257d2a66..b6866b6f48eef7bdea811b3eba1adea0cea1c493 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -622,24 +622,6 @@ class PyBuildExt(build_ext):
                 exts.append( Extension('nis', ['nismodule.c'],
                                        libraries = libs) )
 
-            # Hye-Shik Chang's iconv_codec C interface
-            iconv_incs = find_file('iconv.h', inc_dirs,
-                                   ['/usr/local/include', '/usr/pkg/include'])
-            iconv_libs = find_library_file(self.compiler, 'iconv', lib_dirs,
-                                           ['/usr/local/lib', '/usr/pkg/lib'])
-                                           
-            if platform not in ['darwin'] and iconv_incs is not None:
-                if iconv_libs is not None:
-                    iconv_libraries = ['iconv']
-                else:
-                    iconv_libraries = [] # in libc
-
-                exts.append( Extension('_iconv_codec',
-                                       ['_iconv_codec.c'],
-                                       include_dirs = iconv_incs,
-                                       library_dirs = iconv_libs,
-                                       libraries = iconv_libraries), )
-
         # Curses support, requring the System V version of curses, often
         # provided by the ncurses library.
         if platform == 'sunos4':