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