diff options
author | Campbell Barton <ideasman42@gmail.com> | 2009-03-05 19:24:30 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2009-03-05 19:24:30 +0300 |
commit | c3df1685398dd22d2f1ff477794dfdb3354d2629 (patch) | |
tree | d30c70208cdb082823531bc3860f1199216200b2 /source/blender/python/intern | |
parent | a7c4009267afe756ff0fa1a3935ae13eee02b1e3 (diff) |
PyRNA API: some RNA types were crashing on looping, also return None rather then an RNA struct when the ptr->data is NULL
Diffstat (limited to 'source/blender/python/intern')
-rw-r--r-- | source/blender/python/intern/bpy_rna.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 11a95646554..9c57311bc44 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -595,8 +595,7 @@ static PyObject *pyrna_struct_getattro( BPy_StructRNA * self, PyObject *pyname ) ret = PyDict_New(); for(; iter.valid; RNA_property_collection_next(&iter)) { - nameprop= RNA_struct_name_property(&iter.ptr); - if(iter.ptr.data && nameprop) { + if(iter.ptr.data && (nameprop = RNA_struct_name_property(&iter.ptr))) { nameptr= RNA_property_string_get_alloc(&iter.ptr, nameprop, name, sizeof(name)); PyDict_SetItemString(ret, nameptr, Py_None); @@ -651,8 +650,7 @@ PyObject *pyrna_prop_keys(BPy_PropertyRNA *self) RNA_property_collection_begin(&self->ptr, self->prop, &iter); for(; iter.valid; RNA_property_collection_next(&iter)) { - nameprop= RNA_struct_name_property(&iter.ptr); - if(iter.ptr.data && nameprop) { + if(iter.ptr.data && (nameprop = RNA_struct_name_property(&iter.ptr))) { nameptr= RNA_property_string_get_alloc(&iter.ptr, nameprop, name, sizeof(name)); /* add to python list */ @@ -687,8 +685,7 @@ PyObject *pyrna_prop_items(BPy_PropertyRNA *self) RNA_property_collection_begin(&self->ptr, self->prop, &iter); for(; iter.valid; RNA_property_collection_next(&iter)) { - nameprop= RNA_struct_name_property(&iter.ptr); - if(iter.ptr.data && nameprop) { + if(iter.ptr.data && (nameprop = RNA_struct_name_property(&iter.ptr))) { nameptr= RNA_property_string_get_alloc(&iter.ptr, nameprop, name, sizeof(name)); /* add to python list */ @@ -723,15 +720,10 @@ PyObject *pyrna_prop_values(BPy_PropertyRNA *self) RNA_property_collection_begin(&self->ptr, self->prop, &iter); for(; iter.valid; RNA_property_collection_next(&iter)) { - nameprop= RNA_struct_name_property(&iter.ptr); - if(iter.ptr.data && nameprop) { - - /* add to python list */ + if(iter.ptr.data && (nameprop = RNA_struct_name_property(&iter.ptr))) { item = pyrna_struct_CreatePyObject(&iter.ptr); PyList_Append(ret, item); Py_DECREF(item); - /* done */ - } } RNA_property_collection_end(&iter); @@ -997,6 +989,10 @@ PyTypeObject pyrna_prop_Type = { PyObject *pyrna_struct_CreatePyObject( PointerRNA *ptr ) { BPy_StructRNA *pyrna; + + if (ptr->data==NULL) { + Py_RETURN_NONE; + } pyrna = ( BPy_StructRNA * ) PyObject_NEW( BPy_StructRNA, &pyrna_struct_Type ); |