From 040f7e6ba2e2282b80f332a031b77d7d34b4fc85 Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Mon, 24 Aug 2009 21:44:22 -0700 Subject: Significant memory-management refactoring any Python extension. --- src/upb_string.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'src/upb_string.c') diff --git a/src/upb_string.c b/src/upb_string.c index 7754936..54df4f1 100644 --- a/src/upb_string.c +++ b/src/upb_string.c @@ -7,19 +7,20 @@ #include #include "upb_string.h" -bool upb_strreadfile(const char *filename, struct upb_string *data) { +struct upb_string *upb_strreadfile(const char *filename) { FILE *f = fopen(filename, "rb"); if(!f) return false; - if(fseek(f, 0, SEEK_END) != 0) return false; + if(fseek(f, 0, SEEK_END) != 0) goto error; long size = ftell(f); - if(size < 0) return false; - if(fseek(f, 0, SEEK_SET) != 0) return false; - data->byte_len = size; - upb_stralloc(data, data->byte_len); - if(fread(data->ptr, size, 1, f) != 1) { - free(data->ptr); - return false; - } + if(size < 0) goto error; + if(fseek(f, 0, SEEK_SET) != 0) goto error; + struct upb_string *s = upb_string_new(); + upb_string_resize(s, size); + if(fread(s->ptr, size, 1, f) != 1) goto error; fclose(f); - return true; + return s; + +error: + fclose(f); + return NULL; } -- cgit v1.2.3