Fix bugs in CDROM_GetSerial
Mike McCormack
mike at codeweavers.com
Mon Jul 21 05:27:37 CDT 2003
ChangeLog:
* Fix a couple of bugs in CDROM_GetSerial from WineHQ.
- it would fail if DeviceIoControl succeeded.
- it would leak handles in some cases.
-------------- next part --------------
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 21 Jul 2003 10:11:39 -0000
@@ -861,12 +861,18 @@
*/
static DWORD CDROM_GetLabel(int drive, WCHAR *label)
{
- HANDLE h = CDROM_Open(drive);
+ HANDLE h;
CDROM_DISK_DATA cdd;
- DWORD br;
- DWORD ret = 1;
+ DWORD br, ret = 1;
+ BOOL r;
- if (!h || !DeviceIoControl(h, IOCTL_CDROM_DISK_TYPE, NULL, 0, &cdd, sizeof(cdd), &br, 0))
+ h = CDROM_Open(drive);
+ if( !h )
+ return 0;
+ r = DeviceIoControl(h, IOCTL_CDROM_DISK_TYPE, NULL,
+ 0, &cdd, sizeof(cdd), &br, 0);
+ CloseHandle( h );
+ if( !r )
return 0;
switch (cdd.DiskData & 0x03)
@@ -1032,12 +1038,23 @@
static DWORD CDROM_GetSerial(int drive)
{
DWORD serial = 0;
- HANDLE h = CDROM_Open(drive);
+ HANDLE h;
CDROM_DISK_DATA cdd;
DWORD br;
+ BOOL r;
+
+ TRACE("%d\n", drive);
- if (!h || ! !DeviceIoControl(h, IOCTL_CDROM_DISK_TYPE, NULL, 0, &cdd, sizeof(cdd), &br, 0))
+ h = CDROM_Open(drive);
+ if( !h )
return 0;
+ r = DeviceIoControl(h, IOCTL_CDROM_DISK_TYPE, NULL,
+ 0, &cdd, sizeof(cdd), &br, 0);
+ if (!r)
+ {
+ CloseHandle(h);
+ return 0;
+ }
switch (cdd.DiskData & 0x03)
{
More information about the wine-patches
mailing list