diff --git a/include/mem.h b/include/mem.h index da130bb8..e18cbe2e 100644 --- a/include/mem.h +++ b/include/mem.h @@ -127,6 +127,10 @@ static INLINE void host_writed(HostPt off,Bit32u val) { // // __builtin_bswap* is supported since GCC 4.3 and Clang 3.4 +constexpr static INLINE uint8_t host_to_le(uint8_t val) { + return val; +} + #if defined(WORDS_BIGENDIAN) constexpr static INLINE int16_t host_to_le(int16_t val) { diff --git a/src/dos/drive_fat.cpp b/src/dos/drive_fat.cpp index cdad0c30..510851df 100644 --- a/src/dos/drive_fat.cpp +++ b/src/dos/drive_fat.cpp @@ -1098,15 +1098,18 @@ char* trimString(char* str, const size_t max_len) { } static void copyDirEntry(const direntry *src, direntry *dst) { - memcpy(dst, src, 14); // single byte fields - dst->crtTime = host_to_le(src->crtTime); - dst->crtDate = host_to_le(src->crtDate); - dst->accessDate = host_to_le(src->accessDate); - dst->hiFirstClust = host_to_le(src->hiFirstClust); - dst->modTime = host_to_le(src->modTime); - dst->modDate = host_to_le(src->modDate); - dst->loFirstClust = host_to_le(src->loFirstClust); - dst->entrysize = host_to_le(src->entrysize); + memcpy(dst->entryname, src->entryname, sizeof(src->entryname)); + dst->attrib = host_to_le(src->attrib); + dst->NTRes = host_to_le(src->NTRes); + dst->milliSecondStamp = host_to_le(src->milliSecondStamp); + dst->crtTime = host_to_le(src->crtTime); + dst->crtDate = host_to_le(src->crtDate); + dst->accessDate = host_to_le(src->accessDate); + dst->hiFirstClust = host_to_le(src->hiFirstClust); + dst->modTime = host_to_le(src->modTime); + dst->modDate = host_to_le(src->modDate); + dst->loFirstClust = host_to_le(src->loFirstClust); + dst->entrysize = host_to_le(src->entrysize); } bool fatDrive::FindNextInternal(Bit32u dirClustNumber, DOS_DTA &dta, direntry *foundEntry) {