From owner-freebsd-current@FreeBSD.ORG Mon Nov 3 21:14:09 2003 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 7A79C16A4CE; Mon, 3 Nov 2003 21:14:09 -0800 (PST) Received: from mail.westbend.net (ns1.westbend.net [216.47.253.3]) by mx1.FreeBSD.org (Postfix) with ESMTP id 0375443FDD; Mon, 3 Nov 2003 21:14:08 -0800 (PST) (envelope-from hetzelsw@westbend.net) Received: from WBIw009.westbend.net (wbiw009 [216.47.253.29]) by mail.westbend.net (8.12.9/8.12.9) with ESMTP id hA45E4l5062098; Mon, 3 Nov 2003 23:14:04 -0600 (CST) (envelope-from hetzelsw@westbend.net) Received: from WBIw009.westbend.net (localhost [127.0.0.1]) by WBIw009.westbend.net (8.12.9/8.12.9) with ESMTP id hA45E3Jn065631; Mon, 3 Nov 2003 23:14:04 -0600 (CST) (envelope-from hetzelsw@westbend.net) Received: (from root@localhost) by WBIw009.westbend.net (8.12.9/8.12.9/Submit) id hA45E3Hk065630; Mon, 3 Nov 2003 23:14:03 -0600 (CST) Date: Mon, 3 Nov 2003 23:14:03 -0600 (CST) Message-Id: <200311040514.hA45E3Hk065630@WBIw009.westbend.net> From: "Scot W. Hetzel" To: gerald@FreeBSD.org, FreeBSD-Current@FreeBSD.org X-Virus-Scanned: by amavisd-milter (http://amavis.org/) X-Spam-Status: No, hits=0.8 required=8.0 tests=SPAM_PHRASE_00_01 version=2.43 Subject: Fix for WINE on -CURRENT X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 04 Nov 2003 05:14:09 -0000 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 + #endif ++#ifdef HAVE_SYS_PARAM_H ++# include ++#endif + #ifdef HAVE_SYS_CDIO_H + # include ++#if __FreeBSD_version > 501105 ++# include ++#endif + #endif + #ifdef HAVE_SYS_SCSIIO_H + # include +@@ -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; + } + }