Ticket #4246: urlarg_3k.diff

File urlarg_3k.diff, 2.1 KB (added by loewis, 7 years ago)
  • _c_urlarg.c

    old new  
    1414}
    1515#endif
    1616
     17#if PY_MAJOR_VERSION < 3
     18#define Bytes_FromStringAndSize PyString_FromStringAndSize
     19#define Bytes_AsString PyString_AsString
     20#define _Bytes_Resize _PyString_Resize
     21#else
     22#define Bytes_FromStringAndSize PyBytes_FromStringAndSize
     23#define Bytes_AsString PyBytes_AsString
     24#define _Bytes_Resize _PyBytes_Resize
     25#endif
     26
    1727#ifdef __GNUC__
    1828#       define TM_INLINE inline
    1929#else
     
    4757        return NULL;
    4858    }
    4959    if (length == 0) {
    50         return PyString_FromStringAndSize("", 0);
     60        return Bytes_FromStringAndSize("", 0);
    5161    }
    5262    /* Allocating an output buffer of length will be sufficient,
    5363       as the output can only be smaller. We resize the output in the end. */
    54     str = PyString_FromStringAndSize(NULL, length);
     64    str = Bytes_FromStringAndSize(NULL, length);
    5565    if (str == NULL) {
    5666        return NULL;
    5767    }
    58     output = output_start = (unsigned char*)PyString_AsString(str);
     68    output = output_start = (unsigned char*)Bytes_AsString(str);
    5969    end = s + length;
    6070    s = s - 1;
    6171    while ((++s) < end) {
     
    102112        break;
    103113    }
    104114
    105     _PyString_Resize(&str, output-output_start);
     115    _Bytes_Resize(&str, output-output_start);
    106116    return str;
    107117}
    108118
     
    111121    {NULL, NULL} /* sentinel */
    112122};
    113123
    114 DL_EXPORT(void) init_c_urlarg(void)
     124static void
     125init(PyObject *m)
    115126{
    116     PyObject* m;
    117127    PyObject* d;
    118128    unsigned char i;
    119129
    120     m = Py_InitModule("_c_urlarg", _c_urlarg_methods);
    121130    d = PyModule_GetDict(m);
    122131
    123132    /* add our base exception class */
     
    145154    }
    146155}
    147156
     157#if PY_MAJOR_VERSION < 3
     158DL_EXPORT(void) init_c_urlarg(void)
     159{
     160    PyObject* m;
     161    m = Py_InitModule("_c_urlarg", _c_urlarg_methods);
     162    init(m);
     163}
     164#else
     165static struct PyModuleDef _module = {
     166        PyModuleDef_HEAD_INIT,
     167        "_c_urlarg",
     168        NULL,
     169        -1,
     170        _c_urlarg_methods,
     171        NULL,
     172        NULL,
     173        NULL,
     174        NULL
     175};
     176
     177PyMODINIT_FUNC
     178PyInit__c_urlarg(void)
     179{
     180    PyObject *m = PyModule_Create(&_module);
     181    if (!m)
     182        return NULL;
     183    init(m);
     184    return m;
     185}
     186#endif