diff options
| author | 2014-01-31 15:24:56 -0800 | |
|---|---|---|
| committer | 2014-02-11 17:27:12 +0100 | |
| commit | f3857e207b5339a70b834d0575021f57432e272d (patch) | |
| tree | 82de87a50a5def4e5751039446e67d5a39bfb33e /cython | |
| 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')
| -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 | |||
| 2 | cimport libc.stdlib | 2 | cimport libc.stdlib |
| 3 | from libc.stdint cimport * | 3 | from libc.stdint cimport * |
| 4 | 4 | ||
| 5 | cdef _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 | |||
| 5 | cdef extern from *: | 14 | cdef 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 | ||
