diff --git a/class_table.c b/class_table.c index 843d5e7..8c5e2f8 100644 --- a/class_table.c +++ b/class_table.c @@ -136,4 +136,23 @@ void __objc_resolve_class_links(void) { objc_resolve_class(class); } + UNLOCK(__objc_runtime_mutex); } + +int objc_getClassList(Class *buffer, int bufferLen) +{ + if (buffer == NULL) + { + return class_table->table_used; + } + int count = 0; + struct class_table_internal_table_enumerator *e; + Class next; + while (count < bufferLen && + (next = class_table_internal_next(class_table, &e))) + { + buffer[count++] = next; + } + return count; +} + diff --git a/runtime.c b/runtime.c index 5db8dc2..171850f 100644 --- a/runtime.c +++ b/runtime.c @@ -650,31 +650,6 @@ id objc_getClass(const char *name) return (id)objc_get_class(name); } -int objc_getClassList(Class *buffer, int bufferLen) -{ - int count = 0; - if (buffer == NULL) - { - void *state = NULL; - while(Nil != objc_next_class(&state)) - { - count++; - } - } - else - { - Class nextClass; - void *state = NULL; - while (Nil != (nextClass = objc_next_class(&state)) && bufferLen > 0) - { - count++; - bufferLen--; - *(buffer++) = nextClass; - } - } - return count; -} - id objc_getMetaClass(const char *name) { Class cls = (Class)objc_getClass(name);