aboutsummaryrefslogtreecommitdiff
path: root/gcc/objc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1995-05-16 17:46:23 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1995-05-16 17:46:23 -0400
commit2c89fb2e667691049f673f2429889e90834667c8 (patch)
tree3f3a61ad425d0006ec31fee6810dd722ddd380b0 /gcc/objc
parenta9aedbc26d61fbe2fef53254408dbbb37c3992fa (diff)
downloadgcc-2c89fb2e667691049f673f2429889e90834667c8.zip
gcc-2c89fb2e667691049f673f2429889e90834667c8.tar.gz
gcc-2c89fb2e667691049f673f2429889e90834667c8.tar.bz2
(__objc_write_class): Write class version.
(__objc_write_selector, objc_{write,read}_selector): Handle null selector. From-SVN: r9720
Diffstat (limited to 'gcc/objc')
-rw-r--r--gcc/objc/archive.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/gcc/objc/archive.c b/gcc/objc/archive.c
index 42a4a00..25f60af 100644
--- a/gcc/objc/archive.c
+++ b/gcc/objc/archive.c
@@ -437,7 +437,7 @@ __objc_write_class (struct objc_typed_stream* stream, struct objc_class* class)
__objc_write_extension (stream, _BX_CLASS);
objc_write_string_atomic(stream, (char*)class->name,
strlen((char*)class->name));
- return objc_write_unsigned_long (stream, CLS_GETNUMBER(class));
+ return objc_write_unsigned_long (stream, class->version);
}
@@ -462,16 +462,26 @@ objc_write_class (struct objc_typed_stream* stream,
__inline__ int
__objc_write_selector (struct objc_typed_stream* stream, SEL selector)
{
- const char* sel_name = sel_get_name (selector);
+ const char* sel_name;
__objc_write_extension (stream, _BX_SEL);
+ /* to handle NULL selectors */
+ if ((SEL)0 == selector)
+ return objc_write_string (stream, "", 0);
+ sel_name = sel_get_name (selector);
return objc_write_string (stream, sel_name, strlen ((char*)sel_name));
}
int
objc_write_selector (struct objc_typed_stream* stream, SEL selector)
{
- const char* sel_name = sel_get_name (selector);
+ const char* sel_name;
unsigned long key;
+
+ /* to handle NULL selectors */
+ if ((SEL)0 == selector)
+ return __objc_write_selector (stream, selector);
+
+ sel_name = sel_get_name (selector);
if ((key = PTR2LONG(hash_value_for_key (stream->stream_table, sel_name))))
return objc_write_use_common (stream, key);
else
@@ -917,7 +927,14 @@ objc_read_selector (struct objc_typed_stream* stream, SEL* selector)
/* get selector */
len = objc_read_string (stream, &selector_name);
- (*selector) = sel_get_any_uid(selector_name);
+ /* To handle NULL selectors */
+ if (0 == strlen(selector_name))
+ {
+ (*selector) = (SEL)0;
+ return 0;
+ }
+ else
+ (*selector) = sel_get_any_uid(selector_name);
free (selector_name);
/* register */