/* 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; }