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;