diff --git a/src/filesys.cpp b/src/filesys.cpp index a514bbb..b5639f2 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -7170,6 +7170,9 @@ static a_inode *restore_filesys_get_base (Unit *u, TCHAR *npath) static TCHAR *makenativepath (UnitInfo *ui, TCHAR *apath) { +#ifdef FSUAE + return fsdb_native_path(ui->rootdir, apath); +#else int i; TCHAR *pn; /* create native path. FIXME: handle 'illegal' characters */ @@ -7182,6 +7185,7 @@ static TCHAR *makenativepath (UnitInfo *ui, TCHAR *apath) } } return pn; +#endif } static uae_u8 *restore_aino (UnitInfo *ui, Unit *u, uae_u8 *src) diff --git a/src/include/fsdb.h b/src/include/fsdb.h index 528e30a..4fd447e 100644 --- a/src/include/fsdb.h +++ b/src/include/fsdb.h @@ -169,3 +169,7 @@ extern int custom_fsdb_used_as_nname (a_inode *base, const TCHAR *nname); #define MYVOLUMEINFO_CDFS 16 extern int my_getvolumeinfo (const TCHAR *root); + +#ifdef FSUAE +char *fsdb_native_path(const char *root_dir, const char *amiga_path); +#endif diff --git a/src/od-fs/fsdb_host.cpp b/src/od-fs/fsdb_host.cpp index 3877e36..f457d2f 100644 --- a/src/od-fs/fsdb_host.cpp +++ b/src/od-fs/fsdb_host.cpp @@ -557,6 +558,31 @@ static void find_nname_case(const char *dir_path, char **name) { free(cmp_name); } +char *fsdb_native_path(const char *root_dir, const char *amiga_path) { + if (g_fsdb_debug) { + write_log("fsdb_native_path (%s) %s\n", root_dir, amiga_path); + } + // splitting / allocating strings is not the most efficient way to do it, + // but the code gets very readable... + char *current_path = fs_strdup(root_dir); + char **parts = fs_strsplit(amiga_path, "/", 0); + char **part = parts; + while (*part) { + if (g_fsdb_debug) { + write_log("- %s\n", *part); + } + char *nname = aname_to_nname(*part); + find_nname_case(current_path, &nname); + char *free_me = current_path; + current_path = fs_path_join(current_path, nname, NULL); + free(free_me); + free(nname); + part++; + } + fs_strfreev(parts); + return current_path; +} + a_inode *custom_fsdb_lookup_aino_aname(a_inode *base, const TCHAR *aname) { //STUB("base=? aname=\"%s\"", aname);