diff options
author | Andrew Udvare | 2014-01-31 15:24:56 -0800 |
---|---|---|
committer | Nikias Bassen | 2014-02-11 17:27:12 +0100 |
commit | f3857e207b5339a70b834d0575021f57432e272d (patch) | |
tree | 82de87a50a5def4e5751039446e67d5a39bfb33e /cython/plist.pyx | |
parent | cb1bb14ae178af13e2fb2d9da78df16bebef23b6 (diff) | |
download | libplist-f3857e207b5339a70b834d0575021f57432e272d.tar.gz libplist-f3857e207b5339a70b834d0575021f57432e272d.tar.bz2 |
Hopefully bridge between Python 3 and 2 for strings
Diffstat (limited to 'cython/plist.pyx')
-rw-r--r-- | cython/plist.pyx | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/cython/plist.pyx b/cython/plist.pyx index 4eccdb1..95f9be7 100644 --- a/cython/plist.pyx +++ b/cython/plist.pyx @@ -2,6 +2,15 @@ cimport cpython cimport libc.stdlib from libc.stdint cimport * +cdef _from_string_and_size(char *s, size_t length): + if PY_MAJOR_VERSION < 3 or s == NULL: + return s[:length] + + if s == NULL: + return s[:length] + else: + return s[:length].decode("ascii") + cdef extern from *: ctypedef enum plist_type: PLIST_BOOLEAN, @@ -115,7 +124,7 @@ cdef class Node: plist_to_bin(self._c_node, &out, &length) try: - return cpython.PyString_FromStringAndSize(out, length) + return _from_string_and_size(out, length) finally: if out != NULL: libc.stdlib.free(out) @@ -550,7 +559,7 @@ cdef class Data(Node): plist_get_data_val(self._c_node, &val, &length) try: - return cpython.PyString_FromStringAndSize(val, length) + return _from_string_and_size(val, length) finally: libc.stdlib.free(val) |