Changeset 3680:31786d1b7a3f in livinglogic.python.xist

Show
Ignore:
Timestamp:
01/08/09 14:25:16 (11 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Simplify unescape by using a simple char * as the buffer.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/ll/_url.c

    r3679 r3680  
    121121    char *in; 
    122122    int len; 
    123     PyObject *res; 
     123    char *res; 
    124124    int pos = 0; 
    125     char *start; 
    126125    char *out; 
    127126    PyObject *uni; 
     
    130129        return NULL; 
    131130 
    132     res = PyString_FromStringAndSize(NULL, len); 
     131    res = PyMem_Malloc(len); 
    133132    if (!res) 
    134133        return NULL; 
    135134 
    136     start = out = PyString_AS_STRING(res); 
     135    out = res; 
    137136    while (pos<len) 
    138137    { 
     
    147146                if (PyErr_Warn(PyExc_UserWarning, buffer)) 
    148147                { 
    149                     Py_DECREF(res); 
     148                    PyMem_Free(res); 
    150149                    return NULL; 
    151150                } 
     
    163162                    if (PyErr_Warn(PyExc_UserWarning, buffer) < 0) 
    164163                    { 
    165                         Py_DECREF(res); 
     164                        PyMem_Free(res); 
    166165                        return NULL; 
    167166                    } 
     
    189188                    if (PyErr_Warn(PyExc_UserWarning, buffer) < 0) 
    190189                    { 
    191                         Py_DECREF(res); 
     190                        PyMem_Free(res); 
    192191                        return NULL; 
    193192                    } 
     
    208207    } 
    209208 
    210     uni = PyUnicode_Decode(start, out-start, "utf-8", NULL); 
     209    uni = PyUnicode_Decode(res, out-res, "utf-8", NULL); 
    211210    if (uni || (!PyErr_ExceptionMatches(PyExc_UnicodeDecodeError))) 
    212211    { 
    213         Py_DECREF(res); 
     212        PyMem_Free(res); 
    214213        return uni; 
    215214    } 
     
    217216    if (PyErr_Warn(PyExc_UserWarning, "malformed utf-8") < 0) 
    218217    { 
    219         Py_DECREF(res); 
    220         return NULL; 
    221     } 
    222     uni = PyUnicode_Decode(start, out-start, "latin-1", NULL); 
    223     Py_DECREF(res); 
     218        PyMem_Free(res); 
     219        return NULL; 
     220    } 
     221    uni = PyUnicode_Decode(res, out-res, "latin-1", NULL); 
     222    PyMem_Free(res); 
    224223    return uni; 
    225224}