diff --git a/frontend/drivers/platform_android.c b/frontend/drivers/platform_android.c index 4e25599227..d59d33868d 100644 --- a/frontend/drivers/platform_android.c +++ b/frontend/drivers/platform_android.c @@ -794,5 +794,6 @@ const frontend_ctx_driver_t frontend_ctx_android = { NULL, /* load_content */ frontend_android_get_architecture, NULL, /* get_powerstate */ + NULL, /* parse_drive_list */ "android", }; diff --git a/frontend/drivers/platform_ctr.c b/frontend/drivers/platform_ctr.c index 4ad802bc1d..b20a45586f 100644 --- a/frontend/drivers/platform_ctr.c +++ b/frontend/drivers/platform_ctr.c @@ -21,10 +21,16 @@ #include #include +#ifndef IS_SALAMANDER +#include +#endif + #include "../../general.h" #ifdef IS_SALAMANDER #include "../../file_ext.h" +#else +#include "../../menu/menu_list.h" #endif @@ -200,6 +206,21 @@ enum frontend_architecture frontend_ctr_get_architecture(void) return FRONTEND_ARCH_ARM; } +static int frontend_ctr_parse_drive_list(void *data) +{ + file_list_t *list = (file_list_t*)data; + +#ifndef IS_SALAMANDER + if (!list) + return -1; + + menu_list_push(list, + "sdmc:/", "", MENU_FILE_DIRECTORY, 0, 0); +#endif + + return 0; +} + const frontend_ctx_driver_t frontend_ctx_ctr = { frontend_ctr_get_environment_settings, frontend_ctr_init, @@ -215,5 +236,6 @@ const frontend_ctx_driver_t frontend_ctx_ctr = { NULL, /* load_content */ frontend_ctr_get_architecture, NULL, /* get_powerstate */ + frontend_ctr_parse_drive_list, "ctr", }; diff --git a/frontend/drivers/platform_darwin.m b/frontend/drivers/platform_darwin.m index 77c1054857..b8d048da3b 100644 --- a/frontend/drivers/platform_darwin.m +++ b/frontend/drivers/platform_darwin.m @@ -558,6 +558,27 @@ static enum frontend_architecture frontend_darwin_get_architecture(void) return FRONTEND_ARCH_NONE; } +static int frontend_darwin_parse_drive_list(void *data) +{ + int ret = -1; +#if TARGET_OS_IPHONE + file_list_t *list = (file_list_t*)data; + + menu_list_push(list, + "/var/mobile/Documents/", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "/var/mobile/", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + g_defaults.core_dir, "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, "/", "", + MENU_FILE_DIRECTORY, 0, 0); + + ret = 0; +#endif + + return ret; +} + const frontend_ctx_driver_t frontend_ctx_darwin = { frontend_darwin_get_environment_settings, NULL, /* init */ @@ -573,5 +594,6 @@ const frontend_ctx_driver_t frontend_ctx_darwin = { frontend_darwin_load_content, frontend_darwin_get_architecture, frontend_darwin_get_powerstate, + frontend_darwin_parse_drive_list, "darwin", }; diff --git a/frontend/drivers/platform_gx.c b/frontend/drivers/platform_gx.c index 651e0afbf5..d4b010639e 100644 --- a/frontend/drivers/platform_gx.c +++ b/frontend/drivers/platform_gx.c @@ -15,20 +15,6 @@ * If not, see . */ -#include -#include "../../driver.h" -#include "../../general.h" -#include "../../libretro_private.h" -#include "../../gfx/drivers/gx_sdk_defines.h" - -#include - -#if defined(HW_RVL) && !defined(IS_SALAMANDER) -#include "../../wii/mem2_manager.h" -#include -#include -#endif - #include #include #include @@ -41,6 +27,24 @@ #include #include +#if defined(HW_RVL) && !defined(IS_SALAMANDER) +#include +#include +#include "../../wii/mem2_manager.h" +#endif + +#include + +#include +#ifndef IS_SALAMANDER +#include +#endif + +#include "../../driver.h" +#include "../../general.h" +#include "../../libretro_private.h" +#include "../../gfx/drivers/gx_sdk_defines.h" + #ifdef HW_RVL #include #include @@ -381,6 +385,25 @@ static enum frontend_architecture frontend_gx_get_architecture(void) return FRONTEND_ARCH_PPC; } +static int frontend_gx_parse_drive_list(void *data) +{ +#ifndef IS_SALAMANDER + file_list_t *list = (file_list_t*)data; +#ifdef HW_RVL + menu_list_push(list, + "sd:/", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "usb:/", "", MENU_FILE_DIRECTORY, 0, 0); +#endif + menu_list_push(list, + "carda:/", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "cardb:/", "", MENU_FILE_DIRECTORY, 0, 0); +#endif + + return 0; +} + const frontend_ctx_driver_t frontend_ctx_gx = { frontend_gx_get_environment_settings, frontend_gx_init, @@ -396,5 +419,6 @@ const frontend_ctx_driver_t frontend_ctx_gx = { NULL, /* load_content */ frontend_gx_get_architecture, NULL, /* get_powerstate */ + frontend_gx_parse_drive_list, "gx", }; diff --git a/frontend/drivers/platform_linux.c b/frontend/drivers/platform_linux.c index 928bfcecab..ddff0b5f47 100644 --- a/frontend/drivers/platform_linux.c +++ b/frontend/drivers/platform_linux.c @@ -483,5 +483,6 @@ const frontend_ctx_driver_t frontend_ctx_linux = { NULL, /* load_content */ frontend_linux_get_architecture, frontend_linux_get_powerstate, + NULL, /* parse_drive_list */ "linux", }; diff --git a/frontend/drivers/platform_null.c b/frontend/drivers/platform_null.c index 711ee5748b..8eefa693fa 100644 --- a/frontend/drivers/platform_null.c +++ b/frontend/drivers/platform_null.c @@ -36,5 +36,6 @@ const frontend_ctx_driver_t frontend_ctx_null = { NULL, /* load_content */ NULL, /* get_architecture */ NULL, /* get_powerstate */ + NULL, /* parse_drive_list */ "null", }; diff --git a/frontend/drivers/platform_ps3.c b/frontend/drivers/platform_ps3.c index 6ac4817d9b..3275097311 100644 --- a/frontend/drivers/platform_ps3.c +++ b/frontend/drivers/platform_ps3.c @@ -16,10 +16,14 @@ #include +#include +#ifndef IS_SALAMANDER +#include +#endif + #include "../../ps3/sdk_defines.h" #include "../../general.h" -#include #define EMULATOR_CONTENT_DIR "SSNE10000" @@ -448,6 +452,38 @@ enum frontend_architecture frontend_ps3_get_architecture(void) return FRONTEND_ARCH_PPC; } +static int frontend_ps3_parse_drive_list(void *data) +{ +#ifndef IS_SALAMANDER + file_list_t *list = (file_list_t*)data; + + menu_list_push(list, + "/app_home/", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "/dev_hdd0/", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "/dev_hdd1/", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "/host_root/", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "/dev_usb000/", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "/dev_usb001/", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "/dev_usb002/", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "/dev_usb003/", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "/dev_usb004/", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "/dev_usb005/", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "/dev_usb006/", "", MENU_FILE_DIRECTORY, 0, 0); +#endif + + return 0; +} + const frontend_ctx_driver_t frontend_ctx_ps3 = { frontend_ps3_get_environment_settings, frontend_ps3_init, @@ -463,5 +499,6 @@ const frontend_ctx_driver_t frontend_ctx_ps3 = { NULL, /* load_content */ frontend_ps3_get_architecture, NULL, /* get_powerstate */ + frontend_ps3_parse_drive_list, "ps3", }; diff --git a/frontend/drivers/platform_psp.c b/frontend/drivers/platform_psp.c index e935d88617..379d3114fb 100644 --- a/frontend/drivers/platform_psp.c +++ b/frontend/drivers/platform_psp.c @@ -25,8 +25,12 @@ #include #include -#include "../../gfx/drivers/psp_sdk_defines.h" #include +#ifndef IS_SALAMANDER +#include +#endif + +#include "../../gfx/drivers/psp_sdk_defines.h" #include "../../general.h" #if defined(HAVE_KERNEL_PRX) || defined(IS_SALAMANDER) @@ -266,6 +270,22 @@ enum frontend_architecture frontend_psp_get_architecture(void) return FRONTEND_ARCH_MIPS; } +static int frontend_psp_parse_drive_list(void *data) +{ +#ifndef IS_SALAMANDER + file_list_t *list = (file_list_t*)data; + + menu_list_push(list, + "ms0:/", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "ef0:/", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "host0:/", "", MENU_FILE_DIRECTORY, 0, 0); +#endif + + return 0; +} + const frontend_ctx_driver_t frontend_ctx_psp = { frontend_psp_get_environment_settings, frontend_psp_init, @@ -281,5 +301,6 @@ const frontend_ctx_driver_t frontend_ctx_psp = { NULL, /* load_content */ frontend_psp_get_architecture, frontend_psp_get_powerstate, + frontend_psp_parse_drive_list, "psp", }; diff --git a/frontend/drivers/platform_qnx.c b/frontend/drivers/platform_qnx.c index e56124e589..e661d04521 100644 --- a/frontend/drivers/platform_qnx.c +++ b/frontend/drivers/platform_qnx.c @@ -79,5 +79,6 @@ const frontend_ctx_driver_t frontend_ctx_qnx = { NULL, /* load_content */ frontend_qnx_get_architecture, NULL, /* get_powerstate */ + NULL, /* parse_drive_list */ "qnx", }; diff --git a/frontend/drivers/platform_win32.c b/frontend/drivers/platform_win32.c index dc6e82580d..49f8a3009e 100644 --- a/frontend/drivers/platform_win32.c +++ b/frontend/drivers/platform_win32.c @@ -12,22 +12,21 @@ * If not, see . */ -#ifdef _XBOX -#include -#else -#include -#endif -#include -#include "../frontend_driver.h" -#include -#include "../../general.h" - #include #include #include #include -#if defined(_WIN32) && !defined(_XBOX) +#include + +#include +#include +#include + +#include "../frontend_driver.h" +#include "../../general.h" + +#if defined(_WIN32) /* We only load this library once, so we let it be * unloaded at application shutdown, since unloading * it early seems to cause issues on some systems. @@ -209,6 +208,24 @@ enum frontend_architecture frontend_win32_get_architecture(void) return FRONTEND_ARCH_NONE; } +static int frontend_win32_parse_drive_list(void *data) +{ + size_t i = 0; + unsigned drives = GetLogicalDrives(); + char drive[] = " :\\"; + file_list_t *list = (file_list_t*)data; + + for (i = 0; i < 32; i++) + { + drive[0] = 'A' + i; + if (drives & (1 << i)) + menu_list_push(list, + drive, "", MENU_FILE_DIRECTORY, 0, 0); + } + + return 0; +} + const frontend_ctx_driver_t frontend_ctx_win32 = { NULL, /* environment_get */ frontend_win32_init, @@ -224,5 +241,6 @@ const frontend_ctx_driver_t frontend_ctx_win32 = { NULL, /* load_content */ frontend_win32_get_architecture, frontend_win32_get_powerstate, + frontend_win32_parse_drive_list, "win32", }; diff --git a/frontend/drivers/platform_xdk.c b/frontend/drivers/platform_xdk.c index 404a631c16..5bfc2692cc 100644 --- a/frontend/drivers/platform_xdk.c +++ b/frontend/drivers/platform_xdk.c @@ -14,19 +14,21 @@ * If not, see . */ -#include - -#include #include +#include -#include "platform_xdk.h" - +#include #include -#include "../../general.h" #include +#ifndef IS_SALAMANDER +#include +#endif #include +#include "platform_xdk.h" +#include "../../general.h" + static bool exit_spawn; static bool exitspawn_start_game; @@ -380,6 +382,31 @@ enum frontend_architecture frontend_xdk_get_architecture(void) #endif } +static int frontend_xdk_parse_drive_list(void *data) +{ +#ifndef IS_SALAMANDER + file_list_t *list = (file_list_t*)data; + +#if defined(_XBOX1) + menu_list_push(list, + "C:", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "D:", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "E:", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "F:", "", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + "G:", "", MENU_FILE_DIRECTORY, 0, 0); +#elif defined(_XBOX360) + menu_list_push(list, + "game:", "", MENU_FILE_DIRECTORY, 0, 0); +#endif +#endif + + return 0; +} + const frontend_ctx_driver_t frontend_ctx_xdk = { frontend_xdk_get_environment_settings, frontend_xdk_init, @@ -395,5 +422,6 @@ const frontend_ctx_driver_t frontend_ctx_xdk = { NULL, /* load_content */ frontend_xdk_get_architecture, NULL, /* get_powerstate */ + frontend_xdk_parse_drive_list, "xdk", }; diff --git a/frontend/frontend_driver.c b/frontend/frontend_driver.c index 6467555f1e..1960fc8606 100644 --- a/frontend/frontend_driver.c +++ b/frontend/frontend_driver.c @@ -108,3 +108,12 @@ const frontend_ctx_driver_t *frontend_get_ptr(void) return driver->frontend_ctx; } #endif + +int frontend_driver_parse_drive_list(void *data) +{ + const frontend_ctx_driver_t *frontend = frontend_get_ptr(); + + if (!frontend || !frontend->parse_drive_list) + return -1; + return frontend->parse_drive_list(data); +} diff --git a/frontend/frontend_driver.h b/frontend/frontend_driver.h index ef214fd2a4..0c7c173356 100644 --- a/frontend/frontend_driver.h +++ b/frontend/frontend_driver.h @@ -69,6 +69,7 @@ typedef struct frontend_ctx_driver void (*content_loaded)(void); enum frontend_architecture (*get_architecture)(void); enum frontend_powerstate (*get_powerstate)(int *seconds, int *percent); + int (*parse_drive_list)(void*); const char *ident; @@ -108,6 +109,8 @@ const frontend_ctx_driver_t *frontend_get_ptr(void); **/ const frontend_ctx_driver_t *frontend_ctx_init_first(void); +int frontend_driver_parse_drive_list(void *data); + #ifdef __cplusplus } #endif diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 5c84f79af6..7413934fe0 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -101,103 +101,6 @@ static void menu_displaylist_push_perfcounter( counters[i]->ident, "", id + i, 0, 0); } -/** - * menu_displaylist_parse_drive_list: - * @list : File list handle. - * - * Generates default directory drive list. - * Platform-specific. - * - **/ -static void menu_displaylist_parse_drive_list(file_list_t *list) -{ - size_t i = 0; - - (void)i; - -#if defined(GEKKO) -#ifdef HW_RVL - menu_list_push(list, - "sd:/", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "usb:/", "", MENU_FILE_DIRECTORY, 0, 0); -#endif - menu_list_push(list, - "carda:/", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "cardb:/", "", MENU_FILE_DIRECTORY, 0, 0); -#elif defined(_XBOX1) - menu_list_push(list, - "C:", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "D:", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "E:", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "F:", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "G:", "", MENU_FILE_DIRECTORY, 0, 0); -#elif defined(_XBOX360) - menu_list_push(list, - "game:", "", MENU_FILE_DIRECTORY, 0, 0); -#elif defined(_WIN32) - unsigned drives = GetLogicalDrives(); - char drive[] = " :\\"; - for (i = 0; i < 32; i++) - { - drive[0] = 'A' + i; - if (drives & (1 << i)) - menu_list_push(list, - drive, "", MENU_FILE_DIRECTORY, 0, 0); - } -#elif defined(__CELLOS_LV2__) - menu_list_push(list, - "/app_home/", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "/dev_hdd0/", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "/dev_hdd1/", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "/host_root/", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "/dev_usb000/", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "/dev_usb001/", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "/dev_usb002/", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "/dev_usb003/", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "/dev_usb004/", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "/dev_usb005/", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "/dev_usb006/", "", MENU_FILE_DIRECTORY, 0, 0); -#elif defined(PSP) - menu_list_push(list, - "ms0:/", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "ef0:/", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "host0:/", "", MENU_FILE_DIRECTORY, 0, 0); -#elif defined(_3DS) - menu_list_push(list, - "sdmc:/", "", MENU_FILE_DIRECTORY, 0, 0); -#elif defined(IOS) - menu_list_push(list, - "/var/mobile/Documents/", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - "/var/mobile/", "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, - g_defaults.core_dir, "", MENU_FILE_DIRECTORY, 0, 0); - menu_list_push(list, "/", "", - MENU_FILE_DIRECTORY, 0, 0); -#else - menu_list_push(list, "/", "", - MENU_FILE_DIRECTORY, 0, 0); -#endif -} - static int menu_displaylist_parse_core_info(menu_displaylist_info_t *info) { unsigned i; @@ -1575,7 +1478,9 @@ static int menu_displaylist_parse_generic(menu_displaylist_info_t *info, bool *n if (!*info->path) { - menu_displaylist_parse_drive_list(info->list); + if (frontend_driver_parse_drive_list(info->list) != 0) + menu_list_push(info->list, "/", "", + MENU_FILE_DIRECTORY, 0, 0); return 0; }