--- file_name.c.orig 2011-06-30 08:49:12.000000000 +0200 +++ file_name.c 2017-11-12 01:33:22.103153101 +0100 @@ -161,6 +161,8 @@ wchar_t *unix_name(doscp_t *dosCp, tname[8] = '\0'; if ((s = strchr(tname, ' '))) *s = '\0'; + if (tname[0] == '\x05') + tname[0] = '\xE5'; if(!(Case & (BASECASE | EXTCASE)) && mtools_ignore_short_case) Case |= BASECASE | EXTCASE; --- mdir.c.orig 2011-06-30 08:56:17.000000000 +0200 +++ mdir.c 2017-11-12 01:44:46.388793282 +0100 @@ -398,7 +398,12 @@ static int list_file(direntry_t *entry, ext[i] = towlower(ext[i]); } ext[3] = '\0'; - dos_to_wchar(cp, entry->dir.name, name, 8); + if (entry->dir.name[0] == '\x05') { + dos_to_wchar(cp, "\xE5", name, 1); + dos_to_wchar(cp, entry->dir.name+1, name+1, 7); + } else { + dos_to_wchar(cp, entry->dir.name, name, 8); + } if(Case & BASECASE){ for(i=0; i<8;i++) name[i] = towlower(name[i]); --- mk_direntry.c.orig 2009-08-29 15:50:28.000000000 +0200 +++ mk_direntry.c 2017-11-12 01:38:08.321533920 +0100 @@ -47,6 +47,8 @@ static __inline__ int convert_to_shortna /* Then do conversion to dn */ ch->name_converter(cp, un, 0, &mangled, dn); dn->sentinel = '\0'; + if (dn->base[0] == '\xE5') + dn->base[0] = '\x05'; return mangled; } --- vfat.c.orig 2011-06-29 21:40:15.000000000 +0200 +++ vfat.c 2017-11-12 01:38:43.509826918 +0100 @@ -476,7 +476,12 @@ static dirCacheEntry_t *vfat_lookup_loop if (direntry->dir.attr & 0x8){ /* Read entry as a label */ wchar_t *ptr = newfile; - ptr += dos_to_wchar(cp, direntry->dir.name, ptr, 8); + if (direntry->dir.name[0] == '\x05') { + ptr += dos_to_wchar(cp, "\xE5", ptr, 1); + ptr += dos_to_wchar(cp, direntry->dir.name+1, ptr, 7); + } else { + ptr += dos_to_wchar(cp, direntry->dir.name, ptr, 8); + } ptr += dos_to_wchar(cp, direntry->dir.ext, ptr, 3); *ptr = '\0'; } else