]> granicus.if.org Git - python/commitdiff
Added typechecking to the individual python->CF converters, so we can use them in...
authorJack Jansen <jack.jansen@cwi.nl>
Mon, 13 May 2002 21:23:10 +0000 (21:23 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Mon, 13 May 2002 21:23:10 +0000 (21:23 +0000)
Mac/Modules/cf/pycfbridge.c

index 1b7d7c5950f292872fc97aab1aabde91c6fe6b54..00efa725196519add0eb9e26b7b7d00331d19f65 100644 (file)
@@ -172,6 +172,12 @@ PyCF_Python2CF_sequence(PyObject *src, CFArrayRef *dst) {
        PyObject *item_py = NULL;
        int size, i;
        
+       if( !PySequence_Check(src) ) {
+               PyErr_Format(PyExc_TypeError,
+                       "Cannot convert %.500s objects to CFArray",
+                       src->ob_type->tp_name);
+               return 0;
+       }
        size = PySequence_Size(src);
        rv = CFArrayCreateMutable((CFAllocatorRef)NULL, size, &kCFTypeArrayCallBacks);
        if (rv == NULL) {
@@ -205,6 +211,12 @@ PyCF_Python2CF_mapping(PyObject *src, CFDictionaryRef *dst) {
        PyObject *item_py = NULL, *key_py = NULL, *value_py = NULL;
        int size, i;
        
+       if( !PyMapping_Check(src) ) {
+               PyErr_Format(PyExc_TypeError,
+                       "Cannot convert %.500s objects to CFDictionary",
+                       src->ob_type->tp_name);
+               return 0;
+       }
        size = PyMapping_Size(src);
        rv = CFDictionaryCreateMutable((CFAllocatorRef)NULL, size,
                                        &kCFTypeDictionaryKeyCallBacks,
@@ -241,10 +253,12 @@ err:
 int
 PyCF_Python2CF_simple(PyObject *src, CFTypeRef *dst) {
        
+#if 0
        if (PyObject_HasAttrString(src, "CFType")) {
                *dst = PyObject_CallMethod(src, "CFType", "");
                return (*dst != NULL);
        }
+#endif
        if (PyString_Check(src) || PyUnicode_Check(src)) 
                return PyCF_Python2CF_string(src, (CFStringRef *)dst);
        if (PyBool_Check(src)) {
@@ -266,7 +280,7 @@ PyCF_Python2CF_simple(PyObject *src, CFTypeRef *dst) {
        }
                        
        PyErr_Format(PyExc_TypeError,
-                 "Cannot convert %.500s objects to CF",
+                 "Cannot convert %.500s objects to CFType",
                                     src->ob_type->tp_name);
        return 0;
 }
@@ -291,7 +305,7 @@ PyCF_Python2CF_string(PyObject *src, CFStringRef *dst) {
        }
 err:
        PyErr_Format(PyExc_TypeError,
-                 "Cannot convert %.500s objects to CF",
+                 "Cannot convert %.500s objects to CFString",
                                     src->ob_type->tp_name);
        return 0;
 }