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+
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; }