mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-30 08:21:25 +00:00
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:
parent
cb8bfd40eb
commit
cdc8b38bb9
4 changed files with 37 additions and 86 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue