diff --git a/src/main/io/asyncfatfs/asyncfatfs.c b/src/main/io/asyncfatfs/asyncfatfs.c index 696b5536dc..26dee019df 100644 --- a/src/main/io/asyncfatfs/asyncfatfs.c +++ b/src/main/io/asyncfatfs/asyncfatfs.c @@ -2255,8 +2255,18 @@ static void afatfs_createFileContinue(afatfsFile_t *file) { opState->phase = AFATFS_CREATEFILE_PHASE_FAILURE; goto doMore; } + } else if (entry->attrib & FAT_FILE_ATTRIBUTE_VOLUME_ID) { + break; } else if (strncmp(entry->filename, (char*) opState->filename, FAT_FILENAME_LENGTH) == 0) { - // We found a file with this name! + // We found a file or directory with this name! + + // Do not open file as dir or dir as file + if (((entry->attrib ^ file->attrib) & FAT_FILE_ATTRIBUTE_DIRECTORY) != 0) { + afatfs_findLast(&afatfs.currentDirectory); + opState->phase = AFATFS_CREATEFILE_PHASE_FAILURE; + goto doMore; + } + afatfs_fileLoadDirectoryEntry(file, entry); afatfs_findLast(&afatfs.currentDirectory); opState->phase = AFATFS_CREATEFILE_PHASE_SUCCESS;