From 193753aa1f93ba28995a80048cbc46f1fc5cde05 Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Wed, 20 Nov 2013 16:39:42 +0000 Subject: Introduce volume_{present,removable} and fix invalid calls in apps/ The code was trying to probe for volume presence by calling drive layer with volume index. It is a miracle it get unnoticed so far. Introduce proper volume probing using the vol->drive map in the disk layer. Change-Id: I463a5bcc8170f007cad049536094207d2ba3c6fc Reviewed-on: http://gerrit.rockbox.org/669 Reviewed-by: Amaury Pouly --- apps/root_menu.c | 5 +++-- firmware/common/disk.c | 16 ++++++++++++++++ firmware/export/disk.h | 5 +++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/apps/root_menu.c b/apps/root_menu.c index 1ffde91eb7..71844dd41a 100644 --- a/apps/root_menu.c +++ b/apps/root_menu.c @@ -71,6 +71,7 @@ #endif #include "language.h" #include "plugin.h" +#include "disk.h" struct root_items { int (*function)(void* param); @@ -131,12 +132,12 @@ static int browser(void* param) for (i = 0; i < NUM_VOLUMES; i++) { char vol_string[VOL_ENUM_POS + 8]; - if (!storage_removable(i)) + if (!volume_removable(i)) continue; /* VOL_NAMES contains a %d */ snprintf(vol_string, sizeof(vol_string), "/"VOL_NAMES, i); /* test whether we would browse the external card */ - if (!storage_present(i) && + if (!volume_present(i) && (strstr(last_folder, vol_string) #ifdef HAVE_HOTSWAP_STORAGE_AS_MAIN || (i == 0) diff --git a/firmware/common/disk.c b/firmware/common/disk.c index fb6daee174..5a55a3b6ac 100644 --- a/firmware/common/disk.c +++ b/firmware/common/disk.c @@ -292,3 +292,19 @@ int disk_unmount_all(void) return unmounted; #endif /* HAVE_MULTIDRIVE */ } + +#ifdef HAVE_HOTSWAP +bool volume_removable(int volume) +{ + if(vol_drive[volume] == -1) + return false; + return storage_removable(vol_drive[volume]); +} + +bool volume_present(int volume) +{ + if(vol_drive[volume] == -1) + return false; + return storage_present(vol_drive[volume]); +} +#endif diff --git a/firmware/export/disk.h b/firmware/export/disk.h index 8d6b41b5bd..b97ec11039 100644 --- a/firmware/export/disk.h +++ b/firmware/export/disk.h @@ -50,4 +50,9 @@ int disk_unmount(int drive); int disk_get_sector_multiplier(IF_MD_NONVOID(int drive)); #endif +#ifdef HAVE_HOTSWAP +bool volume_removable(int volume); +bool volume_present(int volume); +#endif + #endif -- cgit v1.2.3