diff --git a/src/add-ons/kernel/file_systems/exfat/DirectoryIterator.cpp b/src/add-ons/kernel/file_systems/exfat/DirectoryIterator.cpp index b7cdfb29cc..10c5ee3e4d 100644 --- a/src/add-ons/kernel/file_systems/exfat/DirectoryIterator.cpp +++ b/src/add-ons/kernel/file_systems/exfat/DirectoryIterator.cpp @@ -208,9 +208,9 @@ DirectoryIterator::_GetNext(uchar* name, size_t* _nameLength, ino_t* _id, visitor->VisitFileInfo(fCurrent); } else if (fCurrent->type == EXFAT_ENTRY_TYPE_FILENAME) { TRACE("DirectoryIterator::_GetNext() Filename\n"); - memcpy((uint8*)name + nameIndex, fCurrent->label.name, - sizeof(fCurrent->label.name)); - nameIndex += sizeof(fCurrent->label.name); + memcpy((uint8*)name + nameIndex, fCurrent->file_name.name, + sizeof(fCurrent->file_name.name)); + nameIndex += sizeof(fCurrent->file_name.name); name[nameIndex] = '\0'; chunkCount--; if (visitor != NULL) diff --git a/src/add-ons/kernel/file_systems/exfat/Utility.cpp b/src/add-ons/kernel/file_systems/exfat/Utility.cpp index 5764fb9a4b..238531724a 100644 --- a/src/add-ons/kernel/file_systems/exfat/Utility.cpp +++ b/src/add-ons/kernel/file_systems/exfat/Utility.cpp @@ -30,14 +30,9 @@ get_volume_name(struct exfat_entry* entry, char* name, size_t length) if (entry->type == EXFAT_ENTRY_TYPE_NOT_IN_USE) name = ""; else if (entry->type == EXFAT_ENTRY_TYPE_LABEL) { - // UCS-2 can encode codepoints in the range U+0000 to U+FFFF - // UTF-8 needs at most 3 bytes to encode values in this range - size_t utf8NameLength = entry->label.length * 3; - if (length < utf8NameLength) - return B_NAME_TOO_LONG; - - status_t result = unicode_to_utf8((const uchar*)entry->label.name, - entry->label.length * 2, (uint8*)name, &utf8NameLength); + status_t result + = unicode_to_utf8((const uchar*)entry->volume_label.name, + entry->volume_label.length * 2, (uint8*)name, &length); if (result != B_OK) return result; } else diff --git a/src/add-ons/kernel/file_systems/exfat/exfat.h b/src/add-ons/kernel/file_systems/exfat/exfat.h index 427449e00d..8a705960fa 100644 --- a/src/add-ons/kernel/file_systems/exfat/exfat.h +++ b/src/add-ons/kernel/file_systems/exfat/exfat.h @@ -104,14 +104,14 @@ struct exfat_entry { uint8 length; uint16 name[11]; uint8 reserved[8]; - } _PACKED label; + } _PACKED volume_label; struct { uint8 chunkCount; uint16 checksum; uint16 flags; uint8 guid[16]; uint8 reserved[10]; - } _PACKED guid; + } _PACKED volume_guid; struct { uint8 reserved[3]; uint32 checksum; @@ -171,6 +171,10 @@ struct exfat_entry { uint64 Size() const { return B_LENDIAN_TO_HOST_INT64(size1); } } _PACKED file_info; + struct { + uint8 flags; + uint16 name[15]; + } _PACKED file_name; }; } _PACKED;