proper implementation of CDROM_Verify

Peter Beutner p.beutner at gmx.net
Tue Oct 25 15:26:21 CDT 2005


Change CDROM_Verify to actually check only if a media is inserted(which is what
IOCTL_{STORAGE,CDROM}_CHECK_VERIFY should do) instead of trying to do some unneccessary
subchannel reading.

Changelog:
    - proper implementation of IOCTL_{STORAGE,CDROM}_CHECK_VERIFY

-------------- next part --------------
Index: dlls/ntdll/cdrom.c
===================================================================
RCS file: /home/wine/wine/dlls/ntdll/cdrom.c,v
retrieving revision 1.71
diff -u -r1.71 cdrom.c
--- dlls/ntdll/cdrom.c	12 Sep 2005 10:30:06 -0000	1.71
+++ dlls/ntdll/cdrom.c	19 Oct 2005 19:20:18 -0000
@@ -1029,17 +1029,28 @@
 
 /******************************************************************
  *		CDROM_Verify
- *
+ *  Implements: IOCTL_STORAGE_CHECK_VERIFY
+ *              IOCTL_CDROM_CHECK_VERIFY
  *
  */
 static NTSTATUS CDROM_Verify(int dev, int fd)
 {
-    /* quick implementation */
-    CDROM_SUB_Q_DATA_FORMAT     fmt;
-    SUB_Q_CHANNEL_DATA          data;
+#if defined(linux)
+    int ret;
+
+    ret = ioctl(fd,  CDROM_DRIVE_STATUS, NULL);
+    if(ret == -1) {
+        TRACE("ioctl CDROM_DRIVE_STATUS failed(%s)!\n", strerror(errno));
+        return CDROM_GetStatusCode(ret);
+    }
 
-    fmt.Format = IOCTL_CDROM_CURRENT_POSITION;
-    return CDROM_ReadQChannel(dev, fd, &fmt, &data) ? 1 : 0;
+    if(ret == CDS_DISC_OK)
+        return STATUS_SUCCESS;
+    else
+        return STATUS_NO_MEDIA_IN_DEVICE;
+#endif
+    FIXME("not implemented for non-linux\n");
+    return STATUS_NOT_SUPPORTED;
 }
 
 /******************************************************************


More information about the wine-patches mailing list