diff options
| author | 2014-01-31 15:24:56 -0800 | |
|---|---|---|
| committer | 2014-02-11 17:27:12 +0100 | |
| commit | f3857e207b5339a70b834d0575021f57432e272d (patch) | |
| tree | 82de87a50a5def4e5751039446e67d5a39bfb33e | |
| parent | cb1bb14ae178af13e2fb2d9da78df16bebef23b6 (diff) | |
| download | libplist-f3857e207b5339a70b834d0575021f57432e272d.tar.gz libplist-f3857e207b5339a70b834d0575021f57432e272d.tar.bz2  | |
Hopefully bridge between Python 3 and 2 for strings
| -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)  | 
