diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/drivers/ao_fat.c | 11 | ||||
| -rw-r--r-- | src/drivers/ao_fat.h | 1 | 
2 files changed, 8 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 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  | 
