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>
diff --git a/apps/root_menu.c b/apps/root_menu.c
index 1ffde91..71844dd 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 @@
                 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 fb6daee..5a55a3b 100644
--- a/firmware/common/disk.c
+++ b/firmware/common/disk.c
@@ -292,3 +292,19 @@
     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 8d6b41b..b97ec11 100644
--- a/firmware/export/disk.h
+++ b/firmware/export/disk.h
@@ -50,4 +50,9 @@
 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