Below is a patch to fix WINE for the new ATA driver.

I created this patch based on the ideals from a previous user
who had patched 3 other ports to work with -CURRENT's new ATA
driver.

Could someone familar with the new ATA driver have a look at this
patch to make sure it is correct.

Thanks,

Scot W. Hetzel
Index: Makefile
===================================================================
RCS file: /home/ncvs/ports/emulators/wine/Makefile,v
retrieving revision 1.152
diff -u -r1.152 Makefile
--- Makefile    27 Oct 2003 06:16:28 -0000      1.152
+++ Makefile    4 Nov 2003 04:20:37 -0000
@@ -36,8 +36,8 @@
 BROKEN=                "Not supported on systems prior to FreeBSD 4.x"
 .endif
 
-.if ${OSVERSION} >= 501106
-BROKEN=                "Broken by new ATA driver"
-.endif
-
 .if defined(DEBUG)
Index: files/patch-dlls-ntdll-cdrom.c
===================================================================
RCS file: files/patch-dlls-ntdll-cdrom.c
diff -N files/patch-dlls-ntdll-cdrom.c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ files/patch-dlls-ntdll-cdrom.c      4 Nov 2003 04:46:54 -0000
@@ -0,0 +1,59 @@
+--- dlls/ntdll/cdrom.c.orig    Tue Oct  7 21:59:22 2003
++++ dlls/ntdll/cdrom.c Mon Nov  3 22:46:11 2003
+@@ -65,8 +65,14 @@
+ #ifdef HAVE_LINUX_UCDROM_H
+ # include <linux/ucdrom.h>
+ #endif
++#ifdef HAVE_SYS_PARAM_H
++# include <sys/param.h>
++#endif
+ #ifdef HAVE_SYS_CDIO_H
+ # include <sys/cdio.h>
++#if __FreeBSD_version > 501105
++# include <sys/cdrio.h>
++#endif
+ #endif
+ #ifdef HAVE_SYS_SCSIIO_H
+ # include <sys/scsiio.h>
+@@ -1352,8 +1358,12 @@
+     }
+ #elif defined(__FreeBSD__)
+     {
++#if __FreeBSD_version < 501106
+         struct ioc_read_audio   ira;
+-
++#else
++      int bsize = sectSize;
++      int begin;
++#endif
+         switch (raw->TrackMode)
+         {
+         case YellowMode2:
+@@ -1365,12 +1375,27 @@
+         case CDDA:
+             /* 2048 = 2 ** 11 */
+             if (raw->DiskOffset.s.HighPart & ~2047) FIXME("Unsupported value\n");
++#if __FreeBSD_version < 501106
+             ira.address.lba = ((raw->DiskOffset.s.LowPart >> 11) |
+                 raw->DiskOffset.s.HighPart << (32 - 11)) - 1;
+             ira.address_format = CD_LBA_FORMAT;
+             ira.nframes = raw->SectorCount;
+             ira.buffer = buffer;
+             io = ioctl(cdrom_cache[dev].fd, CDIOCREADAUDIO, &ira);
++#else
++          if ((io = ioctl(cdrom_cache[dev].fd, CDRIOCSETBLOCKSIZE, &bsize)) == -1) {
++              return CDROM_GetStatusCode(io);
++          }
++          begin = ((raw->DiskOffset.s.LowPart >> 11) | raw->DiskOffset.s.HighPart << 
(32 - 11)) - 1;
++          io = pread(cdrom_cache[dev].fd, buffer, raw->SectorCount*bsize, 
begin*bsize);
++          if (io == raw->SectorCount*bsize) {
++              io = 0;
++          } else if (io != -1) {
++              /* We retrieved < raw->SectorCount*bsize */
++              io = 0; /* change to -1, if we are required to return an error */
++              errno = ESPIPE;
++          }
++#endif
+             break;
+         }
+     }
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to