$NetBSD: patch-ab,v 1.2 2012/05/23 17:48:54 marino Exp $

--- dlls/ntdll/cdrom.c.orig	2008-06-27 16:24:42.000000000 +0200
+++ dlls/ntdll/cdrom.c
@@ -65,6 +65,16 @@
 #endif
 #ifdef HAVE_LINUX_CDROM_H
 # include <linux/cdrom.h>
+#else
+# ifndef CD_FRAMES
+#  define CD_FRAMES 75
+# endif
+# ifndef CDROM_MSF
+#  define CDROM_MSF 0x02
+# endif
+# ifndef CD_SECS
+#  define CD_SECS 60
+# endif
 #endif
 #ifdef HAVE_LINUX_UCDROM_H
 # include <linux/ucdrom.h>
@@ -473,7 +483,8 @@ static NTSTATUS CDROM_SyncCache(int dev,
    cdrom_cache[dev].toc_good = 1;
    return STATUS_SUCCESS;
 
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
+   || defined(__NetBSD__) || defined(__DragonFly__)
 
    int i, tsz;
    struct ioc_toc_header hdr;
@@ -784,7 +795,8 @@ static NTSTATUS CDROM_ResetAudio(int fd)
 {
 #if defined(linux)
     return CDROM_GetStatusCode(ioctl(fd, CDROMRESET));
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
+   || defined(__NetBSD__) || defined(__DragonFly__)
     return CDROM_GetStatusCode(ioctl(fd, CDIOCRESET, NULL));
 #else
     FIXME("not supported on this O/S\n");
@@ -801,7 +813,8 @@ static NTSTATUS CDROM_SetTray(int fd, BO
 {
 #if defined(linux)
     return CDROM_GetStatusCode(ioctl(fd, doEject ? CDROMEJECT : CDROMCLOSETRAY));
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
+   || defined(__NetBSD__) || defined(__DragonFly__)
     return CDROM_GetStatusCode((ioctl(fd, CDIOCALLOW, NULL)) ||
                                (ioctl(fd, doEject ? CDIOCEJECT : CDIOCCLOSE, NULL)) ||
                                (ioctl(fd, CDIOCPREVENT, NULL)));
@@ -823,7 +836,8 @@ static NTSTATUS CDROM_ControlEjection(in
 {
 #if defined(linux)
     return CDROM_GetStatusCode(ioctl(fd, CDROM_LOCKDOOR, rmv->PreventMediaRemoval));
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
+   || defined(__NetBSD__) || defined(__DragonFly__)
     return CDROM_GetStatusCode(ioctl(fd, (rmv->PreventMediaRemoval) ? CDIOCPREVENT : CDIOCALLOW, NULL));
 #else
     FIXME("not supported on this O/S\n");
@@ -978,7 +992,8 @@ static NTSTATUS CDROM_ReadQChannel(int d
 
  end:
     ret = CDROM_GetStatusCode(io);
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
+   || defined(__NetBSD__) || defined(__DragonFly__)
     SUB_Q_HEADER*       hdr = (SUB_Q_HEADER*)data;
     int                 io;
     struct ioc_read_subchannel	read_sc;
@@ -1134,7 +1149,8 @@ static NTSTATUS CDROM_Verify(int dev, in
         return STATUS_SUCCESS;
     else
         return STATUS_NO_MEDIA_IN_DEVICE;
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
+   || defined(__DragonFly__)
     int ret;
     ret = ioctl(fd, CDIOCSTART, NULL);
     if(ret == 0)
@@ -1187,7 +1203,8 @@ static NTSTATUS CDROM_PlayAudioMSF(int f
 	  msf.cdmsf_min1, msf.cdmsf_sec1, msf.cdmsf_frame1);
  end:
     ret = CDROM_GetStatusCode(io);
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
+   || defined(__NetBSD__) || defined(__DragonFly__)
     struct	ioc_play_msf	msf;
     int         io;
 
@@ -1232,7 +1249,8 @@ static NTSTATUS CDROM_SeekAudioMSF(int d
 #if defined(linux)
     struct cdrom_msf0	msf;
     struct cdrom_subchnl sc;
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
+   || defined(__NetBSD__) || defined(__DragonFly__)
     struct ioc_play_msf	msf;
     struct ioc_read_subchannel	read_sc;
     struct cd_sub_channel_info	sc;
@@ -1285,7 +1303,8 @@ static NTSTATUS CDROM_SeekAudioMSF(int d
       return CDROM_GetStatusCode(ioctl(fd, CDROMSEEK, &msf));
     }
     return STATUS_SUCCESS;
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
+   || defined(__NetBSD__) || defined(__DragonFly__)
     read_sc.address_format = CD_MSF_FORMAT;
     read_sc.track          = 0;
     read_sc.data_len       = sizeof(sc);
@@ -1326,7 +1345,8 @@ static NTSTATUS CDROM_PauseAudio(int fd)
 {
 #if defined(linux)
     return CDROM_GetStatusCode(ioctl(fd, CDROMPAUSE));
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
+   || defined(__NetBSD__) || defined(__DragonFly__)
     return CDROM_GetStatusCode(ioctl(fd, CDIOCPAUSE, NULL));
 #else
     FIXME(": not supported on this O/S\n");
@@ -1343,7 +1363,8 @@ static NTSTATUS CDROM_ResumeAudio(int fd
 {
 #if defined(linux)
     return CDROM_GetStatusCode(ioctl(fd, CDROMRESUME));
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
+   || defined(__NetBSD__) || defined(__DragonFly__)
     return CDROM_GetStatusCode(ioctl(fd, CDIOCRESUME, NULL));
 #else
     FIXME("not supported on this O/S\n");
@@ -1360,7 +1381,8 @@ static NTSTATUS CDROM_StopAudio(int fd)
 {
 #if defined(linux)
     return CDROM_GetStatusCode(ioctl(fd, CDROMSTOP));
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
+   || defined(__NetBSD__) || defined(__DragonFly__)
     return CDROM_GetStatusCode(ioctl(fd, CDIOCSTOP, NULL));
 #else
     FIXME("not supported on this O/S\n");
@@ -1388,7 +1410,8 @@ static NTSTATUS CDROM_GetVolume(int fd,
         vc->PortVolume[3] = volc.channel3;
     }
     return CDROM_GetStatusCode(io);
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
+   || defined(__NetBSD__) || defined(__DragonFly__)
     struct  ioc_vol     volc;
     int io;
 
@@ -1423,7 +1446,8 @@ static NTSTATUS CDROM_SetVolume(int fd,
     volc.channel3 = vc->PortVolume[3];
 
     return CDROM_GetStatusCode(ioctl(fd, CDROMVOLCTRL, &volc));
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
+   || defined(__NetBSD__) || defined(__DragonFly__)
     struct  ioc_vol     volc;
 
     volc.vol[0] = vc->PortVolume[0];
