#include "sys.h" void *sys_alloc(u64 length) { assert(length); void *result = VirtualAlloc(0, length, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE); return result; } void sys_free(void *memory, u64 length) { assert(memory); assert(length); assert(VirtualFree(memory, 0, MEM_RELEASE)); } void die(const char *error_string, ...) { va_list args; va_start(args, error_string); printf("error: "); vprintf(error_string, args); printf("\n"); va_end(args); exit(1); } void info(const char *format, ...) { 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) { HANDLE file = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (file == INVALID_HANDLE_VALUE) return 0; LARGE_INTEGER lisize; if (!GetFileSizeEx(file, &lisize)) goto error; *len = lisize.QuadPart; if (!*len) goto error; char *buffer = push_arena(arena, *len + 1); DWORD bytes_read; if (!ReadFile(file, *buffer, size, &bytes_read, 0)) { pop_arena(arena, *len + 1); goto error; } CloseHandle(file); buffer[*len] = 0; return buffer; error: CloseHandle(file); return 0; } char *get_exe_path(arena_t *arena) { char path[max_path_len] = {0}; u32 len = GetModuleFileName(0, path, max_path_len); if (!len) return 0; char *dir = strrchr(path, '\\'); if (!dir) return path; len = dir - path; dir = push_arena(arena, len + 1); memmove(dir, path, len); dir[len] = 0; return dir; }