summaryrefslogtreecommitdiffstats
path: root/cython
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 /cython
parentcb1bb14ae178af13e2fb2d9da78df16bebef23b6 (diff)
downloadlibplist-f3857e207b5339a70b834d0575021f57432e272d.tar.gz
libplist-f3857e207b5339a70b834d0575021f57432e272d.tar.bz2
Hopefully bridge between Python 3 and 2 for strings
Diffstat (limited to 'cython')
-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
2cimport libc.stdlib 2cimport libc.stdlib
3from libc.stdint cimport * 3from libc.stdint cimport *
4 4
5cdef _from_string_and_size(char *s, size_t length):
6 if PY_MAJOR_VERSION < 3 or s == NULL:
7 return s[:length]
8
9 if s == NULL:
10 return s[:length]
11 else:
12 return s[:length].decode("ascii")
13
5cdef extern from *: 14cdef extern from *:
6 ctypedef enum plist_type: 15 ctypedef enum plist_type:
7 PLIST_BOOLEAN, 16 PLIST_BOOLEAN,
@@ -115,7 +124,7 @@ cdef class Node:
115 plist_to_bin(self._c_node, &out, &length) 124 plist_to_bin(self._c_node, &out, &length)
116 125
117 try: 126 try:
118 return cpython.PyString_FromStringAndSize(out, length) 127 return _from_string_and_size(out, length)
119 finally: 128 finally:
120 if out != NULL: 129 if out != NULL:
121 libc.stdlib.free(out) 130 libc.stdlib.free(out)
@@ -550,7 +559,7 @@ cdef class Data(Node):
550 plist_get_data_val(self._c_node, &val, &length) 559 plist_get_data_val(self._c_node, &val, &length)
551 560
552 try: 561 try:
553 return cpython.PyString_FromStringAndSize(val, length) 562 return _from_string_and_size(val, length)
554 finally: 563 finally:
555 libc.stdlib.free(val) 564 libc.stdlib.free(val)
556 565