orca/src/platform/osx_path.m

45 lines
1012 B
Matlab

/************************************************************//**
*
* @file: osx_path.m
* @author: Martin Fouilleul
* @date: 24/05/2023
*
*****************************************************************/
#import<Foundation/Foundation.h>
#include<libgen.h>
#include<mach-o/dyld.h>
#include"platform_path.c"
bool path_is_absolute(str8 path)
{
return(path.len && (path.ptr[0] == '/'));
}
str8 path_executable(mem_arena* arena)
{@autoreleasepool{
str8 result = {};
u32 size = 0;
_NSGetExecutablePath(0, &size);
result.len = size;
result.ptr = mem_arena_alloc_array(arena, char, result.len+1);
_NSGetExecutablePath(result.ptr, &size);
result.ptr[result.len] = '\0';
return(result);
}}
str8 path_canonical(mem_arena* arena, str8 path)
{
mem_arena_scope scratch = mem_scratch_begin_next(arena);
char* pathCString = str8_to_cstring(scratch.arena, path);
char* real = realpath(pathCString, 0);
str8 result = str8_push_cstring(arena, real);
free(real);
mem_scratch_end(scratch);
return(result);
}