diff -ur ./src/dash_browser.c ../LithiumX-DualHDD/src/dash_browser.c --- ./src/dash_browser.c 2024-06-28 13:55:18.732000000 -0400 +++ ../LithiumX-DualHDD/src/dash_browser.c 2024-08-16 19:22:15.928000000 -0400 @@ -179,6 +179,7 @@ WIN32_FIND_DATA findData; HANDLE hFind; char searchPath[DASH_MAX_PATH]; + char tmp[10]; int i = 0; *cnt = 0; @@ -187,19 +188,23 @@ //Xbox doesn't have a root drive that shows all partitions so we fake it if (strcmp(path, DASH_ROOT_PATH) == 0) { - static const char root_drives[][3] = {"C:", "D:", "E:", "F:", "G:", "R:", "S:", - "V:", "W:", "A:", "B:", "P:", "Q:", "X:", "Y:", "Z:", }; + static const char* root_drives[] = {"HDD0-C", "DVD-ROM", "HDD0-E", "HDD0-F", "HDD0-G", "HDD0-H", "HDD0-I", + "HDD0-J", "HDD0-K", "HDD0-L", "HDD0-M", "HDD0-N", "ROOT", "HDD0-X", "HDD0-Y", "HDD0-Z", + "HDD1-C", "HDD1-E", "HDD1-F", "HDD1-G", "HDD1-H", "HDD1-I", + "HDD1-J", "HDD1-K", "HDD1-L", "HDD1-M", "HDD1-N", "HDD1-X", "HDD1-Y", "HDD1-Z", }; int _cnt = 0; for (int i = 0; i < DASH_ARRAY_SIZE(root_drives); i++) { - if(!nxIsDriveMounted(root_drives[i][0])) + if(!nxIsDriveMounted((char*)root_drives[i])) { dash_printf(LEVEL_TRACE, "%s not mounted. Skipping\n", root_drives[i]); continue; } if (list != NULL) { - list[_cnt].item = lv_strdup(root_drives[i]); + memset(tmp, 0, 10); + lv_snprintf(tmp, 10, "%s:", root_drives[i]); + list[_cnt].item = lv_strdup(tmp); list[_cnt].is_dir = 1; } _cnt++; diff -ur ./src/dash_main.c ../LithiumX-DualHDD/src/dash_main.c --- ./src/dash_main.c 2024-06-28 13:55:18.732000000 -0400 +++ ../LithiumX-DualHDD/src/dash_main.c 2024-08-01 04:12:48.396000000 -0400 @@ -22,16 +22,16 @@ "\n" "[[pages]]\n" "name = \"Games\"\n" - "paths = [\"E:/Games\", \"F:/Games\", \"G:/Games\"]\n" + "paths = [\"HDD0-E:/Games\", \"HDD0-F:/Games\", \"HDD0-G:/Games\", \"HDD1-E:/Games\", \"HDD1-F:/Games\", \"HDD1-G:/Games\"]\n" "\n" "[[pages]]\n" "name = \"Applications\"\n" - "paths = [\"E:/Applications\", \"F:/Applications\", \"G:/Applications\",\n" - " \"E:/Apps\", \"F:/Apps\", \"G:/Apps\"]\n" + "paths = [\"HDD0-E:/Applications\", \"HDD0-F:/Applications\", \"HDD0-G:/Applications\", \"HDD1-E:/Applications\", \"HDD1-F:/Applications\", \"HDD1-G:/Applications\", \n" + " \"HDD0-E:/Apps\", \"HDD0-F:/Apps\", \"HDD0-G:/Apps\", \"HDD1-E:/Apps\", \"HDD1-F:/Apps\", \"HDD1-G:/Apps\"]\n" "\n" "[[pages]]\n" "name = \"Homebrew\"\n" - "paths = [\"E:/Homebrew\", \"F:/Homebrew\", \"G:/Homebrew\"]\n" + "paths = [\"HDD0-E:/Homebrew\", \"HDD0-F:/Homebrew\", \"HDD0-G:/Homebrew\", \"HDD1-E:/Homebrew\", \"HDD1-F:/Homebrew\", \"HDD1-G:/Homebrew\"]\n" "\0"; static bool check_path_toml(char *err_msg, int err_msg_len) diff -ur ./src/libs/ftpd/ftp_file.c ../LithiumX-DualHDD/src/libs/ftpd/ftp_file.c --- ./src/libs/ftpd/ftp_file.c 2024-06-28 13:55:18.732000000 -0400 +++ ../LithiumX-DualHDD/src/libs/ftpd/ftp_file.c 2024-08-16 19:52:39.464000000 -0400 @@ -23,7 +23,11 @@ #ifdef NXDK #include -static const char root_drives[][3] = {"/C", "/D", "/E", "/F", "/G", "/R", "/S", "/V", "/W", "/A", "/B", "/P", "/X", "/Y", "/Z"}; +static const char root_drives[][8] = {"HDD0-C", "DVD-ROM", "HDD0-E", "HDD0-F", "HDD0-G", "HDD0-H", "HDD0-I", + "HDD0-J", "HDD0-K", "HDD0-L", "HDD0-M", "HDD0-N", "ROOT", "HDD0-X", "HDD0-Y", "HDD0-Z", + "HDD1-C", "HDD1-E", "HDD1-F", "HDD1-G", "HDD1-H", "HDD1-I", + "HDD1-J", "HDD1-K", "HDD1-L", "HDD1-M", "HDD1-N", "HDD1-X", "HDD1-Y", "HDD1-Z", }; + static int root_index; #define FILE_DBG DbgPrint #else @@ -39,19 +43,29 @@ // Replace "/" with "\" char *sep = strchr(out, '/'); + char* start = 0; + char* end = 0; + int cnt = 0; + if(sep) start = sep; while (sep) { + if(cnt==1) end = sep; *sep = '\\'; sep = strchr(out, '/'); + cnt++; } + if(!end) end = start + strlen(out); + #ifdef NXDK // Replace \E\ with "E:\" etc. if (out[0] == '\\' && out[1] != '\0') { - out[0] = out[1]; + memcpy(out, start+1, end-start-1); + *(end-1) = ':'; + /* out[0] = out[1]; out[1] = ':'; - out[2] = '\\'; + out[2] = '\\';*/ } #endif return out; @@ -63,7 +77,7 @@ int cnt = sizeof(root_drives) / sizeof(root_drives[0]); for (int i = 0; i < cnt; i++) { - if (strcmp(path, root_drives[i]) == 0) + if (strcmp(path+1, root_drives[i]) == 0) { return 1; } @@ -208,7 +222,6 @@ { WIN32_FIND_DATA findFileData; FILE_DBG("Looking for files in %s\n", dp->path); - #ifdef FTP_CUSTOM_ROOT_PATH if (strcmp(dp->path, "root") == 0) { @@ -217,11 +230,11 @@ for(; root_index < (sizeof(root_drives) / sizeof(root_drives[0])); root_index++) { - if(!nxIsDriveMounted(root_drives[root_index][1])) + if(!nxIsDriveMounted((char*)root_drives[root_index])) continue; - nfo->fname[0] = root_drives[root_index][1]; - nfo->fname[1] = '\0'; + memcpy(nfo->fname, root_drives[root_index], sizeof(root_drives[0])); + //nfo->fname = root_drives[root_index]; nfo->fattrib = AM_DIR; // Create default year and time for root dirs @@ -479,4 +492,4 @@ // Not implemented FILE_DBG("%s: NOT IMPLEMENTED\n", __FUNCTION__); return FR_OK; -} \ No newline at end of file +} diff -ur ./src/libs/nxdk/lib/nxdk/automount_d.c ../LithiumX-DualHDD/src/libs/nxdk/lib/nxdk/automount_d.c --- ./src/libs/nxdk/lib/nxdk/automount_d.c 2024-06-28 13:55:58.136000000 -0400 +++ ../LithiumX-DualHDD/src/libs/nxdk/lib/nxdk/automount_d.c 2024-08-01 01:43:43.288000000 -0400 @@ -11,7 +11,7 @@ __cdecl int automount_d_drive (void) { - if (nxIsDriveMounted('D')) { + if (nxIsDriveMounted("D")) { return 0; } @@ -27,7 +27,7 @@ // Mount the obtained path as D: BOOL success; - success = nxMountDrive('D', targetPath); + success = nxMountDrive("D", targetPath); assert(success); return 0; diff -ur ./src/libs/nxdk/lib/nxdk/mount.c ../LithiumX-DualHDD/src/libs/nxdk/lib/nxdk/mount.c --- ./src/libs/nxdk/lib/nxdk/mount.c 2024-06-28 13:55:58.136000000 -0400 +++ ../LithiumX-DualHDD/src/libs/nxdk/lib/nxdk/mount.c 2024-08-01 01:42:32.208000000 -0400 @@ -8,15 +8,15 @@ #include #include -bool nxIsDriveMounted (char driveLetter) +bool nxIsDriveMounted (char* driveLetter) { NTSTATUS status; HANDLE handle; ANSI_STRING drivePath; - CHAR drivePathBuffer[7]; + CHAR drivePathBuffer[20] = {0}; OBJECT_ATTRIBUTES objattr; - sprintf(drivePathBuffer, "\\??\\%c:", driveLetter); + sprintf(drivePathBuffer, "\\??\\%s:", driveLetter); RtlInitAnsiString(&drivePath, drivePathBuffer); InitializeObjectAttributes(&objattr, &drivePath, OBJ_CASE_INSENSITIVE, NULL, NULL); @@ -29,14 +29,14 @@ return false; } -bool nxMountDrive (char driveLetter, const char *path) +bool nxMountDrive (char* driveLetter, const char *path) { NTSTATUS status; ANSI_STRING drivePath; - CHAR drivePathBuffer[7]; + CHAR drivePathBuffer[20] = {0}; ANSI_STRING mountPath; - sprintf(drivePathBuffer, "\\??\\%c:", driveLetter); + sprintf(drivePathBuffer, "\\??\\%s:", driveLetter); RtlInitAnsiString(&drivePath, drivePathBuffer); RtlInitAnsiString(&mountPath, path); @@ -50,13 +50,13 @@ return true; } -bool nxUnmountDrive (char driveLetter) +bool nxUnmountDrive (char* driveLetter) { NTSTATUS status; ANSI_STRING drivePath; - CHAR drivePathBuffer[7]; + CHAR drivePathBuffer[20] = {0}; - sprintf(drivePathBuffer, "\\??\\%c:", driveLetter); + sprintf(drivePathBuffer, "\\??\\%s:", driveLetter); RtlInitAnsiString(&drivePath, drivePathBuffer); status = IoDeleteSymbolicLink(&drivePath); diff -ur ./src/libs/nxdk/lib/nxdk/mount.h ../LithiumX-DualHDD/src/libs/nxdk/lib/nxdk/mount.h --- ./src/libs/nxdk/lib/nxdk/mount.h 2024-06-28 13:55:58.136000000 -0400 +++ ../LithiumX-DualHDD/src/libs/nxdk/lib/nxdk/mount.h 2024-08-01 01:42:46.648000000 -0400 @@ -13,9 +13,9 @@ #include #endif -bool nxIsDriveMounted (char driveLetter); -bool nxMountDrive (char driveLetter, const char *path); -bool nxUnmountDrive (char driveLetter); +bool nxIsDriveMounted (char* driveLetter); +bool nxMountDrive (char* driveLetter, const char *path); +bool nxUnmountDrive (char* driveLetter); #ifdef __cplusplus } diff -ur ./src/lithiumx.h ../LithiumX-DualHDD/src/lithiumx.h --- ./src/lithiumx.h 2024-06-28 13:55:18.772000000 -0400 +++ ../LithiumX-DualHDD/src/lithiumx.h 2024-08-01 03:55:40.896000000 -0400 @@ -63,7 +63,7 @@ //nxdk local directory is also mounting to Q: so we get Q:Q:.. #ifndef DASH_SEARCH_PATH_CONFIG #ifdef NXDK -#define DASH_SEARCH_PATH_CONFIG "E:\\UDATA\\LithiumX\\lithiumx.toml" +#define DASH_SEARCH_PATH_CONFIG "HDD0-E:\\UDATA\\LithiumX\\lithiumx.toml" #else #define DASH_SEARCH_PATH_CONFIG "lithiumx.toml" #endif @@ -71,7 +71,7 @@ #ifndef DASH_DATABASE_PATH #ifdef NXDK -#define DASH_DATABASE_PATH "E:\\UDATA\\LithiumX\\lithiumx.db" +#define DASH_DATABASE_PATH "HDD0-E:\\UDATA\\LithiumX\\lithiumx.db" #else #define DASH_DATABASE_PATH "lithiumx.db" #endif @@ -200,4 +200,4 @@ } #endif -#endif \ No newline at end of file +#endif diff -ur ./src/platform/xbox/platform.c ../LithiumX-DualHDD/src/platform/xbox/platform.c --- ./src/platform/xbox/platform.c 2024-06-28 16:01:47.012000000 -0400 +++ ../LithiumX-DualHDD/src/platform/xbox/platform.c 2024-08-16 19:12:41.508000000 -0400 @@ -129,47 +129,65 @@ debugPrint("%s ", loading_str); // nxdk automounts D to the root xbe path. Lets undo that - if (nxIsDriveMounted('D')) + if (nxIsDriveMounted("DVD-ROM")) { - nxUnmountDrive('D'); + nxUnmountDrive("DVD-ROM"); } // Mount the DVD drive - nxMountDrive('D', "\\Device\\CdRom0"); + nxMountDrive("DVD-ROM", "\\Device\\CdRom0"); // Mount root of LithiumX xbe to Q: char targetPath[MAX_PATH]; nxGetCurrentXbeNtPath(targetPath); *(strrchr(targetPath, '\\') + 1) = '\0'; - nxMountDrive('Q', targetPath); + nxMountDrive("ROOT", targetPath); debugPrint("."); // Mount stock partitions - nxMountDrive('C', "\\Device\\Harddisk0\\Partition2\\"); - nxMountDrive('E', "\\Device\\Harddisk0\\Partition1\\"); - nxMountDrive('X', "\\Device\\Harddisk0\\Partition3\\"); - nxMountDrive('Y', "\\Device\\Harddisk0\\Partition4\\"); - nxMountDrive('Z', "\\Device\\Harddisk0\\Partition5\\"); + nxMountDrive("HDD0-C", "\\Device\\Harddisk0\\Partition2\\"); + nxMountDrive("HDD0-E", "\\Device\\Harddisk0\\Partition1\\"); + nxMountDrive("HDD0-X", "\\Device\\Harddisk0\\Partition3\\"); + nxMountDrive("HDD0-Y", "\\Device\\Harddisk0\\Partition4\\"); + nxMountDrive("HDD0-Z", "\\Device\\Harddisk0\\Partition5\\"); debugPrint("."); // Mount extended partitions // NOTE: Both the retail kernel and modified kernels will mount these partitions // if they exist and silently fail if they don't. So we can just try to mount them // and not worry about checking if they exist. - nxMountDrive('F', "\\Device\\Harddisk0\\Partition6\\"); - nxMountDrive('G', "\\Device\\Harddisk0\\Partition7\\"); - nxMountDrive('R', "\\Device\\Harddisk0\\Partition8\\"); - nxMountDrive('S', "\\Device\\Harddisk0\\Partition9\\"); - nxMountDrive('V', "\\Device\\Harddisk0\\Partition10\\"); - nxMountDrive('W', "\\Device\\Harddisk0\\Partition11\\"); - nxMountDrive('A', "\\Device\\Harddisk0\\Partition12\\"); - nxMountDrive('B', "\\Device\\Harddisk0\\Partition13\\"); - nxMountDrive('P', "\\Device\\Harddisk0\\Partition14\\"); + nxMountDrive("HDD0-F", "\\Device\\Harddisk0\\Partition6\\"); + nxMountDrive("HDD0-G", "\\Device\\Harddisk0\\Partition7\\"); + nxMountDrive("HDD0-H", "\\Device\\Harddisk0\\Partition8\\"); + nxMountDrive("HDD0-I", "\\Device\\Harddisk0\\Partition9\\"); + nxMountDrive("HDD0-J", "\\Device\\Harddisk0\\Partition10\\"); + nxMountDrive("HDD0-K", "\\Device\\Harddisk0\\Partition11\\"); + nxMountDrive("HDD0-L", "\\Device\\Harddisk0\\Partition12\\"); + nxMountDrive("HDD0-M", "\\Device\\Harddisk0\\Partition13\\"); + nxMountDrive("HDD0-N", "\\Device\\Harddisk0\\Partition14\\"); + + // Mount any second drive partitions + + nxMountDrive("HDD1-C", "\\Device\\Harddisk1\\Partition2\\"); + nxMountDrive("HDD1-E", "\\Device\\Harddisk1\\Partition1\\"); + nxMountDrive("HDD1-X", "\\Device\\Harddisk1\\Partition3\\"); + nxMountDrive("HDD1-Y", "\\Device\\Harddisk1\\Partition4\\"); + nxMountDrive("HDD1-Z", "\\Device\\Harddisk1\\Partition5\\"); + nxMountDrive("HDD1-F", "\\Device\\Harddisk1\\Partition6\\"); + nxMountDrive("HDD1-G", "\\Device\\Harddisk1\\Partition7\\"); + nxMountDrive("HDD1-H", "\\Device\\Harddisk1\\Partition8\\"); + nxMountDrive("HDD1-I", "\\Device\\Harddisk1\\Partition9\\"); + nxMountDrive("HDD1-J", "\\Device\\Harddisk1\\Partition10\\"); + nxMountDrive("HDD1-K", "\\Device\\Harddisk1\\Partition11\\"); + nxMountDrive("HDD1-L", "\\Device\\Harddisk1\\Partition12\\"); + nxMountDrive("HDD1-M", "\\Device\\Harddisk1\\Partition13\\"); + nxMountDrive("HDD1-N", "\\Device\\Harddisk1\\Partition14\\"); + debugPrint("."); - CreateDirectoryA("E:\\UDATA", NULL); - CreateDirectoryA("E:\\UDATA\\LithiumX", NULL); - FILE *fp = fopen("E:\\UDATA\\LithiumX\\TitleMeta.xbx", "wb"); + CreateDirectoryA("HDD0-E:\\UDATA", NULL); + CreateDirectoryA("HDD0-E:\\UDATA\\LithiumX", NULL); + FILE *fp = fopen("HDD0-E:\\UDATA\\LithiumX\\TitleMeta.xbx", "wb"); if (fp) { fprintf(fp, "TitleName=LithiumX Dashboard\r\n"); @@ -207,7 +225,7 @@ if (strcmp(dash_launch_path, "__MSDASH__") == 0) { // FIXME: Do we need to eject disk? - strcpy(dash_launch_path, "C:\\xboxdash.xbe"); + strcpy(dash_launch_path, "HDD0-C:\\xboxdash.xbe"); } else if (strcmp(dash_launch_path, "__DVD__") == 0) {