Date: Thu, 12 Jan 2006 18:33:52 -0500 (EST) From: Dan Ponte <dcp1990@neptune.atopia.net> To: FreeBSD-gnats-submit@FreeBSD.org Cc: dcp1990@neptune.atopia.net Subject: ports/91728: [PATCH] libxine ioctl errors on amd64 Message-ID: <200601122333.k0CNXqYm078938@fez.theamigan.net> Resent-Message-ID: <200601122340.k0CNe3O1032529@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>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@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:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200601122333.k0CNXqYm078938>