more changes for new runtime

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@29828 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
rfm 2010-03-04 08:15:08 +00:00
parent cb8bfd40eb
commit cdc8b38bb9
4 changed files with 37 additions and 86 deletions

View file

@ -117,7 +117,7 @@ static void
objc_updateDtableForClassContainingMethod(Method m)
{
Class nextClass = Nil;
void *state;
void *state = NULL;
SEL sel = method_getName(m);
while (Nil != (nextClass = objc_next_class(&state)))
@ -268,7 +268,6 @@ class_copyIvarList(Class cls, unsigned int *outCount)
{
struct objc_ivar_list *ivarlist = cls->ivars;
unsigned int count = 0;
unsigned int i;
Ivar *list;
if (ivarlist != NULL)
@ -284,11 +283,10 @@ class_copyIvarList(Class cls, unsigned int *outCount)
return NULL;
}
list = malloc(count * sizeof(struct objc_ivar *));
for (i = 0; i < ivarlist->ivar_count; i++)
{
list[i] = &(ivarlist->ivar_list[i]);
}
list = malloc((count + 1) * sizeof(struct objc_ivar *));
list[count] = NULL;
memcpy(list, ivarlist->ivar_list,
ivarlist->ivar_count * sizeof(struct objc_ivar *));
return list;
}
@ -297,11 +295,9 @@ class_copyMethodList(Class cls, unsigned int *outCount)
{
unsigned int count = 0;
Method *list;
Method *copyDest;
struct objc_method_list *methods;
for (methods = cls->methods; methods != NULL;
methods = methods->method_next)
for (methods = cls->methods; methods != NULL; methods = methods->method_next)
{
count += methods->method_count;
}
@ -314,19 +310,14 @@ class_copyMethodList(Class cls, unsigned int *outCount)
return NULL;
}
list = malloc(count * sizeof(struct objc_method *));
copyDest = list;
for (methods = cls->methods; methods != NULL;
methods = methods->method_next)
list = malloc((count + 1) * sizeof(struct objc_method *));
list[count] = NULL;
count = 0;
for (methods = cls->methods; methods != NULL; methods = methods->method_next)
{
unsigned int i;
for (i = 0; i < methods->method_count; i++)
{
copyDest[i] = &(methods->method_list[i]);
}
copyDest += methods->method_count;
memcpy(&list[count], methods->method_list,
methods->method_count * sizeof(struct objc_method *));
count += methods->method_count;
}
return list;
@ -337,29 +328,30 @@ class_copyProtocolList(Class cls, unsigned int *outCount)
{
struct objc_protocol_list *protocolList = cls->protocols;
struct objc_protocol_list *list;
int listSize = 0;
unsigned int count = 0;
Protocol **protocols;
int index;
for (list = protocolList; list != NULL; list = list->next)
{
listSize += list->count;
count += list->count;
}
if (listSize == 0)
if (outCount != NULL)
{
*outCount = count;
}
if (count == 0)
{
*outCount = 0;
return NULL;
}
protocols = calloc(listSize, sizeof(Protocol *) + 1);
index = 0;
protocols = malloc((count + 1) * sizeof(Protocol *));
protocols[count] = NULL;
count = 0;
for (list = protocolList; list != NULL; list = list->next)
{
memcpy(&protocols[index], list->list, list->count * sizeof(Protocol *));
index += list->count;
memcpy(&protocols[count], list->list, list->count * sizeof(Protocol *));
count += list->count;
}
protocols[listSize] = NULL;
*outCount = listSize + 1;
return protocols;
}