Alexandre Julliard : ntdll: Implemented reading of the CDROM TOC on
Mac OS.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Jun 15 07:23:07 CDT 2007
Module: wine
Branch: master
Commit: e6ce0da2f99cc8c249a453489b9b199bec1fe435
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e6ce0da2f99cc8c249a453489b9b199bec1fe435
Author: Alexandre Julliard <julliard at winehq.org>
Date: Fri Jun 15 12:42:06 2007 +0200
ntdll: Implemented reading of the CDROM TOC on Mac OS.
---
dlls/ntdll/cdrom.c | 40 +++++++++++++++++++++++++++++++++-------
1 files changed, 33 insertions(+), 7 deletions(-)
diff --git a/dlls/ntdll/cdrom.c b/dlls/ntdll/cdrom.c
index 45a2b47..f288bfe 100644
--- a/dlls/ntdll/cdrom.c
+++ b/dlls/ntdll/cdrom.c
@@ -76,13 +76,12 @@
#endif
#ifdef HAVE_IOKIT_IOKITLIB_H
-# ifndef SENSEBUFLEN
-# include <sys/disk.h>
-# include <IOKit/IOKitLib.h>
-# include <IOKit/storage/IOMedia.h>
-# include <IOKit/scsi/SCSICmds_REQUEST_SENSE_Defs.h>
-# define SENSEBUFLEN kSenseDefaultSize
-# endif
+# include <sys/disk.h>
+# include <IOKit/IOKitLib.h>
+# include <IOKit/storage/IOMedia.h>
+# include <IOKit/storage/IOCDMediaBSDClient.h>
+# include <IOKit/scsi/SCSICmds_REQUEST_SENSE_Defs.h>
+# define SENSEBUFLEN kSenseDefaultSize
#endif
#define NONAMELESSUNION
@@ -491,6 +490,33 @@ static NTSTATUS CDROM_SyncCache(int dev, int fd)
}
cdrom_cache[dev].toc_good = 1;
return STATUS_SUCCESS;
+
+#elif defined(__APPLE__)
+ int i;
+ dk_cd_read_toc_t hdr;
+ CDROM_TOC *toc = &cdrom_cache[dev].toc;
+ cdrom_cache[dev].toc_good = 0;
+
+ memset( &hdr, 0, sizeof(hdr) );
+ hdr.buffer = toc;
+ hdr.bufferLength = sizeof(*toc);
+ if (ioctl(fd, DKIOCCDREADTOC, &hdr) == -1)
+ {
+ WARN("(%d) -- Error occurred (%s)!\n", dev, strerror(errno));
+ return FILE_GetNtStatus();
+ }
+ for (i = toc->FirstTrack; i <= toc->LastTrack + 1; i++)
+ {
+ /* convert address format */
+ TRACK_DATA *data = &toc->TrackData[i - toc->FirstTrack];
+ DWORD frame = (((DWORD)data->Address[0] << 24) | ((DWORD)data->Address[1] << 16) |
+ ((DWORD)data->Address[2] << 8) | data->Address[3]);
+ MSF_OF_FRAME( data->Address[1], frame );
+ data->Address[0] = 0;
+ }
+
+ cdrom_cache[dev].toc_good = 1;
+ return STATUS_SUCCESS;
#else
return STATUS_NOT_SUPPORTED;
#endif
More information about the wine-cvs
mailing list