X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fcustom-attrs.c;h=b30f3d8ef594b24682e5917cd318776d3784a96a;hb=aefc06ddf682848e3a6a4e0a534f443b335a6167;hp=d76c0376adc8620dd1a35a940bf35eb631b93f80;hpb=a342bb00ca0e7b7c5267845f45b928055f412b2c;p=mono.git diff --git a/mono/metadata/custom-attrs.c b/mono/metadata/custom-attrs.c index d76c0376adc..b30f3d8ef59 100644 --- a/mono/metadata/custom-attrs.c +++ b/mono/metadata/custom-attrs.c @@ -1434,8 +1434,11 @@ mono_custom_attrs_has_attr (MonoCustomAttrInfo *ainfo, MonoClass *attr_klass) { int i; for (i = 0; i < ainfo->num_attrs; ++i) { - MonoClass *klass = ainfo->attrs [i].ctor->klass; - if (mono_class_has_parent (klass, attr_klass) || (MONO_CLASS_IS_INTERFACE (attr_klass) && mono_class_is_assignable_from (attr_klass, klass))) + MonoCustomAttrEntry *centry = &ainfo->attrs[i]; + if (centry->ctor == NULL) + continue; + MonoClass *klass = centry->ctor->klass; + if (klass == attr_klass || mono_class_has_parent (klass, attr_klass) || (MONO_CLASS_IS_INTERFACE (attr_klass) && mono_class_is_assignable_from (attr_klass, klass))) return TRUE; } return FALSE; @@ -1453,26 +1456,25 @@ mono_custom_attrs_get_attr (MonoCustomAttrInfo *ainfo, MonoClass *attr_klass) MonoObject* mono_custom_attrs_get_attr_checked (MonoCustomAttrInfo *ainfo, MonoClass *attr_klass, MonoError *error) { - int i, attr_index; - MonoArray *attrs; + int i; + MonoCustomAttrEntry *centry = NULL; + + g_assert (attr_klass != NULL); mono_error_init (error); - attr_index = -1; for (i = 0; i < ainfo->num_attrs; ++i) { - MonoClass *klass = ainfo->attrs [i].ctor->klass; - if (mono_class_has_parent (klass, attr_klass)) { - attr_index = i; + centry = &ainfo->attrs[i]; + if (centry->ctor == NULL) + continue; + MonoClass *klass = centry->ctor->klass; + if (attr_klass == klass || mono_class_is_assignable_from (attr_klass, klass)) break; - } } - if (attr_index == -1) + if (centry == NULL) return NULL; - attrs = mono_custom_attrs_construct_by_type (ainfo, NULL, error); - if (!mono_error_ok (error)) - return NULL; - return mono_array_get (attrs, MonoObject*, attr_index); + return create_custom_attr (ainfo->image, centry->ctor, centry->data, centry->data_size, error); } /*