ports/91728: [PATCH] libxine ioctl errors on amd64
Dan Ponte
dcp1990 at neptune.atopia.net
Thu Jan 12 23:40:04 UTC 2006
>Number: 91728
>Category: ports
>Synopsis: [PATCH] libxine ioctl errors on amd64
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Jan 12 23:40:03 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator: Dan Ponte
>Release: FreeBSD 6.0-STABLE amd64
>Organization:
Unix Users Anonymous
>Environment:
System: FreeBSD fez.theamigan.net 6.0-STABLE FreeBSD 6.0-STABLE #0: Wed Jan 11 18:13:32 EST 2006 root at fez.theamigan.net:/usr/obj/usr/src/sys/FEZ amd64
>Description:
When using xine/libxine and trying to change the volume, one will receive errors such as the following in their dmesg:
WARNING pid 56010 (xine): ioctl sign-extension ioctl ffffffffc0044d04
This is because libxine uses int for the request argument to ioctl(2). This is not a problem on i386, since sizeof(int) == sizeof(long). However, on amd64, where long is larger than int, it is a problem.
>How-To-Repeat:
Use xine and try to change the volume with its interface.
>Fix:
Apply the following patch:
--- xinepatch.diff begins here ---
--- work/xine-lib-1.1.1/src/audio_out/audio_oss_out_old.c Thu Jan 12 17:46:36 2006
+++ work/xine-lib-1.1.1/src/audio_out/audio_oss_out.c Thu Jan 12 18:26:16 2006
@@ -155,7 +155,7 @@
uint32_t bits, uint32_t rate, int mode) {
oss_driver_t *this = (oss_driver_t *) this_gen;
- int tmp;
+ long tmp;
xprintf(this->xine, XINE_VERBOSITY_DEBUG,
"audio_oss_out: ao_open rate=%d, mode=%d, dev=%s\n", rate, mode, this->audio_dev);
@@ -287,14 +287,14 @@
if (bits==8) {
xprintf(this->xine, XINE_VERBOSITY_DEBUG, "audio_oss_out: SNDCTL_DSP_SETFMT failed for AFMT_U8.\n");
if (tmp != AFMT_U8)
- xprintf(this->xine, XINE_VERBOSITY_DEBUG, "audio_oss_out: ioctl succeeded but set format to 0x%x.\n",tmp);
+ xprintf(this->xine, XINE_VERBOSITY_DEBUG, "audio_oss_out: ioctl succeeded but set format to 0x%lx.\n",tmp);
else
xprintf(this->xine, XINE_VERBOSITY_DEBUG, "audio_oss_out: The AFMT_U8 ioctl failed.\n");
return 0;
} else {
xprintf(this->xine, XINE_VERBOSITY_DEBUG, "audio_oss_out: SNDCTL_DSP_SETFMT failed for AFMT_S16_NE.\n");
if (tmp != AFMT_S16_NE)
- xprintf(this->xine, XINE_VERBOSITY_DEBUG, "audio_oss_out: ioctl succeeded but set format to 0x%x.\n",tmp);
+ xprintf(this->xine, XINE_VERBOSITY_DEBUG, "audio_oss_out: ioctl succeeded but set format to 0x%lx.\n",tmp);
else
xprintf(this->xine, XINE_VERBOSITY_DEBUG, "audio_oss_out: The AFMT_S16_NE ioctl failed.\n");
return 0;
@@ -313,7 +313,7 @@
tmp = AFMT_AC3;
if (ioctl(this->audio_fd, SNDCTL_DSP_SETFMT, &tmp) < 0 || tmp != AFMT_AC3) {
xprintf(this->xine, XINE_VERBOSITY_DEBUG,
- "audio_oss_out: AC3 SNDCTL_DSP_SETFMT failed. %d. Using alternative.\n",tmp);
+ "audio_oss_out: AC3 SNDCTL_DSP_SETFMT failed. %ld. Using alternative.\n",tmp);
tmp = AFMT_S16_LE;
ioctl(this->audio_fd, SNDCTL_DSP_SETFMT, &tmp);
}
@@ -369,7 +369,7 @@
count_info info;
oss_driver_t *this = (oss_driver_t *) this_gen;
- int bytes_left;
+ long bytes_left;
int frames;
struct timeval tv;
@@ -507,7 +507,7 @@
static int ao_oss_get_property (ao_driver_t *this_gen, int property) {
oss_driver_t *this = (oss_driver_t *) this_gen;
- int audio_devs;
+ long audio_devs;
switch(property) {
case AO_PROP_PCM_VOL:
@@ -515,8 +515,8 @@
if(!this->mixer.mute) {
if(this->mixer.fd != -1) {
- int cmd = 0;
- int v;
+ long cmd = 0;
+ long v;
ioctl(this->mixer.fd, SOUND_MIXER_READ_DEVMASK, &audio_devs);
@@ -546,7 +546,7 @@
static int ao_oss_set_property (ao_driver_t *this_gen, int property, int value) {
oss_driver_t *this = (oss_driver_t *) this_gen;
- int audio_devs;
+ long audio_devs;
switch(property) {
case AO_PROP_PCM_VOL:
@@ -554,8 +554,8 @@
if(!this->mixer.mute) {
if(this->mixer.fd != -1) {
- int cmd = 0;
- int v;
+ long cmd = 0;
+ long v;
ioctl(this->mixer.fd, SOUND_MIXER_READ_DEVMASK, &audio_devs);
@@ -583,8 +583,8 @@
if(this->mixer.mute) {
if(this->mixer.fd != -1) {
- int cmd = 0;
- int v = 0;
+ long cmd = 0;
+ long v = 0;
ioctl(this->mixer.fd, SOUND_MIXER_READ_DEVMASK, &audio_devs);
@@ -657,7 +657,7 @@
static int probe_audio_devices(oss_driver_t *this) {
const char *base_names[2] = {"/dev/dsp", "/dev/sound/dsp"};
int base_num, i;
- int audio_fd, rate;
+ long audio_fd, rate;
int best_rate;
char devname[30];
@@ -696,9 +696,9 @@
oss_class_t *class = (oss_class_t *) class_gen;
config_values_t *config = class->config;
oss_driver_t *this;
- int caps;
+ long caps;
int audio_fd;
- int num_channels, status, arg;
+ long num_channels, status, arg;
static char *sync_methods[] = {"auto", "getodelay", "getoptr", "softsync", "probebuffer", NULL};
static char *devname_opts[] = {"auto", "/dev/dsp", "/dev/sound/dsp", NULL};
int devname_val, devname_num;
--- xinepatch.diff ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list