Change Log: add configuration option to report NTFS as the file system type for a drive.
Files changed: documentation/samples/config
documnetation/configuring.sgml
files/drive.c
--
Tony Lambregts
Index: files/drive.c =================================================================== RCS file: /home/wine/wine/files/drive.c,v retrieving revision 1.83 diff -u -r1.83 drive.c --- files/drive.c 13 Jan 2003 20:44:13 -0000 1.83 +++ files/drive.c 14 Jan 2003 03:37:48 -0000 @@ -90,6 +90,7 @@ UINT codepage; /* drive code page */ dev_t dev; /* unix device number */ ino_t ino; /* unix inode number */ + WCHAR fs_type[12]; /* file system type */ } DOSDRIVE; @@ -121,9 +122,13 @@ { {'f','a','t',0}, DRIVE_SHORT_NAMES }, { {'v','f','a','t',0}, DRIVE_CASE_PRESERVING }, { {'w','i','n','9','5',0}, DRIVE_CASE_PRESERVING }, + { {'n','t','f','s',0}, DRIVE_CASE_PRESERVING }, { { 0 }, 0 } }; +static const WCHAR win95W[] = {'w','i','n','9','5',0}; +static const WCHAR ntfsW[] = {'N','T','F','S',0}; + static DOSDRIVE DOSDrives[MAX_DOS_DRIVES]; static int DRIVE_CurDrive = -1; @@ -180,11 +185,32 @@ /*********************************************************************** + * DRIVE_GetFSType + */ +UINT DRIVE_GetFSType( LPCWSTR name, LPCWSTR value, WCHAR *fstype ) +{ + const FS_DESCR *descr; + UINT i; + + for (i = 0, descr = DRIVE_Filesystems; *descr->name; descr++, i++){ + if (!strcmpiW( value, descr->name )){ + strcpyW( fstype, descr->name ); + return i; + } + } + MESSAGE("%s: unknown filesystem type %s, defaulting to 'win95'.\n", + debugstr_w(name), debugstr_w(value) ); + strcpyW( fstype, win95W ); + return -1 ; + + +} +/*********************************************************************** * DRIVE_Init */ int DRIVE_Init(void) { - int i, len, count = 0; + int i,j, len, count = 0; WCHAR name[] = {'D','r','i','v','e',' ','A',0}; WCHAR drive_env[] = {'=','A',':',0}; WCHAR path[MAX_PATHNAME_LEN]; @@ -200,7 +226,6 @@ static const WCHAR zeroW[] = {'0',0}; static const WCHAR def_serialW[] = {'1','2','3','4','5','6','7','8',0}; static const WCHAR FilesystemW[] = {'F','i','l','e','s','y','s','t','e','m',0}; - static const WCHAR win95W[] = {'w','i','n','9','5',0}; static const WCHAR DeviceW[] = {'D','e','v','i','c','e',0}; static const WCHAR ReadVolInfoW[] = {'R','e','a','d','V','o','l','I','n','f','o',0}; static const WCHAR FailReadOnlyW[] = {'F','a','i','l','R','e','a','d','O','n','l','y',0}; @@ -277,6 +302,8 @@ /* Get the filesystem type */ PROFILE_GetWineIniString( name, FilesystemW, win95W, buffer, 80 ); drive->flags = DRIVE_GetFSFlags( name, buffer ); + + DRIVE_GetFSType(name, buffer, drive->fs_type); /* Get the device */ PROFILE_GetWineIniString( name, DeviceW, empty_strW, buffer, 80 ); @@ -468,8 +495,6 @@ } } } - - /*********************************************************************** * DRIVE_FindDriveRootW * @@ -1964,6 +1989,7 @@ if (DOSDrives[drive].flags & DRIVE_CASE_PRESERVING) *flags|=FS_CASE_IS_PRESERVED; } + if (fsname && fsname_len) { /* Diablo checks that return code ... */ @@ -1974,8 +2000,15 @@ } else { - static const WCHAR fatW[] = {'F','A','T',0}; - strncpyW( fsname, fatW, fsname_len ); + FIXME("fs_type = %s\n", + debugstr_w(DOSDrives[drive].fs_type)); + if (!strcmpiW(DOSDrives[drive].fs_type,ntfsW)) + strncpyW( fsname, ntfsW, fsname_len ); + else + { + static const WCHAR fatW[] = {'F','A','T',0}; + strncpyW( fsname, fatW, fsname_len ); + } } fsname[fsname_len - 1] = 0; /* ensure 0 termination */ } Index: documentation/configuring.sgml =================================================================== RCS file: /home/wine/wine/documentation/configuring.sgml,v retrieving revision 1.22 diff -u -r1.22 configuring.sgml --- documentation/configuring.sgml 24 Dec 2002 00:56:33 -0000 1.22 +++ documentation/configuring.sgml 14 Jan 2003 03:38:19 -0000 @@ -245,46 +245,59 @@ is a smarter choice. </para> <para> - <programlisting>"Filesystem" = "win95|unix|msdos"</programlisting> + <programlisting> + "Filesystem" = "msdos|win95|ntfs|unix" + </programlisting> Sets up the way Wine looks at files on the drive. </para> <variablelist> <varlistentry> + <term><literal>msdos</literal></term> + <listitem> + <para> + Case insensitive filesystem. Alike to DOS and + Windows 3.x. <literal>8.3</literal> is the maximum + length of files (eightdot.123) - longer ones will be + truncated. (NOTE: this is a very bad choice if you + plan on running apps that use long filenames. win95 + should work fine with apps that were designed to run + under the msdos system. In other words, you might + not want to use this.) + </para> + </listitem> + </varlistentry> + <varlistentry> <term><literal>win95</literal></term> <listitem> <para> - Case insensitive. Alike to Windows 9x/NT 4. This is + Case preserving. Alike to Windows 9x/NT 4. This is the long filename filesystem you are probably used to working with. The filesystem of choice for most - applications to be run under wine. PROBABLY THE ONE + applications that are run under Wine. PROBABLY THE ONE YOU WANT! </para> </listitem> </varlistentry> <varlistentry> - <term><literal>unix</literal></term> + <term><literal>ntfs</literal></term> <listitem> <para> - Case sensitive. This filesystem has almost no use - (Windows apps expect case insensitive filenames). - Try it if you dare, but win95 is a much better - choice. - </para> + Case preserving filesystem. The same as win95 except that + some programs check for this when saving files larger than + 2GB. Make sure that the underlaying file system supports + files > 2GB when using this. eg: ext2/3 (NOT vFAT) + </para> </listitem> </varlistentry> <varlistentry> - <term><literal>msdos</literal></term> + <term><literal>unix</literal></term> <listitem> <para> - Case insensitive filesystem. Alike to DOS and - Windows 3.x. <literal>8.3</literal> is the maximum - length of files (eightdot.123) - longer ones will be - truncated. (NOTE: this is a very bad choice if you - plan on running apps that use long filenames. win95 - should work fine with apps that were designed to run - under the msdos system. In other words, you might - not want to use this.) + Case sensitive. This filesystem has almost no use + (Windows apps expect case insensitive filenames). + Try it if you dare, but win95/ntfs are much better + choices. </para> </listitem> </varlistentry> Index: documentation/samples/config =================================================================== RCS file: /home/wine/wine/documentation/samples/config,v retrieving revision 1.37 diff -u -r1.37 config --- documentation/samples/config 13 Dec 2002 02:26:18 -0000 1.37 +++ documentation/samples/config 14 Jan 2003 03:38:30 -0000 @@ -13,13 +13,17 @@ ;; "Type"="xxx" (supported types are 'floppy', 'hd', 'cdrom' and 'network') ;; "Label"="xxx" (drive label, at most 11 characters) ;; "Serial"="xxx" (serial number, 8 characters hexadecimal number) -;; "Filesystem"="xxx" (supported types are 'msdos'/'dos'/'fat', 'win95'/'vfat', 'unix') +;; "Filesystem"="xxx" (supported types are 'msdos'/'dos'/'fat', +;; 'win95'/'vfat', +;; 'ntfs', +;; 'unix') ;; This is the FS Wine is supposed to emulate on a certain ;; directory structure. ;; Recommended: ;; - "win95" for ext2fs, VFAT and FAT32 ;; - "msdos" for FAT16 (ugly, upgrading to VFAT driver strongly recommended) -;; DON'T use "unix" unless you intend to port programs using Winelib ! +;; - "ntfs" for ext2fs (some program need this to write files > 2GB) +;; - "unix" DO NOT USE unless you intend to port programs using Winelib ! ;; "Device"="/dev/xx" (only if you want to allow raw device access) ;; [Drive A]