Skip site navigation (1)Skip section navigation (2)
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>