i32 bh_file_write(bh_file* file, void* buffer, isize buff_size);
i64 bh_file_size(bh_file* file);
b32 bh_file_exists(char const* filename);
+char* bh_path_get_full_name(char const* filename, bh_allocator a);
#define bh_file_read_contents(allocator_, x) _Generic((x), \
bh_file*: bh_file_read_contents_bh_file, \
return stat(filename, &s) != -1;
}
+char* bh_path_get_full_name(char const* filename, bh_allocator a) {
+#if defined(_BH_WINDOWS)
+ #error "Not supported."
+#elif defined(_BH_LINUX)
+ char* p = realpath(filename, NULL);
+
+ // Check if the file did not exists.
+ // :Cleanup should this return NULL?
+ if (p == NULL) return (char *) filename;
+
+ i32 len = strlen(p);
+ char* result = bh_alloc_array(a, char, len + 1);
+ memmove(result, p, len);
+ result[len] = 0;
+
+ free(p);
+
+ return result;
+#endif
+}
+
#endif // ifndef BH_NO_FILE
GB_DLL_IMPORT BOOL WINAPI CopyFileW(wchar_t const *old_f, wchar_t const *new_f, BOOL fail_if_exists);
GB_DLL_IMPORT BOOL WINAPI MoveFileW(wchar_t const *old_f, wchar_t const *new_f);
+GB_DLL_IMPORT DWORD WINAPI GetFullPathNameA(char const *lpFileName, DWORD nBufferLength, char *lpBuffer, char **lpFilePart);
+
GB_DLL_IMPORT HMODULE WINAPI LoadLibraryA (char const *filename);
GB_DLL_IMPORT BOOL WINAPI FreeLibrary (HMODULE module);
GB_DLL_IMPORT FARPROC WINAPI GetProcAddress(HMODULE module, char const *name);
else
bh_snprintf(path, 256, "%s%s", *folder, fn);
- if (bh_file_exists(path)) return path;
+ if (bh_file_exists(path)) return bh_path_get_full_name(path, global_scratch_allocator);
}
return fn;