Re: bug #1283: autofs'mount'ed drives ignored (e.g. "A:" on /vol/avia autofs master.vol)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



patch regenerated due to changes in cvs.
please bla bla bla, whatever.

bcc sent to selected wine rpm makers, if you are not yet
on my bcc list, please contact me, thank you, -- guidod

Guido Draheim schrieb:
Patch regenerated - there's been a two line offset
in documentation/configuring.sgml - three files affected:

$ patch -p0 < ../wine-vol-a/wine-20030420-autofs.patch
patching file documentation/configuring.sgml
patching file documentation/samples/config
patching file files/drive.c

It's the six month anniversary of this patch and also
two months after   Tony Lambregts   did kindly help me
to clean this patch up ready for acceptance. -- guido

Guido Draheim schrieb:

The following text is a shortened description of
the bug - a long description, screenshots and patches
can be found at

http://freespace.sf.net/guidod/wine-vol-a/

further (lengthy) comments can be found in the bugzilla
logs where Tony Lambregts was kindly reviewing and
accepting the patch:

http://bugs.winehq.com/show_bug.cgi?id=1283

The problem:
   If there is no medium in a autofs mounted floppy
   drive at startup of wine, then files on the floppy
   are inaccessible even when a medium is inserted later.

The diagnosis:
   The DRIVE_Init will throw away any mount-point that
   does not exist at startup time - it does not make
   it to the internal drive. It will not check later
   whether the mount-point came into existance somewhen
   in between - you need to restart

The real way:
   There is no need to keep this behaviour, the wine's
   drive access method can handle it that a mount-point
   is removed somewhere in between: it prints warning
   messages and continues to work properly. This is
   partly the windowish way: just say the drive is
   inaccessible as warning during runtime, do not
   kill it beforehand.

The patch:
   A .wine/config boolean option "AutoMount" is introduced
   that will default to the old behavior. When being
   enabled then a warning-message logged but the drive
   is kept in the internal drivelist and can be seen in
   the file-open dialog-box.

At the moment, applications work properly with wine cvs
but we still need to patch the sources like that to make
it useable for us.

cheers, guido counter.li.org #81555


------------------------------------------------------------------------


Index: documentation/configuring.sgml
===================================================================
RCS file: /home/wine/wine/documentation/configuring.sgml,v
retrieving revision 1.25
diff -u -r1.25 configuring.sgml
--- documentation/configuring.sgml 19 Apr 2003 02:50:57 -0000 1.25
+++ documentation/configuring.sgml 20 Apr 2003 11:52:56 -0000
@@ -463,6 +463,16 @@
linkend="config-drive-main">Wine file system layer
configuration section</link>.
</para>
+ <para>
+ <programlisting>"Automount" = "1"</programlisting>
+ This option is useful with some automounters (e.g. + "autofs" in Linux). These will only create the path + when the target is accessible, e.g. a medium is + inserted ("Type" = "cdrom|floppy") or the network share + reachable. If this option is present and non-zero then + the drive X is accepted with the given path/type/device + even when the "Path" is not existant during startup.
+ </para>
<para>
<programlisting>"GraphicsDriver" = "x11drv|ttydrv"</programlisting>
Sets the graphics driver to use for Wine output.
Index: documentation/samples/config
===================================================================
RCS file: /home/wine/wine/documentation/samples/config,v
retrieving revision 1.43
diff -u -r1.43 config
--- documentation/samples/config 7 Apr 2003 23:27:54 -0000 1.43
+++ documentation/samples/config 20 Apr 2003 11:52:56 -0000
@@ -21,6 +21,7 @@
;; - "msdos" for FAT16 (ugly, upgrading to VFAT driver strongly recommended)
;; DON'T use "unix" unless you intend to port programs using Winelib !
;; "Device"="/dev/xx" (only if you want to allow raw device access)
+;; "Automount"="x" "1"= Drive is Automounted by native file system
;;
[Drive A]
"Path" = "/mnt/fd0"
@@ -29,6 +30,7 @@
"Filesystem" = "win95"
"Serial" = "87654321"
"Device" = "/dev/fd0"
+;"Automount" = "1"
[Drive C]
"Path" = "/c"
Index: files/drive.c
===================================================================
RCS file: /home/wine/wine/files/drive.c,v
retrieving revision 1.89
diff -u -r1.89 drive.c
--- files/drive.c 19 Apr 2003 02:48:34 -0000 1.89
+++ files/drive.c 20 Apr 2003 11:53:00 -0000
@@ -204,6 +204,7 @@
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};
static const WCHAR driveC_labelW[] = {'D','r','i','v','e',' ','C',' ',' ',' ',' ',0};
+ static const WCHAR AutoMountW[] = {'A','u','t','o','M','o','u','n','t',0};
for (i = 0, drive = DOSDrives; i < MAX_DOS_DRIVES; i++, name[6]++, drive++)
{
@@ -235,15 +236,24 @@
WideCharToMultiByte(drive->codepage, 0, path, -1, drive->root + strlen(drive->root), len, NULL, NULL);
}
- if (stat( drive->root, &drive_stat_buffer ))
+ if (stat( drive->root, &drive_stat_buffer )) {
- MESSAGE("Could not stat %s (%s), ignoring drive %c:\n",
- drive->root, strerror(errno), 'A' + i);
- HeapFree( GetProcessHeap(), 0, drive->root );
- drive->root = NULL;
- continue;
+ if (PROFILE_GetWineIniBool (name, AutoMountW, 0))
+ {
+ MESSAGE("Could not stat %s (%s), keeping automount drive %c:\n",
+ drive->root, strerror(errno), 'A' + i);
+ /* never match in DRIVE_FindDriveRoot */
+ drive_stat_buffer.st_dev = 0;
+ drive_stat_buffer.st_ino = 0;
+ }else{
+ MESSAGE("Could not stat %s (%s), ignoring drive %c:\n",
+ drive->root, strerror(errno), 'A' + i);
+ HeapFree( GetProcessHeap(), 0, drive->root );
+ drive->root = NULL;
+ continue;
+ }
}
- if (!S_ISDIR(drive_stat_buffer.st_mode))
+ else if (!S_ISDIR(drive_stat_buffer.st_mode))
{
MESSAGE("%s is not a directory, ignoring drive %c:\n",
drive->root, 'A' + i );

-- -- guido http://google.de/search?q=guidod GCS/E/S/P C++/++++$ ULHS L++w- N++@ d(+-) s+a- r+@>+++ y++ 5++X- (geekcode)
Index: documentation/configuring.sgml
===================================================================
RCS file: /home/wine/wine/documentation/configuring.sgml,v
retrieving revision 1.26
diff -u -r1.26 configuring.sgml
--- documentation/configuring.sgml	6 May 2003 18:36:09 -0000	1.26
+++ documentation/configuring.sgml	26 Jun 2003 19:53:15 -0000
@@ -470,6 +470,16 @@
 	    linkend="config-drive-main">Wine file system layer
 	    configuration section</link>.
           </para>
+	  <para>
+	    <programlisting>"Automount" = "1"</programlisting>
+	    This option is useful with some automounters (e.g. 
+	    "autofs" in Linux). These will only create the path 
+	    when the target is accessible, e.g. a medium is 
+	    inserted ("Type" = "cdrom|floppy") or the network share 
+	    reachable. If this option is present and non-zero then 
+	    the drive X is accepted with the given path/type/device 
+	    even when the "Path" is not existant during startup.
+	  </para>
           <para>
             <programlisting>"GraphicsDriver" = "x11drv|ttydrv"</programlisting>
   	    Sets the graphics driver to use for Wine output.
Index: documentation/samples/config
===================================================================
RCS file: /home/wine/wine/documentation/samples/config,v
retrieving revision 1.45
diff -u -r1.45 config
--- documentation/samples/config	7 Jun 2003 00:36:18 -0000	1.45
+++ documentation/samples/config	26 Jun 2003 19:53:16 -0000
@@ -21,6 +21,7 @@
 ;;   - "msdos" for FAT16 (ugly, upgrading to VFAT driver strongly recommended)
 ;;   DON'T use "unix" unless you intend to port programs using Winelib !
 ;; "Device"="/dev/xx" (only if you want to allow raw device access)
+;; "Automount"="x" "1"= Drive is Automounted by native file system
 ;;
 [Drive A]
 "Path" = "/mnt/fd0"
@@ -29,6 +30,7 @@
 "Filesystem" = "win95"
 "Serial" = "87654321"
 "Device" = "/dev/fd0"
+;"Automount" = "1"
 
 [Drive C]
 "Path" = "/c"
Index: files/drive.c
===================================================================
RCS file: /home/wine/wine/files/drive.c,v
retrieving revision 1.90
diff -u -r1.90 drive.c
--- files/drive.c	4 Jun 2003 20:17:52 -0000	1.90
+++ files/drive.c	26 Jun 2003 19:53:19 -0000
@@ -204,6 +204,7 @@
     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};
     static const WCHAR driveC_labelW[] = {'D','r','i','v','e',' ','C',' ',' ',' ',' ',0};
+    static const WCHAR AutoMountW[] = {'A','u','t','o','M','o','u','n','t',0};
 
     for (i = 0, drive = DOSDrives; i < MAX_DOS_DRIVES; i++, name[6]++, drive++)
     {
@@ -235,15 +236,24 @@
                 WideCharToMultiByte(drive->codepage, 0, path, -1, drive->root + strlen(drive->root), len, NULL, NULL);
             }
 
-            if (stat( drive->root, &drive_stat_buffer ))
+            if (stat( drive->root, &drive_stat_buffer )) 
             {
-                MESSAGE("Could not stat %s (%s), ignoring drive %c:\n",
-                        drive->root, strerror(errno), 'A' + i);
-                HeapFree( GetProcessHeap(), 0, drive->root );
-                drive->root = NULL;
-                continue;
+                if (PROFILE_GetWineIniBool (name, AutoMountW, 0))
+                {
+                    MESSAGE("Could not stat %s (%s), keeping automount drive %c:\n",
+                            drive->root, strerror(errno), 'A' + i);
+                    /* never match in DRIVE_FindDriveRoot */
+                    drive_stat_buffer.st_dev = 0;
+                    drive_stat_buffer.st_ino = 0;
+                }else{
+                    MESSAGE("Could not stat %s (%s), ignoring drive %c:\n",
+                            drive->root, strerror(errno), 'A' + i);
+                    HeapFree( GetProcessHeap(), 0, drive->root );
+                    drive->root = NULL;
+                    continue;
+                }
             }
-            if (!S_ISDIR(drive_stat_buffer.st_mode))
+            else if (!S_ISDIR(drive_stat_buffer.st_mode))
             {
                 MESSAGE("%s is not a directory, ignoring drive %c:\n",
                         drive->root, 'A' + i );

[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux