summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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)