Charles Davis : ntdll: Implement CDROM_ReadQChannel() on Mac OS.

Alexandre Julliard julliard at winehq.org
Tue Oct 13 10:52:56 CDT 2009


Module: wine
Branch: master
Commit: c7992a8d260e0ce4073f85988c81b5c09a8c127f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c7992a8d260e0ce4073f85988c81b5c09a8c127f

Author: Charles Davis <cdavis at mymail.mines.edu>
Date:   Mon Oct 12 13:15:35 2009 -0600

ntdll: Implement CDROM_ReadQChannel() on Mac OS.

---

 dlls/ntdll/cdrom.c |   31 +++++++++++++++++++++++++++++++
 1 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/dlls/ntdll/cdrom.c b/dlls/ntdll/cdrom.c
index 574f737..8e334df 100644
--- a/dlls/ntdll/cdrom.c
+++ b/dlls/ntdll/cdrom.c
@@ -1007,6 +1007,37 @@ static NTSTATUS CDROM_ReadQChannel(int dev, int fd, const CDROM_SUB_Q_DATA_FORMA
 
  end:
     ret = CDROM_GetStatusCode(io);
+#elif defined(__APPLE__)
+    SUB_Q_HEADER* hdr = (SUB_Q_HEADER*)data;
+    int io = 0;
+    union
+    {
+        dk_cd_read_mcn_t mcn;
+        dk_cd_read_isrc_t isrc;
+    } ioc;
+    /* We need IOCDAudioControl for IOCTL_CDROM_CURRENT_POSITION */
+    if (fmt->Format == IOCTL_CDROM_CURRENT_POSITION)
+    {
+        ERR("This version of Mac OS X does not support IOCDAudioControl\n");
+        return STATUS_NOT_SUPPORTED;
+    }
+    /* No IOCDAudioControl support; just set the audio status to none */
+    hdr->AudioStatus = AUDIO_STATUS_NO_STATUS;
+    switch(fmt->Format)
+    {
+    case IOCTL_CDROM_MEDIA_CATALOG:
+        if ((io = ioctl(fd, DKIOCCDREADMCN, &ioc.mcn)) == -1) break;
+        memcpy(data->MediaCatalog.MediaCatalog, ioc.mcn.mcn, kCDMCNMaxLength);
+        data->MediaCatalog.Mcval = 1;
+        break;
+    case IOCTL_CDROM_TRACK_ISRC:
+        ioc.isrc.track = fmt->Track;
+        if ((io = ioctl(fd, DKIOCCDREADISRC, &ioc.isrc)) == -1) break;
+        memcpy(data->TrackIsrc.TrackIsrc, ioc.isrc.isrc, kCDISRCMaxLength);
+        data->TrackIsrc.Tcval = 1;
+        data->TrackIsrc.Track = ioc.isrc.track;
+    }
+    ret = CDROM_GetStatusCode(io);
 #endif
     return ret;
 }




More information about the wine-cvs mailing list