Am 20.04.2010 10:44, schrieb Sebastian Dröge:
> On Tue, 2010-04-20 at 15:58 +0900, Nobuhiro Iwamatsu wrote:
>> Source: buzztard
>> Version: 0.5.0-2
>> Severity: serious
>>
>> Hi,
>>
>> your package FTBFS on armel, alpha and sh4.
>>   https://buildd.debian.org/pkg.cgi?pkg=buzztard
>>
>> Relevant part:
>> [...]
>> .libs/libbuzztard_core_la-processor-machine.o
>> processor-machine.c: In function 'bt_processor_machine_persistence_load':
>> processor-machine.c:150: error: incompatible type for argument 6 of
>> 'parent_iface->load'
>> processor-machine.c:150: note: expected 'va_list' but argument is of
>> type 'void *'
>> make[7]: *** [libbuzztard_core_la-processor-machine.lo] Error 1
>> make[7]: Leaving directory
>> `/build/buildd-buzztard_0.5.0-2-alpha-PLxAsg/buzztard-0.5.0/src/lib/core'
>> make[6]: *** [all-recursive] Error 1
>> -----
> 
> Thanks for reporting, does the attached patch fix it for you?
> 
> 
> Stefan, is this the correct fix or will this break buzztard or do you
> have a better idea how to fix this? :)

The patch was needed in 3 files. I slighly modified it to use compatibility
macros from glib. The attached patch is applied to svn head. Thanks!

Stefan
2010-04-20  Stefan Kost  <enso...@users.sf.net>

	* src/lib/core/processor-machine.c:
	* src/lib/core/sink-machine.c:
	* src/lib/core/source-machine.c:
	  Fix portability issues caused by passing NULL for va_list.

Index: src/lib/core/processor-machine.c
===================================================================
--- src/lib/core/processor-machine.c	(revision 2817)
+++ src/lib/core/processor-machine.c	(working copy)
@@ -114,18 +114,20 @@
   if(!persistence) {
     BtSong *song=NULL;
     gchar *param_name;
+    va_list va;
 
+    G_VA_COPY(va,var_args);
     // we need to get parameters from var_args (need to handle all baseclass params
-    param_name=va_arg(var_args,gchar*);
+    param_name=va_arg(va,gchar*);
     while(param_name) {
       if(!strcmp(param_name,"song")) {
-        song=va_arg(var_args, gpointer);
+        song=va_arg(va, gpointer);
       }
       else {
         GST_WARNING("unhandled argument: %s",param_name);
         break;
       }
-      param_name=va_arg(var_args,gchar*);
+      param_name=va_arg(va,gchar*);
     }
     // @todo: we also need the parameters the parent-class would parse
     // as a a quick hack copied the code from the parent class into the subclasses
@@ -147,7 +149,7 @@
   
   // load parent class stuff
   parent_iface=g_type_interface_peek_parent(BT_PERSISTENCE_GET_INTERFACE(result));
-  parent_iface->load(BT_TYPE_MACHINE,result,node,NULL,NULL);
+  parent_iface->load(BT_TYPE_MACHINE,result,node,NULL,var_args);
 
   return(result);
 }
Index: src/lib/core/sink-machine.c
===================================================================
--- src/lib/core/sink-machine.c	(revision 2817)
+++ src/lib/core/sink-machine.c	(working copy)
@@ -135,19 +135,21 @@
   if(!persistence) {
     BtSong *song=NULL;
     gchar *param_name;
+    va_list va;
 
+    G_VA_COPY(va,var_args);
     // we need to get parameters from var_args
     // @todo: this is duplicated code among the subclasses
-    param_name=va_arg(var_args,gchar*);
+    param_name=va_arg(va,gchar*);
     while(param_name) {
       if(!strcmp(param_name,"song")) {
-        song=va_arg(var_args,gpointer);
+        song=va_arg(va,gpointer);
       }
       else {
         GST_WARNING("unhandled argument: %s",param_name);
         break;
       }
-      param_name=va_arg(var_args,gchar*);
+      param_name=va_arg(va,gchar*);
     }
  
     self=bt_sink_machine_new(song,(gchar*)id,err);
@@ -163,7 +165,7 @@
   
   // load parent class stuff
   parent_iface=g_type_interface_peek_parent(BT_PERSISTENCE_GET_INTERFACE(result));
-  parent_iface->load(BT_TYPE_MACHINE,result,node,NULL,NULL);
+  parent_iface->load(BT_TYPE_MACHINE,result,node,NULL,var_args);
 
   return(result);
 }
Index: src/lib/core/source-machine.c
===================================================================
--- src/lib/core/source-machine.c	(revision 2817)
+++ src/lib/core/source-machine.c	(working copy)
@@ -104,18 +104,20 @@
   if(!persistence) {
     BtSong *song=NULL;
     gchar *param_name;
+    va_list va;
 
+    G_VA_COPY(va,var_args);
     // we need to get parameters from var_args
-    param_name=va_arg(var_args,gchar*);
+    param_name=va_arg(va,gchar*);
     while(param_name) {
       if(!strcmp(param_name,"song")) {
-        song=va_arg(var_args, gpointer);
+        song=va_arg(va, gpointer);
       }
       else {
         GST_WARNING("unhandled argument: %s",param_name);
         break;
       }
-      param_name=va_arg(var_args,gchar*);
+      param_name=va_arg(va,gchar*);
     }
     
     self=bt_source_machine_new(song,(gchar*)id,(gchar *)plugin_name,voices,err);
@@ -133,7 +135,7 @@
   
   // load parent class stuff
   parent_iface=g_type_interface_peek_parent(BT_PERSISTENCE_GET_INTERFACE(result));
-  parent_iface->load(BT_TYPE_MACHINE,result,node,NULL,NULL);
+  parent_iface->load(BT_TYPE_MACHINE,result,node,NULL,var_args);
 
   return(result);
 }

Reply via email to