12 L
"Setup\\102Dalms\\pcdogs.exe",
23 if (ch >= L
'A' && ch <= L
'Z') {
24 return (
wchar_t)(ch - L
'A' + L
'a');
30static bool has_suffix_w(
const wchar_t *path,
const wchar_t *suffix) {
31 const size_t path_len = wcslen(path);
32 const size_t suffix_len = wcslen(suffix);
33 if (path_len < suffix_len) {
37 const wchar_t *candidate = path + path_len - suffix_len;
38 for (
size_t i = 0; i < suffix_len; i++) {
76 sds normalized = sdsnew(path);
81 sdstolower(normalized);
82 sdsmapchars(normalized,
"/",
"\\", 1);
84 const XXH64_hash_t hash = XXH3_64bits(normalized, sdslen(normalized));
90 const size_t len = strlen(path);
91 return len > 0 && path[len - 1] !=
'\\' && path[len - 1] !=
'/';
95 const char *cache_base_dir,
100 if (!cache_base_dir || !cache_base_dir[0] || !iso_path || !iso_path[0] || !out_path
101 || out_path_size == 0) {
105 const uint64_t hash =
hash_path(iso_path);
108 const int written = snprintf(
113 needs_separator ?
"\\" :
"",
115 (
unsigned long long)hash
117 return written > 0 && (size_t)written < out_path_size;
DTTR_Graphics_COM_DirectDrawSurface7 DWORD flags void NULL
const char * DTTR_LoaderISO_GameEXEPath()
size_t DTTR_Loader_GameSubpathCount()
static bool has_suffix_w(const wchar_t *path, const wchar_t *suffix)
static const char *const ISO_CACHE_PATH
const char * DTTR_LoaderISO_GameDataPath()
static uint64_t hash_path(const char *path)
static const char *const ISO_GAME_ROOT
bool DTTR_LoaderISO_CacheRootForPath(const char *cache_base_dir, const char *iso_path, char *out_path, size_t out_path_size)
const wchar_t * DTTR_Loader_GameSubpathAt(size_t index)
static const char *const ISO_GAME_EXE_PATH
static wchar_t ascii_lower_w(wchar_t ch)
const char * DTTR_LoaderISO_GameRoot()
static const char *const ISO_GAME_DATA_PATH
bool DTTR_LoaderPath_IsISOW(const wchar_t *path)
static const wchar_t ISO_SUFFIX[]
static const wchar_t *const GAME_SUBPATHS[]
static bool path_needs_separator(const char *path)
const char * DTTR_LoaderISO_GamePkgPath()
static const char *const ISO_GAME_PKG_PATH