Modify mtools to support the dummy 8.3 short filename values used by Linux systems with the VFAT_FS_NO_DUALNAMES option enabled. Signed-off-by: Andrew Tridgell diff -urp mtools-4.0.10.saved/mdir.c mtools-4.0.10/mdir.c --- mtools-4.0.10.saved/mdir.c 2009-03-03 17:10:12.000000000 +1100 +++ mtools-4.0.10/mdir.c 2009-07-16 22:59:10.000000000 +1000 @@ -416,11 +416,15 @@ static int list_file(direntry_t *entry, wchar_to_native(name,tmpBasename,8); wchar_to_native(ext,tmpExt,3); - /* is a subdirectory */ - if(mtools_dotted_dir) + /* check if it is a dummy name field from a patched + Linux kernel */ + if (Case & FAT_NO_83NAME) + printf(" "); + else if(mtools_dotted_dir) printf("%s", global_shortname); else printf("%s %s ", tmpBasename, tmpExt); + /* is a subdirectory */ if(IS_DIR(entry)) printf(" "); else diff -urp mtools-4.0.10.saved/msdos.h mtools-4.0.10/msdos.h --- mtools-4.0.10.saved/msdos.h 2009-03-03 17:10:10.000000000 +1100 +++ mtools-4.0.10/msdos.h 2009-07-16 22:58:35.000000000 +1000 @@ -56,6 +56,7 @@ struct directory { #define EXTCASE 0x10 #define BASECASE 0x8 +#define FAT_NO_83NAME 0x20 #define MAX16 0xffff #define MAX32 0xffffffff diff -urp mtools-4.0.10.saved/vfat.c mtools-4.0.10/vfat.c --- mtools-4.0.10.saved/vfat.c 2009-03-01 10:20:41.000000000 +1100 +++ mtools-4.0.10/vfat.c 2009-06-09 15:55:04.000000000 +1000 @@ -170,7 +170,7 @@ static __inline__ unsigned char sum_shor for (sum=0; name> 1) - + (*name ? *name : ' '); + + *name; return(sum); } @@ -191,8 +191,8 @@ static __inline__ void check_vfat(struct return; } - strncpy(dn.base, (char *)dir->name, 8); - strncpy(dn.ext, (char *)dir->ext, 3); + memcpy(dn.base, (char *)dir->name, 8); + memcpy(dn.ext, (char *)dir->ext, 3); if (v->sum != sum_shortname(&dn)) return;