summaryrefslogtreecommitdiff
path: root/core/upb_string.c
diff options
context:
space:
mode:
Diffstat (limited to 'core/upb_string.c')
-rw-r--r--core/upb_string.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/core/upb_string.c b/core/upb_string.c
index 93686f5..847a3ee 100644
--- a/core/upb_string.c
+++ b/core/upb_string.c
@@ -131,3 +131,21 @@ upb_string *upb_strdup(upb_string *s) {
upb_strcpy(str, s);
return str;
}
+
+upb_string *upb_strreadfile(const char *filename) {
+ FILE *f = fopen(filename, "rb");
+ if(!f) return NULL;
+ if(fseek(f, 0, SEEK_END) != 0) goto error;
+ long size = ftell(f);
+ if(size < 0) goto error;
+ if(fseek(f, 0, SEEK_SET) != 0) goto error;
+ upb_string *s = upb_string_new();
+ char *buf = upb_string_getrwbuf(s, size);
+ if(fread(buf, size, 1, f) != 1) goto error;
+ fclose(f);
+ return s;
+
+error:
+ fclose(f);
+ return NULL;
+}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback