X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fdrivers%2Fao_fat.c;h=6aae1410b8676821fec41d7d5f06bd8e6928c947;hb=76bd204de744c34e5cbf6efa93adb89bc2cb08b3;hp=bb0aa7a221e40e9f0ebfda422603e3d740606611;hpb=a70139c9a8a177df8f20f525703b13c0aec0fbc7;p=fw%2Faltos diff --git a/src/drivers/ao_fat.c b/src/drivers/ao_fat.c index bb0aa7a2..6aae1410 100644 --- a/src/drivers/ao_fat.c +++ b/src/drivers/ao_fat.c @@ -30,6 +30,10 @@ /* Spew FAT tracing */ #define FAT_TRACE 0 +#ifdef DBG +#undef DBG +#endif + #if FAT_TRACE #define DBG(...) printf(__VA_ARGS__) #else @@ -608,6 +612,12 @@ ao_fat_setup(void) return ao_filesystem_status; } +void +ao_fat_unmount(void) +{ + ao_filesystem_setup = 0; +} + /* * Basic file operations */ @@ -1147,17 +1157,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)++; @@ -1226,8 +1236,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('.'); @@ -1237,6 +1248,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 @@ -1257,6 +1270,8 @@ ao_fat_parse_name(char name[11]) } ao_cmd_lex(); } + while (c < 11) + name[c++] = ' '; } static void