diff options
Diffstat (limited to 'prb_sys.c')
-rw-r--r-- | prb_sys.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/prb_sys.c b/prb_sys.c new file mode 100644 index 0000000..3747f18 --- /dev/null +++ b/prb_sys.c @@ -0,0 +1,52 @@ +/* TODO(pryazha): OS specific */ +FLS sys_read_entire_file_fls(Arena *a, const char *fname) +{ + FILE *f; + FLS r; + S32 len; + + MEM0STRUCT(&r); + + f = fopen(fname, "rb"); + if (!f) + return r; + + if (fseek(f, 0, SEEK_END) == -1) + goto error; + if ((len = ftell(f)) == -1) + goto error; + rewind(f); + + r.p = push_arena(a, len+1); + if (!fread(r.p, len, 1, f)) + goto error; + r.p[len] = 0; + r.len = len+1; + + fclose(f); + + return r; +error: + fclose(f); + return r; +} + +#define PRGE_MAX_PATH 256 + +char *sys_getbindir(Arena *a) +{ + U64 size; + char *path; + ssize_t len; + + size = PRGE_MAX_PATH*sizeof(char); + path = push_arena(a, size); + + len = readlink("/proc/self/exe", path, size-1); + if (len <= 0) + return path; + + path[len] = 0; + + return path; +} |