diff --git a/protocol.c b/protocol.c index e9b80ce..438a489 100644 --- a/protocol.c +++ b/protocol.c @@ -11,7 +11,7 @@ // Get the functions for string hashing #include "string_hash.h" -static int protocol_compare(const char *name, +static int protocol_compare(const char *name, const struct objc_protocol2 *protocol) { return string_compare(name, protocol->name); @@ -31,7 +31,7 @@ static protocol_table *known_protocol_table; void init_protocol_table(void) { protocol_initialize(&known_protocol_table, 128); -} +} static void protocol_table_insert(const struct objc_protocol2 *protocol) { @@ -47,10 +47,10 @@ static id ObjC2ProtocolClass = 0; static int isEmptyProtocol(struct objc_protocol2 *aProto) { - int isEmpty = - ((aProto->instance_methods == NULL) || + int isEmpty = + ((aProto->instance_methods == NULL) || (aProto->instance_methods->count == 0)) && - ((aProto->class_methods == NULL) || + ((aProto->class_methods == NULL) || (aProto->class_methods->count == 0)) && ((aProto->protocol_list == NULL) || (aProto->protocol_list->count == 0)); @@ -67,7 +67,7 @@ static int isEmptyProtocol(struct objc_protocol2 *aProto) // FIXME: Make p1 adopt all of the stuff in p2 static void makeProtocolEqualToProtocol(struct objc_protocol2 *p1, - struct objc_protocol2 *p2) + struct objc_protocol2 *p2) { #define COPY(x) p1->x = p2->x COPY(instance_methods); @@ -90,7 +90,7 @@ static struct objc_protocol2 *unique_protocol(struct objc_protocol2 *aProto) { ObjC2ProtocolClass = objc_getClass("Protocol2"); } - struct objc_protocol2 *oldProtocol = + struct objc_protocol2 *oldProtocol = protocol_for_name(aProto->name); if (NULL == oldProtocol) { @@ -166,7 +166,7 @@ static BOOL init_protocols(struct objc_protocol_list *protocols) // Protocols in the protocol list have their class pointers set to the // version of the protocol class that they expect. - enum protocol_version version = + enum protocol_version version = (enum protocol_version)(uintptr_t)aProto->isa; switch (version) { @@ -309,17 +309,16 @@ get_method_list(Protocol *p, struct objc_method_description *protocol_copyMethodDescriptionList(Protocol *p, BOOL isRequiredMethod, BOOL isInstanceMethod, unsigned int *count) { - if (NULL == p) { return NULL; } - struct objc_method_description_list *list = + if ((NULL == p) || (NULL == count)){ return NULL; } + struct objc_method_description_list *list = get_method_list(p, isRequiredMethod, isInstanceMethod); *count = 0; if (NULL == list || list->count == 0) { return NULL; } *count = list->count; - struct objc_method_description *out = - calloc(sizeof(struct objc_method_description_list), list->count); - - for (int i=0 ; icount ; i++) + struct objc_method_description *out = + calloc(sizeof(struct objc_method_description), list->count); + for (int i=0 ; i < (list->count) ; i++) { out[i].name = sel_registerTypedName_np(list->methods[i].name, list->methods[i].types); @@ -403,7 +402,7 @@ objc_property_t protocol_getProperty(Protocol *protocol, return NULL; } Protocol2 *p = (Protocol2*)protocol; - struct objc_property_list *properties = + struct objc_property_list *properties = isRequiredProperty ? p->properties : p->optional_properties; while (NULL != properties) { @@ -421,20 +420,20 @@ objc_property_t protocol_getProperty(Protocol *protocol, } -struct objc_method_description +struct objc_method_description protocol_getMethodDescription(Protocol *p, SEL aSel, BOOL isRequiredMethod, BOOL isInstanceMethod) { struct objc_method_description d = {0,0}; - struct objc_method_description_list *list = + struct objc_method_description_list *list = get_method_list(p, isRequiredMethod, isInstanceMethod); if (NULL == list) { return d; } - // TODO: We could make this much more efficient if + // TODO: We could make this much more efficient if for (int i=0 ; icount ; i++) { SEL s = sel_registerTypedName_np(list->methods[i].name, 0); @@ -464,7 +463,7 @@ BOOL protocol_isEqual(Protocol *p, Protocol *other) { return NO; } - if (p == other || + if (p == other || p->name == other->name || 0 == strcmp(p->name, other->name)) {