Bug in UMSDOS, was: Re: Bug in DOSFS_ReadDir?

From: Uwe Bonnes (bon@elektron.ikp.physik.tu-darmstadt.de)
Date: Tue Aug 08 2000 - 16:16:55 EST


Hallo,

as David Parker ( and another person) found out, UMSDOS filesystems
show broken behaviour under Wine ( at least up to 2.2.16). File and
Directory creation is inconsistant when filenames outside the FAT 8.3
namedomain is involved.
This is caused be UMSDOS misbehaving:
UMSDOS does not store the long filename in the area reserved for long
filenames in VFAT. As long as one doesn't want to mount the filesystem
at a later time with VFAT, this wouldn't disturb to much. However
UMSDOS forwards all unknown IOCTLs to the MSDOS base driver. This is
where the problem happens. Wine uses the VFAT_IOCTL_READDIR_BOTH ioctl
to retrieve both the short and long filename and gets an invaild long
filename.

Short range fix:

- Add the VFAT_IOCTL_READDIR_BOTH ioctl to the list of ioctls not
passed to MSDOS fs driver.
That way Wine get's a failure on the try to use the
VFAT_IOCTL_READDIR_BOTH ioctl and handles things like on ext2.
A fix is appended.

Right fix:
- Do not only store the long filename in the --linux-.--- file but
also in the VFAT longfilename area.

Is anyone mantaining the UMSDOS filesystem?

Bye

Uwe Bonnes bon@elektron.ikp.physik.tu-darmstadt.de

Free Software: If you contribute nothing, expect nothing

--
--- linux/fs/umsdos/ioctl.c~	Tue Jan  4 19:12:24 2000
+++ linux/fs/umsdos/ioctl.c	Tue Aug  8 22:36:16 2000
@@ -92,7 +92,8 @@
 	    && cmd != UMSDOS_UNLINK_DOS
 	    && cmd != UMSDOS_RMDIR_DOS
 	    && cmd != UMSDOS_STAT_DOS
-	    && cmd != UMSDOS_DOS_SETUP)
+	    && cmd != UMSDOS_DOS_SETUP
+	    && cmd != VFAT_IOCTL_READDIR_BOTH)
 		return fat_dir_ioctl (dir, filp, cmd, data_ptr);
 
 	/* #Specification: ioctl / acces

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Aug 15 2000 - 21:00:16 EST