summaryrefslogtreecommitdiff
path: root/src/drivers/ao_fat.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-03-31 16:10:33 -0700
committerKeith Packard <keithp@keithp.com>2013-03-31 16:10:33 -0700
commit659a6915f5ba5129096e55ccc04c975d216546ae (patch)
treec554a53fd82a6620b66b760bb9caeaf54607aaea /src/drivers/ao_fat.c
parent182ceaac7d91dc6e9ebac6455d5de0c10687796b (diff)
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 <keithp@keithp.com>
Diffstat (limited to 'src/drivers/ao_fat.c')
-rw-r--r--src/drivers/ao_fat.c11
1 files changed, 7 insertions, 4 deletions
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