summaryrefslogtreecommitdiff
path: root/prb_sys.c
diff options
context:
space:
mode:
authorpryazha <pryadeiniv@mail.ru>2025-03-27 08:29:28 +0500
committerpryazha <pryadeiniv@mail.ru>2025-03-27 08:29:28 +0500
commit92850237f42cecfeba519bc15f7f5bb7a76cde5f (patch)
tree590d924ba4ec0ea082f77fa8227ee84bf03c993f /prb_sys.c
parentaa00f2f2d7cc70edb45726dc21d359bc05036387 (diff)
renaming (mostly)
Diffstat (limited to 'prb_sys.c')
-rw-r--r--prb_sys.c52
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;
+}