Wine not releasing CDROM

Eric Pouech eric.pouech at wanadoo.fr
Mon Apr 22 12:56:11 CDT 2002


Oliver Sampson a écrit :
> 
> Howdy,
> I'm seeing a strange behavior and I thought I'd let the Devel
> community know about it:
> 
> While using Agent v1.8, and while having a CD in my CD tray (although
> unmounted!), if I start agent under wine, I'm able to open and close
> my CD tray.  However, if I try to use the attachment window to attach
> something, the CD-ROM drive spins up, and I'm unable to open it.  Even
> if I attach nothing, the CD-ROM drive is claimed by wine so that I
> can't eject the Drive.  Once I exit agent, the drive is released so
> that I can open the drive.  Note that the CD-ROM was never mounted.
> Even a check during the blocked period shows no mounted device, even
> though the "eject' command says "device busy."
> 
> Interestingly, when I just tried this again for this email, I noticed
> the following output messages (It seems that there are some floppy
> drive assumptions, also.)
does the attached patch solves the issue ?

A+
-------------- next part --------------
Index: files/drive.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/files/drive.c,v
retrieving revision 1.67
diff -u -r1.67 drive.c
--- files/drive.c	9 Mar 2002 23:50:37 -0000	1.67
+++ files/drive.c	22 Apr 2002 17:54:52 -0000
@@ -521,6 +521,7 @@
 #define DRIVE_SUPER 96
     int fd;
     off_t offs;
+    int ret = 0;
 
     if (memset(buff,0,DRIVE_SUPER)!=buff) return -1;
     if ((fd=open(DOSDrives[drive].device,O_RDONLY)) == -1)
@@ -551,8 +552,16 @@
             break;
     }
 
-    if ((offs) && (lseek(fd,offs,SEEK_SET)!=offs)) return -4;
-    if (read(fd,buff,DRIVE_SUPER)!=DRIVE_SUPER) return -2;
+    if ((offs) && (lseek(fd,offs,SEEK_SET)!=offs)) 
+    {
+        ret = -4;
+        goto the_end;
+    }
+    if (read(fd,buff,DRIVE_SUPER)!=DRIVE_SUPER) 
+    {
+        ret = -2;
+        goto the_end;
+    }
 
     switch(DOSDrives[drive].type)
     {
@@ -565,20 +574,27 @@
             {
                 ERR("The filesystem is not FAT !! (device=%s)\n",
                     DOSDrives[drive].device);
-                return -3;
+                ret = -3;
+                goto the_end;
             }
             break;
 	case DRIVE_CDROM:
 	    if (strncmp(&buff[1],"CD001",5)) /* Check for iso9660 present */
-		return -3;
+            {
+		ret = -3;
+                goto the_end;
+            }
 	    /* FIXME: do we need to check for "CDROM", too ? (high sierra) */
-		break;
+            break;
 	default:
-		return -3;
-		break;
+            ret = -3;
+            goto the_end;
     }
 
     return close(fd);
+ the_end:
+    close(fd);
+    return ret;
 }
 
 


More information about the wine-devel mailing list