Package: xmms-cdread
Severity: important
Tags: patch
Hi,
xmms-cdread fails to build on GNU/kFreeBSD due to missing support.
Please find attached a patch to fix that. Could you please add it in
the next upload?
Note that xmms-cdread also need a libtool update for this architecture.
Here are the commands to run to do that (you need to install autoconf,
automake1.4 and libtool):
libtoolize -c -f
aclocal-1.4
autoconf
automake-1.4
Don't hesitate to contact me if you need more information.
Thanks in advance,
Aurelien
-- System Information:
Debian Release: testing/unstable
Architecture: kfreebsd-i386 (i686)
Shell: /bin/sh linked to /bin/bash
Kernel: GNU/kFreeBSD 5.4-1-686
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Author: aurel32
Status: in BTS
Note: libtool update necessary (libtoolize -c -f && aclocal-1.4 && autoconf && automake-1.4)
diff -Nur xmms-cdread-0.14a/cdread.c xmms-cdread-0.14a.old/cdread.c
--- xmms-cdread-0.14a/cdread.c 2005-09-22 19:24:25.000000000 +0200
+++ xmms-cdread-0.14a.old/cdread.c 2005-09-22 19:24:07.000000000 +0200
@@ -58,7 +58,7 @@
#endif
/*\ Neat.. Three OSes with three different ways of talking to CDROM drives.. \*/
-#if defined(HAVE_SYS_CDIO_H) && (defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__))
+#if defined(HAVE_SYS_CDIO_H) && (defined(__FreeBSD__) || defined(__OpenBSD__))
#include "cdrombsd.h"
#elif defined(__SOLARIS__) || defined(__Solaris__) || defined(__solaris__) || defined(__sun__) || defined(sun)
#include "cdromsolaris.h"
@@ -719,7 +719,7 @@
#endif
{
-#if defined(HAVE_SYS_CDIO_H) && (defined(__FreeBSD__) || defined(__FreeBSD_kernel__))
+#if defined(HAVE_SYS_CDIO_H) && defined(__FreeBSD__)
struct ioc_vol vol;
CD_LOCK();
@@ -754,7 +754,7 @@
static void
set_volume(gint l, gint r)
{
-#if defined(HAVE_SYS_CDIO_H) && (defined(__FreeBSD__) || defined(__FreeBSD_kernel__))
+#if defined(HAVE_SYS_CDIO_H) && defined(__FreeBSD__)
struct ioc_vol vol;
#else
struct cdrom_volctrl vol;
@@ -788,7 +788,7 @@
CD_LOCK();
if (cd_cur && (cd_cur->cdfd >= 0))
{
-#if defined(HAVE_SYS_CDIO_H) && (defined(__FreeBSD__) || defined(__FreeBSD_kernel__))
+#if defined(HAVE_SYS_CDIO_H) && defined(__FreeBSD__)
vol.vol[0] = vol.vol[2] = (l * 255) / 100;
vol.vol[1] = vol.vol[3] = (r * 255) / 100;
ioctl(cd_cur->cdfd, CDIOCSETVOL, &vol);
diff -Nur xmms-cdread-0.14a/cdrombsd.h xmms-cdread-0.14a.old/cdrombsd.h
--- xmms-cdread-0.14a/cdrombsd.h 2005-09-22 19:24:25.000000000 +0200
+++ xmms-cdread-0.14a.old/cdrombsd.h 2001-08-18 12:09:10.000000000 +0200
@@ -5,21 +5,15 @@
#ifndef CDROMBSD_H
#define CDROMBSD_H
#include <sys/param.h>
-#include <sys/cdrio.h>
-#ifndef CD_FRAMESIZE_RAW
-#define CD_FRAMESIZE_RAW 2352
-#endif
/*\
|*| FreeBSD (?) specific code
\*/
-#ifndef __FreeBSD_kernel_version
-#define __FreeBSD_kernel_version __FreeBSD_version
-#endif
-
-#define GET_LBA(entry) ((entry.addr.msf.minute * 60 + \
- entry.addr.msf.second) * 75 + \
- entry.addr.msf.frame)
+#define GET_LBA(entry) ((entry.addr_type == CD_LBA_FORMAT) ? \
+ ntohl(entry.addr.lba) : \
+ ((entry.addr.msf.minute * 60 + \
+ entry.addr.msf.second) * 75 + \
+ entry.addr.msf.frame))
/*\
@@ -90,16 +84,6 @@
|*| from device cdfd, at position lba
|*| Return number of successfully read frames, -1 on error.
\*/
-#if __FreeBSD_kernel_version >= 501106
-static int
-cdrom_read_audio(int cdfd, int lba, char *buf, int btw)
-{
- int bsize = CD_FRAMESIZE_RAW;
- if (ioctl(cdfd, CDRIOCSETBLOCKSIZE, &bsize) == -1) return -errno;
- if (pread(cdfd, buf, btw*bsize, (lba - 150)*bsize) != btw*bsize) return 0;
- return btw;
-}
-#else // 4-STABLE
static int
cdrom_read_audio(int cdfd, int lba, char *buf, int btw)
{
@@ -117,7 +101,6 @@
} while (--rtr >= 0);
return -1;
}
-#endif //FreeBSD_kernel_version
/*\ Play audio from lba address from, to lba address to
|*| return -1 on failure
diff -Nur xmms-cdread-0.14a/server.c xmms-cdread-0.14a.old/server.c
--- xmms-cdread-0.14a/server.c 2005-09-22 19:24:25.000000000 +0200
+++ xmms-cdread-0.14a.old/server.c 2005-09-22 19:24:07.000000000 +0200
@@ -281,7 +281,7 @@
if (r < 0) {
req->rest[0] = 0;
if (errno == EAGAIN) {
- errno = ETIMEDOUT;
+ errno = ETIME;
if (++rtr < READ_TIMEOUT) {
xmms_usleep(READ_USEC);
continue;
@@ -311,7 +311,7 @@
gint w = write(sock, p, strlen(p));
if (w < 0) {
if (errno == EAGAIN) {
- errno = ETIMEDOUT;
+ errno = ETIME;
if (++rtr < READ_TIMEOUT) {
xmms_usleep(READ_USEC);
continue;