summaryrefslogtreecommitdiff
path: root/prb_sys.c
blob: 3747f1818e6d158ed065258f824d1b7111f1905f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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;
}