summaryrefslogtreecommitdiff
path: root/upb/msg.c
diff options
context:
space:
mode:
authorJosh Haberman <jhaberman@gmail.com>2019-04-02 07:30:30 -0700
committerJosh Haberman <jhaberman@gmail.com>2019-04-02 07:30:30 -0700
commit932753d91e183ab25cf1a0f420d9488295002297 (patch)
tree5aa541cdc3da45be939225aa3459375663aa0658 /upb/msg.c
parentcf35baa1ad70f0dca734f93bcc2b54d8d059bcdd (diff)
WIP.
Diffstat (limited to 'upb/msg.c')
-rw-r--r--upb/msg.c15
1 files changed, 4 insertions, 11 deletions
diff --git a/upb/msg.c b/upb/msg.c
index ca2766c..31607b7 100644
--- a/upb/msg.c
+++ b/upb/msg.c
@@ -13,9 +13,6 @@
/* Used when a message is not extendable. */
typedef struct {
- /* TODO(haberman): use pointer tagging so we we are slim when known unknown
- * fields are not present. */
- upb_arena *arena;
char *unknown;
size_t unknown_len;
size_t unknown_size;
@@ -49,10 +46,6 @@ static upb_msg_internal_withext *upb_msg_getinternalwithext(
return VOIDPTR_AT(msg, -sizeof(upb_msg_internal_withext));
}
-upb_arena *upb_msg_arena(const upb_msg *msg) {
- return upb_msg_getinternal_const(msg)->arena;
-}
-
upb_msg *upb_msg_new(const upb_msglayout *l, upb_arena *a) {
upb_alloc *alloc = upb_arena_alloc(a);
void *mem = upb_malloc(alloc, upb_msg_sizeof(l));
@@ -70,7 +63,6 @@ upb_msg *upb_msg_new(const upb_msglayout *l, upb_arena *a) {
/* Initialize internal members. */
in = upb_msg_getinternal(msg);
- in->arena = a;
in->unknown = NULL;
in->unknown_len = 0;
in->unknown_size = 0;
@@ -99,10 +91,11 @@ upb_array *upb_array_new(upb_fieldtype_t type, upb_arena *a) {
return ret;
}
-void upb_msg_addunknown(upb_msg *msg, const char *data, size_t len) {
- upb_msg_internal* in = upb_msg_getinternal(msg);
+void upb_msg_addunknown(upb_msg *msg, const char *data, size_t len,
+ upb_arena *arena) {
+ upb_msg_internal *in = upb_msg_getinternal(msg);
if (len > in->unknown_size - in->unknown_len) {
- upb_alloc *alloc = upb_arena_alloc(in->arena);
+ upb_alloc *alloc = upb_arena_alloc(arena);
size_t need = in->unknown_size + len;
size_t newsize = UPB_MAX(in->unknown_size * 2, need);
in->unknown = upb_realloc(alloc, in->unknown, in->unknown_size, newsize);
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback