summaryrefslogtreecommitdiff
path: root/prb_os_io.c
diff options
context:
space:
mode:
Diffstat (limited to 'prb_os_io.c')
-rw-r--r--prb_os_io.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/prb_os_io.c b/prb_os_io.c
new file mode 100644
index 0000000..d35b73f
--- /dev/null
+++ b/prb_os_io.c
@@ -0,0 +1,31 @@
+Str8 str8_read_entire_file(Arena *arena, Str8 filename)
+{
+ /* TODO(pryazha): Make it crossplatform already */
+ Assert(filename.ptr);
+ Assert(filename.length);
+
+ Str8 result = {0};
+ Arena *tmp = arena_alloc(0);
+
+ char *cfilename = str8_to_cstr(tmp, filename);
+
+ FILE *f = fopen(cfilename, "rb");
+ if (!f)
+ return result;
+
+ fseek(f, 0, SEEK_END);
+ U64 size = ftell(f);
+ rewind(f);
+
+ U8 *mem = arena_push(arena, size+1);
+ fread(mem, size, 1, f);
+ fclose(f);
+
+ mem[size] = 0;
+
+ result = str8(mem, size);
+
+ arena_release(tmp);
+
+ return result;
+}