aboutsummaryrefslogtreecommitdiff
path: root/libobjc/class.c
diff options
context:
space:
mode:
authorNicola Pero <nicola.pero@meta-innovation.com>2010-12-21 22:49:37 +0000
committerNicola Pero <nicola@gcc.gnu.org>2010-12-21 22:49:37 +0000
commit1575c9deaec2277485cfa6f870826c9bcfe9172d (patch)
tree7b230e110e8855f7e0345ca7c88cdfb6276368f2 /libobjc/class.c
parent2fdd3e04687fa391b6f7b0941f4152e6a760622a (diff)
In libobjc/: 2010-12-21 Nicola Pero <nicola.pero@meta-innovation.com>
In libobjc/: 2010-12-21 Nicola Pero <nicola.pero@meta-innovation.com> PR libobjc/18764 * class.c (__objc_add_class_to_hash): Return YES if the class was added, and NO if it already existed. * init.c (__objc_init_class): If __objc_add_class_to_hash returns NO, then abort the program with an error message. * objc-private/runtime.h (__objc_add_class_to_hash): Updated declaration. From-SVN: r168139
Diffstat (limited to 'libobjc/class.c')
-rw-r--r--libobjc/class.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/libobjc/class.c b/libobjc/class.c
index cf8e4c42728..b9e8730beb2 100644
--- a/libobjc/class.c
+++ b/libobjc/class.c
@@ -446,11 +446,12 @@ __objc_init_class_tables (void)
}
/* This function adds a class to the class hash table, and assigns the
- class a number, unless it's already known. */
-void
+ class a number, unless it's already known. Return 'YES' if the
+ class was added. Return 'NO' if the class was already known. */
+BOOL
__objc_add_class_to_hash (Class class)
{
- Class h_class;
+ Class existing_class;
objc_mutex_lock (__objc_runtime_mutex);
@@ -461,21 +462,28 @@ __objc_add_class_to_hash (Class class)
assert (CLS_ISCLASS (class));
/* Check to see if the class is already in the hash table. */
- h_class = class_table_get_safe (class->name);
- if (! h_class)
+ existing_class = class_table_get_safe (class->name);
+
+ if (existing_class)
+ {
+ objc_mutex_unlock (__objc_runtime_mutex);
+ return NO;
+ }
+ else
{
- /* The class isn't in the hash table. Add the class and assign a class
- number. */
+ /* The class isn't in the hash table. Add the class and assign
+ a class number. */
static unsigned int class_number = 1;
-
+
CLS_SETNUMBER (class, class_number);
CLS_SETNUMBER (class->class_pointer, class_number);
++class_number;
class_table_insert (class->name, class);
- }
- objc_mutex_unlock (__objc_runtime_mutex);
+ objc_mutex_unlock (__objc_runtime_mutex);
+ return YES;
+ }
}
Class