From: Keith Packard Date: Sun, 31 Mar 2013 23:10:33 +0000 (-0700) Subject: altos: Make ao_fat_readdir return real error values instead of 1/0 X-Git-Tag: altosdroid_v1.2-1~48 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=659a6915f5ba5129096e55ccc04c975d216546ae altos: Make ao_fat_readdir return real error values instead of 1/0 This way, we can distinguish between 'something bad happened' and 'you're at the end of the directory'. Signed-off-by: Keith Packard --- diff --git a/src/drivers/ao_fat.c b/src/drivers/ao_fat.c index 3e9c00b5..ddf560cc 100644 --- a/src/drivers/ao_fat.c +++ b/src/drivers/ao_fat.c @@ -1153,17 +1153,17 @@ ao_fat_readdir(uint16_t *entry, struct ao_fat_dirent *dirent) for (;;) { dent = ao_fat_root_get(*entry); if (!dent) - return 0; + return -AO_FAT_EDIREOF; if (dent[0] == AO_FAT_DENT_END) { ao_fat_root_put(dent, *entry, 0); - return 0; + return -AO_FAT_EDIREOF; } if (dent[0] != AO_FAT_DENT_EMPTY && (dent[0xb] & 0xf) != 0xf) { ao_fat_dirent_init(dent, *entry, dirent); ao_fat_root_put(dent, *entry, 0); (*entry)++; - return 1; + return AO_FAT_SUCCESS; } ao_fat_root_put(dent, *entry, 0); (*entry)++; @@ -1232,8 +1232,9 @@ ao_fat_list_cmd(void) uint16_t entry = 0; struct ao_fat_dirent dirent; int i; + int8_t status; - while (ao_fat_readdir(&entry, &dirent)) { + while ((status = ao_fat_readdir(&entry, &dirent)) == AO_FAT_SUCCESS) { for (i = 0; i < 8; i++) putchar(dirent.name[i]); putchar('.'); @@ -1243,6 +1244,8 @@ ao_fat_list_cmd(void) putchar (dirent.attr & ao_fat_attr[i].bit ? ao_fat_attr[i].label : ' '); printf (" @%08x %d\n", dirent.cluster, dirent.size); } + if (status != -AO_FAT_EDIREOF) + printf ("readdir failed: %d\n", status); } static uint8_t diff --git a/src/drivers/ao_fat.h b/src/drivers/ao_fat.h index 36aec7df..fe154cdf 100644 --- a/src/drivers/ao_fat.h +++ b/src/drivers/ao_fat.h @@ -48,6 +48,7 @@ ao_fat_init(void); #define AO_FAT_EMFILE 24 #define AO_FAT_EFBIG 27 #define AO_FAT_ENOSPC 28 +#define AO_FAT_EDIREOF 29 /* ao_fat_setup return values */ #define AO_FAT_FILESYSTEM_SUCCESS 0