if dst_type == PyrexTypes.c_char_ptr_type:
self.type = PyrexTypes.c_char_ptr_type
return self
-
+ elif dst_type == PyrexTypes.c_uchar_ptr_type:
+ self.type = PyrexTypes.c_char_ptr_type
+ return CastNode(self, PyrexTypes.c_uchar_ptr_type)
+
if dst_type.is_int:
if not self.type.is_pyobject and len(self.entry.init) == 1:
return CharNode(self.pos, value=self.value)
CPtrType.__init__(self, c_char_type)
+class CUCharPtrType(CStringType, CPtrType):
+ # C 'unsigned char *' type.
+
+ pymemberdef_typecode = "T_STRING"
+
+ to_py_function = "__Pyx_PyBytes_FromUString"
+ from_py_function = "__Pyx_PyBytes_AsUString"
+
+ def __init__(self):
+ CPtrType.__init__(self, c_uchar_type)
+
+
class UnspecifiedType(PyrexType):
# Used as a placeholder until the type can be determined.
c_null_ptr_type = CNullPtrType(c_void_type)
c_char_array_type = CCharArrayType(None)
c_char_ptr_type = CCharPtrType()
+c_uchar_ptr_type = CUCharPtrType()
c_utf8_char_array_type = CUTF8CharArrayType(None)
c_char_ptr_ptr_type = CPtrType(c_char_ptr_type)
c_int_ptr_type = CPtrType(c_int_type)
# Construct a C pointer type.
if base_type is c_char_type:
return c_char_ptr_type
+ elif base_type is c_uchar_type:
+ return c_uchar_ptr_type
elif base_type is error_type:
return error_type
else:
#define __Pyx_PyBytes_AsString PyBytes_AsString
#endif
+#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s)
+#define __Pyx_PyBytes_AsUString(s) ((unsigned char*) __Pyx_PyBytes_AsString(s))
+
#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
static INLINE int __Pyx_PyObject_IsTrue(PyObject*);
static INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
--- /dev/null
+__doc__ = u"""
+>>> py_string1.decode('ASCII') == 'test toast taste'
+True
+>>> py_string1 == py_string2 == py_string3
+True
+"""
+
+cdef unsigned char* some_c_unstring = 'test toast taste'
+
+py_string1 = some_c_unstring
+
+cdef unsigned char* c_unstring_from_py = py_string1
+
+py_string2 = c_unstring_from_py
+
+cdef char* c_string_from_py = py_string2
+
+py_string3 = c_string_from_py