[Python-checkins] python/dist/src/Mac/Modules/cf pycfbridge.c,1.4,1.5

jackjansen@sourceforge.net jackjansen@sourceforge.net
2002年5月13日 14:23:12 -0700


Update of /cvsroot/python/python/dist/src/Mac/Modules/cf
In directory usw-pr-cvs1:/tmp/cvs-serv21827/Python/Mac/Modules/cf
Modified Files:
	pycfbridge.c 
Log Message:
Added typechecking to the individual python->CF converters, so we can use them in the CF object initializers safely.
Index: pycfbridge.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Mac/Modules/cf/pycfbridge.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** pycfbridge.c	8 May 2002 22:13:51 -0000	1.4
--- pycfbridge.c	13 May 2002 21:23:10 -0000	1.5
***************
*** 173,176 ****
--- 173,182 ----
 	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);
***************
*** 206,209 ****
--- 212,221 ----
 	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,
***************
*** 242,249 ****
--- 254,263 ----
 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);
***************
*** 267,271 ****
 			
 	PyErr_Format(PyExc_TypeError,
! 		 "Cannot convert %.500s objects to CF",
 				 src->ob_type->tp_name);
 	return 0;
--- 281,285 ----
 			
 	PyErr_Format(PyExc_TypeError,
! 		 "Cannot convert %.500s objects to CFType",
 				 src->ob_type->tp_name);
 	return 0;
***************
*** 292,296 ****
 err:
 	PyErr_Format(PyExc_TypeError,
! 		 "Cannot convert %.500s objects to CF",
 				 src->ob_type->tp_name);
 	return 0;
--- 306,310 ----
 err:
 	PyErr_Format(PyExc_TypeError,
! 		 "Cannot convert %.500s objects to CFString",
 				 src->ob_type->tp_name);
 	return 0;

AltStyle によって変換されたページ (->オリジナル) /