From 223b1056273f5d48d1c0bbfee75be7b82374d4eb Mon Sep 17 00:00:00 2001 From: pryazha Date: Sun, 12 Oct 2025 15:24:30 +0500 Subject: change identation, maybe will change back, add own gl functions loading, and glx example --- linux.c | 115 ++++++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 68 insertions(+), 47 deletions(-) (limited to 'linux.c') diff --git a/linux.c b/linux.c index ff20e92..cfdcf6a 100644 --- a/linux.c +++ b/linux.c @@ -1,70 +1,91 @@ #include "sys.h" #include "macros.h" +#include "prbs.h" + #include #include #include #include #include -void *sys_alloc(u64 length) +void +*sys_alloc(u64 length) { - assert(length); - i32 prot = PROT_READ | PROT_WRITE; - i32 flags = MAP_PRIVATE|MAP_ANONYMOUS; - void *result = mmap(0, length, prot, flags, -1, 0); - return result; + assert(length); + i32 prot = PROT_READ | PROT_WRITE; + i32 flags = MAP_PRIVATE|MAP_ANONYMOUS; + void *result = mmap(0, length, prot, flags, -1, 0); + return result; } -void sys_free(void *memory, u64 length) +void +sys_free(void *memory, u64 length) { - assert(memory); - assert(length); - munmap(memory, length); + assert(memory); + assert(length); + munmap(memory, length); } -void die(const char *format, ...) +void +die(const char *format, ...) { - va_list args; - va_start(args, format); - fprintf(stderr, "error: "); - vfprintf(stderr, format, args); - fprintf(stderr, "\n"); - va_end(args); - _exit(1); + va_list args; + va_start(args, format); + fprintf(stderr, "error: "); + vfprintf(stderr, format, args); + fprintf(stderr, "\n"); + va_end(args); + _exit(1); } -void info(const char *format, ...) +void +info(const char *format, ...) { - va_list args; - va_start(args, format); - vprintf(format, args); - putchar('\n'); - va_end(args); + va_list args; + va_start(args, format); + vprintf(format, args); + putchar('\n'); + va_end(args); } -char *read_entire_file(struct arena *arena, u64 *len, const char *filename) +char * +read_entire_file(struct arena *arena, u64 *len, const char *filename) { - FILE *file = fopen(filename, "rb"); - if (!file) - return 0; - if (fseek(file, 0, SEEK_END) == -1) - goto error; - i64 n = ftell(file); - if (n <= 0) - goto error; - if (len) - *len = n; - if (fseek(file, 0, SEEK_SET) == -1) - goto error; - char *buffer = push_arena(arena, n + 1); - if (!fread(buffer, 1, n, file)) { - pop_arena(arena, n + 1); - goto error; - } - fclose(file); - buffer[n] = 0; - return buffer; + FILE *file = fopen(filename, "rb"); + if (!file) + return 0; + if (fseek(file, 0, SEEK_END) == -1) + goto error; + i64 n = ftell(file); + if (n <= 0) + goto error; + if (len) + *len = n; + if (fseek(file, 0, SEEK_SET) == -1) + goto error; + char *buffer = push_arena(arena, n + 1); + if (!fread(buffer, 1, n, file)) { + pop_arena(arena, n + 1); + goto error; + } + fclose(file); + buffer[n] = 0; + return buffer; + error: - fclose(file); - return 0; + fclose(file); + return 0; +} + +struct string +get_basedir(struct arena *arena) +{ + char buf[1024] = {0}; + if (readlink("/proc/self/exe", buf, 1024 - 1) == -1) + die("failed to read link /proc/self/exe"); + struct arena temp = alloc_arena(0); + struct string full = string_from_cstring(&temp, buf); + struct string base = push_string(arena, get_dirname(full)); + release_arena(&temp); + return base; } -- cgit v1.2.3-70-g09d2