From 4cce9f58b6fabc2f1e235499b92a44e5611b388f Mon Sep 17 00:00:00 2001 From: mirko Date: Tue, 3 Dec 2002 20:30:08 +0000 Subject: [PATCH] * Source/NSBundle.m ([NSBundle +initialize]): check for linked framework in two passes, first collect all the framework classes, then add it. The previous routine failed to add all the frameworks. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@15236 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 6 ++++++ Source/NSBundle.m | 36 +++++++++++++++++++++++++++++++++--- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 84d3060dd..99bf2f157 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2002-12-03 Mirko Viviani + + * Source/NSBundle.m ([NSBundle +initialize]): check for linked + framework in two passes, first collect all the framework classes, then + add it. The previous routine failed to add all the frameworks. + 2002-12-02 Adam Fedor * Port baseadd to MacOSX. diff --git a/Source/NSBundle.m b/Source/NSBundle.m index 34b55b43f..b20bdb041 100644 --- a/Source/NSBundle.m +++ b/Source/NSBundle.m @@ -619,10 +619,40 @@ _bundle_load_callback(Class theClass, struct objc_category *theCategory) free(classes); } #else - while ((class = objc_next_class(&state))) - { - [self _addFrameworkFromClass: class]; + { + int i, numBufClasses = 10, numClasses = 0; + Class *classes; + + classes = malloc(sizeof(Class) * numBufClasses); + + while ((class = objc_next_class(&state))) + { + int len = strlen (class->name); + + if (len > 12 * sizeof(char) + && !strncmp("NSFramework_", class->name, 12)) + classes[numClasses++] = class; + + if (numClasses == numBufClasses) + { + Class *ptr; + + numClasses += 10; + ptr = realloc(classes, sizeof(Class) * numClasses); + + if (!ptr) + break; + + classes = ptr; + } } + + for (i = 0; i < numClasses; i++) + { + [self _addFrameworkFromClass: classes[i]]; + } + free(classes); + } #endif #if 0 // _bundle_load_callback(class, NULL);