summaryrefslogtreecommitdiff
path: root/upb/pb/glue.c
diff options
context:
space:
mode:
Diffstat (limited to 'upb/pb/glue.c')
-rw-r--r--upb/pb/glue.c39
1 files changed, 23 insertions, 16 deletions
diff --git a/upb/pb/glue.c b/upb/pb/glue.c
index 1259dac..76c8356 100644
--- a/upb/pb/glue.c
+++ b/upb/pb/glue.c
@@ -15,28 +15,31 @@
upb_def **upb_load_defs_from_descriptor(const char *str, size_t len, int *n,
void *owner, upb_status *status) {
- // Create handlers.
+ /* Create handlers. */
+ const upb_pbdecodermethod *decoder_m;
const upb_handlers *reader_h = upb_descreader_newhandlers(&reader_h);
+ upb_env env;
upb_pbdecodermethodopts opts;
+ upb_pbdecoder *decoder;
+ upb_descreader *reader;
+ bool ok;
+ upb_def **ret = NULL;
+ upb_def **defs;
+
upb_pbdecodermethodopts_init(&opts, reader_h);
- const upb_pbdecodermethod *decoder_m =
- upb_pbdecodermethod_new(&opts, &decoder_m);
+ decoder_m = upb_pbdecodermethod_new(&opts, &decoder_m);
- upb_env env;
upb_env_init(&env);
upb_env_reporterrorsto(&env, status);
- upb_descreader *reader = upb_descreader_create(&env, reader_h);
- upb_pbdecoder *decoder =
- upb_pbdecoder_create(&env, decoder_m, upb_descreader_input(reader));
-
- // Push input data.
- bool ok = upb_bufsrc_putbuf(str, len, upb_pbdecoder_input(decoder));
+ reader = upb_descreader_create(&env, reader_h);
+ decoder = upb_pbdecoder_create(&env, decoder_m, upb_descreader_input(reader));
- upb_def **ret = NULL;
+ /* Push input data. */
+ ok = upb_bufsrc_putbuf(str, len, upb_pbdecoder_input(decoder));
if (!ok) goto cleanup;
- upb_def **defs = upb_descreader_getdefs(reader, owner, n);
+ defs = upb_descreader_getdefs(reader, owner, n);
ret = malloc(sizeof(upb_def*) * (*n));
memcpy(ret, defs, sizeof(upb_def*) * (*n));
@@ -50,21 +53,24 @@ cleanup:
bool upb_load_descriptor_into_symtab(upb_symtab *s, const char *str, size_t len,
upb_status *status) {
int n;
+ bool success;
upb_def **defs = upb_load_defs_from_descriptor(str, len, &n, &defs, status);
if (!defs) return false;
- bool success = upb_symtab_add(s, defs, n, &defs, status);
+ success = upb_symtab_add(s, defs, n, &defs, status);
free(defs);
return success;
}
char *upb_readfile(const char *filename, size_t *len) {
+ long size;
+ char *buf;
FILE *f = fopen(filename, "rb");
if(!f) return NULL;
if(fseek(f, 0, SEEK_END) != 0) goto error;
- long size = ftell(f);
+ size = ftell(f);
if(size < 0) goto error;
if(fseek(f, 0, SEEK_SET) != 0) goto error;
- char *buf = malloc(size + 1);
+ buf = malloc(size + 1);
if(size && fread(buf, size, 1, f) != 1) goto error;
fclose(f);
if (len) *len = size;
@@ -78,12 +84,13 @@ error:
bool upb_load_descriptor_file_into_symtab(upb_symtab *symtab, const char *fname,
upb_status *status) {
size_t len;
+ bool success;
char *data = upb_readfile(fname, &len);
if (!data) {
if (status) upb_status_seterrf(status, "Couldn't read file: %s", fname);
return false;
}
- bool success = upb_load_descriptor_into_symtab(symtab, data, len, status);
+ success = upb_load_descriptor_into_symtab(symtab, data, len, status);
free(data);
return success;
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback