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