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>
for (;;) {
dent = ao_fat_root_get(*entry);
if (!dent)
for (;;) {
dent = ao_fat_root_get(*entry);
if (!dent)
+ return -AO_FAT_EDIREOF;
if (dent[0] == AO_FAT_DENT_END) {
ao_fat_root_put(dent, *entry, 0);
if (dent[0] == AO_FAT_DENT_END) {
ao_fat_root_put(dent, *entry, 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)++;
}
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)++;
}
ao_fat_root_put(dent, *entry, 0);
(*entry)++;
}
ao_fat_root_put(dent, *entry, 0);
(*entry)++;
uint16_t entry = 0;
struct ao_fat_dirent dirent;
int i;
uint16_t entry = 0;
struct ao_fat_dirent dirent;
int i;
- 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('.');
for (i = 0; i < 8; i++)
putchar(dirent.name[i]);
putchar('.');
putchar (dirent.attr & ao_fat_attr[i].bit ? ao_fat_attr[i].label : ' ');
printf (" @%08x %d\n", dirent.cluster, dirent.size);
}
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);
#define AO_FAT_EMFILE 24
#define AO_FAT_EFBIG 27
#define AO_FAT_ENOSPC 28
#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
/* ao_fat_setup return values */
#define AO_FAT_FILESYSTEM_SUCCESS 0