|
|
@ -43,11 +43,18 @@ bool UPB_PRIVATE(_upb_Message_AddUnknown)(upb_Message* msg, const char* data, |
|
|
|
if (!UPB_PRIVATE(_upb_Message_ReserveSlot)(msg, arena)) { |
|
|
|
if (!UPB_PRIVATE(_upb_Message_ReserveSlot)(msg, arena)) { |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
upb_StringView* view = upb_Arena_Malloc(arena, sizeof(upb_StringView) + len); |
|
|
|
upb_StringView* view; |
|
|
|
if (!view) return false; |
|
|
|
if (alias) { |
|
|
|
char* copy = UPB_PTR_AT(view, sizeof(upb_StringView), char); |
|
|
|
view = upb_Arena_Malloc(arena, sizeof(upb_StringView)); |
|
|
|
memcpy(copy, data, len); |
|
|
|
if (!view) return false; |
|
|
|
view->data = copy; |
|
|
|
view->data = data; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
view = upb_Arena_Malloc(arena, sizeof(upb_StringView) + len); |
|
|
|
|
|
|
|
if (!view) return false; |
|
|
|
|
|
|
|
char* copy = UPB_PTR_AT(view, sizeof(upb_StringView), char); |
|
|
|
|
|
|
|
memcpy(copy, data, len); |
|
|
|
|
|
|
|
view->data = copy; |
|
|
|
|
|
|
|
} |
|
|
|
view->size = len; |
|
|
|
view->size = len; |
|
|
|
upb_Message_Internal* in = UPB_PRIVATE(_upb_Message_GetInternal)(msg); |
|
|
|
upb_Message_Internal* in = UPB_PRIVATE(_upb_Message_GetInternal)(msg); |
|
|
|
in->aux_data[in->size++] = upb_TaggedAuxPtr_MakeUnknownData(view); |
|
|
|
in->aux_data[in->size++] = upb_TaggedAuxPtr_MakeUnknownData(view); |
|
|
|