summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2013-11-20 16:39:42 +0000
committerAmaury Pouly <amaury.pouly@gmail.com>2013-11-20 21:34:04 +0100
commit193753aa1f93ba28995a80048cbc46f1fc5cde05 (patch)
treeb5ff0ab364235dbd49e96ff48ebdedda6701c51d
parentc71e0567d60af8e409ede4034d72e8accf98cb87 (diff)
downloadrockbox-193753aa1f93ba28995a80048cbc46f1fc5cde05.tar.gz
rockbox-193753aa1f93ba28995a80048cbc46f1fc5cde05.zip
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 <amaury.pouly@gmail.com>
-rw-r--r--apps/root_menu.c5
-rw-r--r--firmware/common/disk.c16
-rw-r--r--firmware/export/disk.h5
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