summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Andrew Udvare2014-01-31 15:24:56 -0800
committerGravatar Nikias Bassen2014-02-11 17:27:12 +0100
commitf3857e207b5339a70b834d0575021f57432e272d (patch)
tree82de87a50a5def4e5751039446e67d5a39bfb33e
parentcb1bb14ae178af13e2fb2d9da78df16bebef23b6 (diff)
downloadlibplist-f3857e207b5339a70b834d0575021f57432e272d.tar.gz
libplist-f3857e207b5339a70b834d0575021f57432e272d.tar.bz2
Hopefully bridge between Python 3 and 2 for strings
-rw-r--r--cython/plist.pyx13
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)