diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1995-05-16 17:46:23 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1995-05-16 17:46:23 -0400 |
commit | 2c89fb2e667691049f673f2429889e90834667c8 (patch) | |
tree | 3f3a61ad425d0006ec31fee6810dd722ddd380b0 /gcc/objc | |
parent | a9aedbc26d61fbe2fef53254408dbbb37c3992fa (diff) | |
download | gcc-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.c | 25 |
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 */ |