python: Make the code compatibly with 3.2

The previous change used some 3.3-specific functions.
We still support 3.2 so revert to 3.2-compatible calls.

Reported-by: S.Çağlar Onur <caglar@10ur.org>
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
This commit is contained in:
Stéphane Graber 2013-04-24 17:24:26 +02:00
parent 6516ad8b01
commit 15451ecf74
No known key found for this signature in database
GPG Key ID: C638974D64792D67

View File

@ -49,18 +49,27 @@ convert_tuple_to_char_pointer_array(PyObject *argv) {
assert(pyobj != NULL);
char *str = NULL;
PyObject *pystr = NULL;
if (!PyUnicode_Check(pyobj)) {
PyErr_SetString(PyExc_ValueError, "Expected a string");
goto error;
}
str = PyUnicode_AsUTF8(pyobj);
if (!str) {
pystr = PyUnicode_AsUTF8String(pyobj);
if (!pystr) {
/* Maybe it wasn't UTF-8 encoded. An exception is already set. */
goto error;
}
str = PyBytes_AsString(pystr);
if (!str) {
/* Maybe pystr wasn't a valid object. An exception is already set.
*/
Py_DECREF(pystr);
goto error;
}
/* We must make a copy of str, because it points into internal memory
* which we do not own. Assume it's NULL terminated, otherwise we'd
* have to use PyUnicode_AsUTF8AndSize() and be explicit about copying
@ -71,6 +80,7 @@ convert_tuple_to_char_pointer_array(PyObject *argv) {
/* Do not decref pyobj since we stole a reference by using
* PyTuple_GET_ITEM().
*/
Py_DECREF(pystr);
if (result[i] == NULL) {
PyErr_SetNone(PyExc_MemoryError);
goto error;