2010-04-20  Stefan Kost  <ensonic@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.

diff -Nur -x '*.orig' -x '*~' buzztard-0.5.0//src/lib/core/processor-machine.c buzztard-0.5.0.new//src/lib/core/processor-machine.c
--- buzztard-0.5.0//src/lib/core/processor-machine.c	2009-03-23 19:43:53.000000000 +0100
+++ buzztard-0.5.0.new//src/lib/core/processor-machine.c	2010-04-21 13:39:11.338423513 +0200
@@ -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,location,NULL,NULL);
+  parent_iface->load(BT_TYPE_MACHINE,result,node,location,NULL,var_args);
 
   return(result);
 }
diff -Nur -x '*.orig' -x '*~' buzztard-0.5.0//src/lib/core/sink-machine.c buzztard-0.5.0.new//src/lib/core/sink-machine.c
--- buzztard-0.5.0//src/lib/core/sink-machine.c	2009-03-23 19:43:53.000000000 +0100
+++ buzztard-0.5.0.new//src/lib/core/sink-machine.c	2010-04-21 13:38:58.847018391 +0200
@@ -136,19 +136,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);
@@ -164,7 +166,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,location,NULL,NULL);
+  parent_iface->load(BT_TYPE_MACHINE,result,node,location,NULL,var_args);
 
   return(result);
 }
diff -Nur -x '*.orig' -x '*~' buzztard-0.5.0//src/lib/core/source-machine.c buzztard-0.5.0.new//src/lib/core/source-machine.c
--- buzztard-0.5.0//src/lib/core/source-machine.c	2009-05-24 14:40:42.000000000 +0200
+++ buzztard-0.5.0.new//src/lib/core/source-machine.c	2010-04-21 13:38:41.896420412 +0200
@@ -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,location,NULL,NULL);
+  parent_iface->load(BT_TYPE_MACHINE,result,node,location,NULL,var_args);
 
   return(result);
 }
