summaryrefslogtreecommitdiff
path: root/upb_context.c
diff options
context:
space:
mode:
authorJoshua Haberman <joshua@reverberate.org>2009-07-06 13:34:40 -0700
committerJoshua Haberman <joshua@reverberate.org>2009-07-06 13:34:40 -0700
commit5235966ed5f369969c6ba0a558453ff22097a722 (patch)
treead3d775531b264f65e78cb964c0cae2645a44178 /upb_context.c
parentdd2094537ad4316ddd42b10bca291f8d2e712de1 (diff)
Lots of documentation, cleanup, and fixed memory leaks.
Diffstat (limited to 'upb_context.c')
-rw-r--r--upb_context.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/upb_context.c b/upb_context.c
index fc558be..e92f9e3 100644
--- a/upb_context.c
+++ b/upb_context.c
@@ -58,8 +58,9 @@ static void free_symtab(struct upb_strtable *t)
void upb_context_free(struct upb_context *c)
{
free_symtab(&c->symtab);
+ for(size_t i = 0; i < c->fds_len; i++)
+ upb_msgdata_free(c->fds[i], c->fds_msg, true);
free_symtab(&c->psymtab);
- for(size_t i = 0; i < c->fds_len; i++) free(c->fds[i]);
free(c->fds);
}
@@ -73,23 +74,23 @@ static struct upb_symtab_entry *resolve(struct upb_strtable *t,
struct upb_string *base,
struct upb_string *symbol)
{
- if(base->byte_len + symbol->byte_len + 1 >= UPB_SYM_MAX_LENGTH ||
+ if(base->byte_len + symbol->byte_len + 1 >= UPB_SYMBOL_MAX_LENGTH ||
symbol->byte_len == 0) return NULL;
- if(symbol->ptr[0] == UPB_CONTEXT_SEPARATOR) {
+ if(symbol->ptr[0] == UPB_SYMBOL_SEPARATOR) {
/* Symbols starting with '.' are absolute, so we do a single lookup. */
struct upb_string sym_str = {.ptr = symbol->ptr+1,
.byte_len = symbol->byte_len-1};
return upb_strtable_lookup(t, &sym_str);
} else {
/* Remove components from base until we find an entry or run out. */
- char sym[UPB_SYM_MAX_LENGTH+1];
+ char sym[UPB_SYMBOL_MAX_LENGTH+1];
struct upb_string sym_str = {.ptr = sym};
int baselen = base->byte_len;
while(1) {
- /* sym_str = base[0...base_len] + UPB_CONTEXT_SEPARATOR + symbol */
+ /* sym_str = base[0...base_len] + UPB_SYMBOL_SEPARATOR + symbol */
memcpy(sym, base->ptr, baselen);
- sym[baselen] = UPB_CONTEXT_SEPARATOR;
+ sym[baselen] = UPB_SYMBOL_SEPARATOR;
memcpy(sym + baselen + 1, symbol->ptr, symbol->byte_len);
sym_str.byte_len = baselen + symbol->byte_len + 1;
@@ -97,7 +98,7 @@ static struct upb_symtab_entry *resolve(struct upb_strtable *t,
if (e) return e;
else if(baselen == 0) return NULL; /* No more scopes to try. */
- baselen = memrchr(base->ptr, UPB_CONTEXT_SEPARATOR, baselen);
+ baselen = memrchr(base->ptr, UPB_SYMBOL_SEPARATOR, baselen);
}
}
}
@@ -130,7 +131,7 @@ static struct upb_string join(struct upb_string *base, struct upb_string *name)
if(base->byte_len > 0) {
/* nested_base = base + '.' + d->name */
memcpy(joined.ptr, base->ptr, base->byte_len);
- joined.ptr[base->byte_len] = UPB_CONTEXT_SEPARATOR;
+ joined.ptr[base->byte_len] = UPB_SYMBOL_SEPARATOR;
memcpy(&joined.ptr[base->byte_len+1], name->ptr, name->byte_len);
} else {
memcpy(joined.ptr, name->ptr, name->byte_len);
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback