--- gcc/objc/archive.c 2018/04/24 18:10:16 1.1.1.1 +++ gcc/objc/archive.c 2018/04/24 18:13:38 1.1.1.2 @@ -34,7 +34,7 @@ You should have received a copy of the G #include "typedstream.h" #define __objc_fatal(format, args...) \ - { fprintf(stderr, "archining: "); \ + { fprintf(stderr, "archiving: "); \ fprintf(stderr, format, ## args); \ fprintf(stderr, "\n"); abort(); } @@ -617,8 +617,11 @@ objc_read_string (struct objc_typed_stre case _B_UCOMM: { - len = __objc_read_nbyte_uint(stream, (buf[0] & _B_VALUE), &key); - (*string) = hash_value_for_key (stream->stream_table, (void*)key); + char *tmp; + len = __objc_read_nbyte_uint (stream, (buf[0] & _B_VALUE), &key); + tmp = hash_value_for_key (stream->stream_table, (void*)key); + *string = __objc_xmalloc (strlen (tmp) + 1); + strcpy (*string, tmp); } break; @@ -627,10 +630,10 @@ objc_read_string (struct objc_typed_stre unsigned int nbytes = buf[0]&_B_VALUE; len = __objc_read_nbyte_uint(stream, nbytes, &nbytes); if (len) { - (*string) = (char*)__objc_xmalloc(nbytes); + (*string) = (char*)__objc_xmalloc(nbytes+1); if (key) hash_add (&stream->stream_table, (void*)key, *string); - len = (*stream->read)(stream->physical, *string, buf[0]&_B_VALUE); + len = (*stream->read)(stream->physical, *string, nbytes); (*string)[nbytes] = '\0'; } } @@ -854,7 +857,7 @@ objc_sizeof_type(const char* type) break; default: - fprintf(stderr, "objc_write_type: cannot parse typespec: %s\n", type); + fprintf(stderr, "objc_sizeof_type: cannot parse typespec: %s\n", type); abort(); } } @@ -892,7 +895,7 @@ __objc_skip_type (const char* type) break; default: - fprintf(stderr, "objc_read_types: cannot parse typespec: %s\n", type); + fprintf(stderr, "__objc_skip_type: cannot parse typespec: %s\n", type); abort(); } } @@ -949,11 +952,11 @@ objc_write_type(TypedStream* stream, con break; case _C_CHARPTR: - return objc_write_string (stream, (char*)data, strlen((char*)data)); + return objc_write_string (stream, *(char**)data, strlen(*(char**)data)); break; case _C_ATOM: - return objc_write_string_atomic (stream, (char*)data, strlen((char*)data)); + return objc_write_string_atomic (stream, *(char**)data, strlen(*(char**)data)); break; case _C_ARY_B: @@ -1034,7 +1037,7 @@ objc_read_type(TypedStream* stream, cons break; default: - fprintf(stderr, "objc_write_type: cannot parse typespec: %s\n", type); + fprintf(stderr, "objc_read_type: cannot parse typespec: %s\n", type); abort(); } } @@ -1103,15 +1106,15 @@ objc_write_types (TypedStream* stream, c case _C_CHARPTR: { - char* str = va_arg(args, char*); - res = objc_write_string (stream, str, strlen(str)); + char** str = va_arg(args, char**); + res = objc_write_string (stream, *str, strlen(*str)); } break; case _C_ATOM: { - char* str = va_arg(args, char*); - res = objc_write_string_atomic (stream, str, strlen(str)); + char** str = va_arg(args, char**); + res = objc_write_string_atomic (stream, *str, strlen(*str)); } break; @@ -1128,7 +1131,7 @@ objc_write_types (TypedStream* stream, c break; default: - fprintf(stderr, "objc_write_type: cannot parse typespec: %s\n", type); + fprintf(stderr, "objc_write_types: cannot parse typespec: %s\n", type); abort(); } } @@ -1213,7 +1216,7 @@ objc_read_types(TypedStream* stream, con break; default: - fprintf(stderr, "objc_read_type: cannot parse typespec: %s\n", type); + fprintf(stderr, "objc_read_types: cannot parse typespec: %s\n", type); abort(); } }