1
0
Fork 0
forked from len0rd/rockbox

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>
This commit is contained in:
Amaury Pouly 2013-11-20 16:39:42 +00:00
parent c71e0567d6
commit 193753aa1f
3 changed files with 24 additions and 2 deletions

View file

@ -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)

View file

@ -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

View file

@ -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