diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2013-11-20 16:39:42 +0000 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2013-11-20 21:34:04 +0100 |
commit | 193753aa1f93ba28995a80048cbc46f1fc5cde05 (patch) | |
tree | b5ff0ab364235dbd49e96ff48ebdedda6701c51d | |
parent | c71e0567d60af8e409ede4034d72e8accf98cb87 (diff) |
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.c | 5 | ||||
-rw-r--r-- | firmware/common/disk.c | 16 | ||||
-rw-r--r-- | 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 |