[Pkg-utopia-commits] r506 - in packages/experimental/hal/debian: . patches

Sjoerd Simons sjoerd at costa.debian.org
Thu Jan 19 22:01:47 UTC 2006


Author: sjoerd
Date: 2006-01-19 22:01:04 +0000 (Thu, 19 Jan 2006)
New Revision: 506

Added:
   packages/experimental/hal/debian/patches/01_hal_privsep.patch
Modified:
   packages/experimental/hal/debian/changelog
   packages/experimental/hal/debian/hal.init.dbus
   packages/experimental/hal/debian/hal.postinst
   packages/experimental/hal/debian/hal.udev.rules
   packages/experimental/hal/debian/rules
Log:
  * New upstream release
  * debian/patches/hal-dbus_max_match_rules_per_connection.patch
    + Removed. Default max_match_rules in dbus is high enough these days
  * Don't add the hal to group floppy and cdrom
  * Stop using the hotplug helper, instead let udev pass data via a socket to
    hal
  * debian/patches/01_hal_privsep.patch
    + Added. Let the addons and probes be called by a little helper running as
    root while the main hal database runs as an unpriviledged user.
  * No longer chown removable device to group hal



Modified: packages/experimental/hal/debian/changelog
===================================================================
--- packages/experimental/hal/debian/changelog	2006-01-19 21:18:50 UTC (rev 505)
+++ packages/experimental/hal/debian/changelog	2006-01-19 22:01:04 UTC (rev 506)
@@ -3,8 +3,15 @@
   * New upstream release
   * debian/patches/hal-dbus_max_match_rules_per_connection.patch
     + Removed. Default max_match_rules in dbus is high enough these days
+  * Don't add the hal to group floppy and cdrom
+  * Stop using the hotplug helper, instead let udev pass data via a socket to
+    hal
+  * debian/patches/01_hal_privsep.patch
+    + Added. Let the addons and probes be called by a little helper running as
+    root while the main hal database runs as an unpriviledged user.
+  * No longer chown removable device to group hal
 
- -- Sjoerd Simons <sjoerd at debian.org>  Tue, 17 Jan 2006 15:48:59 +0100
+ -- Sjoerd Simons <sjoerd at debian.org>  Thu, 19 Jan 2006 22:53:16 +0100
 
 hal (0.5.5.1-5) unstable; urgency=low
 

Modified: packages/experimental/hal/debian/hal.init.dbus
===================================================================
--- packages/experimental/hal/debian/hal.init.dbus	2006-01-19 21:18:50 UTC (rev 505)
+++ packages/experimental/hal/debian/hal.init.dbus	2006-01-19 22:01:04 UTC (rev 506)
@@ -43,13 +43,6 @@
 	log_daemon_msg "Stopping $DESC" "$NAME"
 	start-stop-daemon --stop --oknodo --quiet --pidfile $PIDFILE \
 		--exec $DAEMON 
-
-        # if hald does not want to die, apply some more force
-        if [ -e $PIDFILE ]; then
-            kill -9 $(< $PIDFILE) || true
-            rm -f $PIDFILE
-        fi
-
 	log_end_msg $?
 }
 

Modified: packages/experimental/hal/debian/hal.postinst
===================================================================
--- packages/experimental/hal/debian/hal.postinst	2006-01-19 21:18:50 UTC (rev 505)
+++ packages/experimental/hal/debian/hal.postinst	2006-01-19 22:01:04 UTC (rev 506)
@@ -26,11 +26,9 @@
 case "$1" in
   configure)
     if ! getent passwd hal >/dev/null; then 
-      adduser --quiet --system --home /var/run/hal \
+      adduser --disabled-password --quiet --system --home /var/run/hal \
         --gecos "Hardware abstraction layer" --group hal
     fi
-    adduser --quiet hal floppy
-    adduser --quiet hal cdrom
     # be sure the run dir is owned by the hal user
     chown hal:hal /var/run/hal 2>/dev/null || true
 

Modified: packages/experimental/hal/debian/hal.udev.rules
===================================================================
--- packages/experimental/hal/debian/hal.udev.rules	2006-01-19 21:18:50 UTC (rev 505)
+++ packages/experimental/hal/debian/hal.udev.rules	2006-01-19 22:01:04 UTC (rev 506)
@@ -1,10 +1,5 @@
-# hotplug.d and dev.d are obsolete, so simulate calling of the hal helpers
-ENV{SEQNUM}=="[0-9]*", ENV{UDEVD_EVENT}=="1", RUN+="/usr/lib/hal/hal.hotplug"
+# Have udev pass data over a socket to hal 
+RUN+="socket:/org/freedesktop/hal/udev_event"
 
 # unmount block devices when they are removed
 ENV{UDEVD_EVENT}=="1", SUBSYSTEM=="block",ACTION="remove", RUN+="/usr/lib/hal/hal-unmount.sh"
-
-# put removable IDE/SCSI devices into the hal group instead of 'disk'
-BUS="scsi",KERNEL="sd[a-z]*", PROGRAM="/etc/udev/scripts/device-removable.sh %k 'usb ieee1394'", RESULT="1", MODE="0640", GROUP="hal"
-# BUS="ide", KERNEL="hd[a-z]*", PROGRAM="/etc/udev/scripts/device-removable.sh  %k 'usb ieee1394'", RESULT="1", MODE="0640", GROUP="hal"
-BUS="usb", KERNEL="ub[a-z]*", MODE="0640", GROUP="hal"

Added: packages/experimental/hal/debian/patches/01_hal_privsep.patch
===================================================================
--- packages/experimental/hal/debian/patches/01_hal_privsep.patch	2006-01-19 21:18:50 UTC (rev 505)
+++ packages/experimental/hal/debian/patches/01_hal_privsep.patch	2006-01-19 22:01:04 UTC (rev 506)
@@ -0,0 +1,3733 @@
+diff -ruN hal-0.5.6-old/Makefile.am hal-0.5.6/Makefile.am
+--- hal-0.5.6-old/Makefile.am	2005-08-26 22:27:21.000000000 +0200
++++ hal-0.5.6/Makefile.am	2006-01-17 22:24:03.000000000 +0100
+@@ -1,7 +1,7 @@
+ ## Process this file with automake to produce Makefile.in
+ 
+-SUBDIRS = volume_id drive_id libhal libhal-storage hald tools fdi doc	\
+-	  examples po
++SUBDIRS = volume_id drive_id libhal libhal-storage hald hald-runner tools \
++          fdi doc examples po
+ 
+ pkgconfigdir = $(libdir)/pkgconfig
+ pkgconfig_DATA = hal.pc hal-storage.pc
+diff -ruN hal-0.5.6-old/Makefile.in hal-0.5.6/Makefile.in
+--- hal-0.5.6-old/Makefile.in	2006-01-17 02:07:51.000000000 +0100
++++ hal-0.5.6/Makefile.in	2006-01-17 22:24:43.000000000 +0100
+@@ -295,8 +295,8 @@
+ sharedstatedir = @sharedstatedir@
+ sysconfdir = @sysconfdir@
+ target_alias = @target_alias@
+-SUBDIRS = volume_id drive_id libhal libhal-storage hald tools fdi doc	\
+-	  examples po
++SUBDIRS = volume_id drive_id libhal libhal-storage hald hald-runner tools \
++          fdi doc examples po
+ 
+ pkgconfigdir = $(libdir)/pkgconfig
+ pkgconfig_DATA = hal.pc hal-storage.pc
+diff -ruN hal-0.5.6-old/configure hal-0.5.6/configure
+--- hal-0.5.6-old/configure	2006-01-17 01:26:24.000000000 +0100
++++ hal-0.5.6/configure	2006-01-17 22:24:58.000000000 +0100
+@@ -1201,7 +1201,7 @@
+     else
+       echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+     fi
+-    cd $ac_popdir
++    cd "$ac_popdir"
+   done
+ fi
+ 
+@@ -2666,8 +2666,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -2725,8 +2724,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -2842,8 +2840,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -2897,8 +2894,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -2943,8 +2939,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -2988,8 +2983,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -3176,8 +3170,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -3231,8 +3224,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -3631,8 +3623,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -3690,8 +3681,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -3807,8 +3797,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -3862,8 +3851,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -3908,8 +3896,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -3953,8 +3940,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -4469,8 +4455,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -4528,8 +4513,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -4645,8 +4629,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -4700,8 +4683,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -4746,8 +4728,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -4791,8 +4772,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -5226,8 +5206,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -5963,7 +5942,7 @@
+   ;;
+ *-*-irix6*)
+   # Find out which ABI we are using.
+-  echo '#line 5966 "configure"' > conftest.$ac_ext
++  echo '#line 5945 "configure"' > conftest.$ac_ext
+   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+@@ -6083,8 +6062,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -6183,8 +6161,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -6251,8 +6228,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -6512,8 +6488,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_cxx_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -6571,8 +6546,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_cxx_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -6643,8 +6617,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_cxx_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -6688,8 +6661,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_cxx_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -7161,7 +7133,7 @@
+ 
+ 
+ # Provide some information about the compiler.
+-echo "$as_me:7164:" \
++echo "$as_me:7136:" \
+      "checking for Fortran 77 compiler version" >&5
+ ac_compiler=`set X $ac_compile; echo $2`
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+@@ -7207,8 +7179,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_f77_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_f77_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -7257,8 +7228,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_f77_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_f77_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -8224,11 +8194,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:8227: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:8197: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:8231: \$? = $ac_status" >&5
++   echo "$as_me:8201: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -8492,11 +8462,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:8495: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:8465: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:8499: \$? = $ac_status" >&5
++   echo "$as_me:8469: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -8596,11 +8566,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:8599: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:8569: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:8603: \$? = $ac_status" >&5
++   echo "$as_me:8573: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -9072,8 +9042,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -9133,8 +9102,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -10065,7 +10033,7 @@
+   libsuff=
+   case "$host_cpu" in
+   x86_64*|s390x*|powerpc64*)
+-    echo '#line 10068 "configure"' > conftest.$ac_ext
++    echo '#line 10036 "configure"' > conftest.$ac_ext
+     if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+@@ -10422,8 +10390,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -10526,8 +10493,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -10592,8 +10558,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -10686,8 +10651,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -10752,8 +10716,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -10819,8 +10782,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -10886,8 +10848,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -10962,7 +10923,7 @@
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<EOF
+-#line 10965 "configure"
++#line 10926 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -11062,7 +11023,7 @@
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<EOF
+-#line 11065 "configure"
++#line 11026 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -12145,8 +12106,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_cxx_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -12207,8 +12167,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_cxx_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -13402,11 +13361,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:13405: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:13364: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:13409: \$? = $ac_status" >&5
++   echo "$as_me:13368: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -13506,11 +13465,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:13509: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:13468: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:13513: \$? = $ac_status" >&5
++   echo "$as_me:13472: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -14042,7 +14001,7 @@
+   libsuff=
+   case "$host_cpu" in
+   x86_64*|s390x*|powerpc64*)
+-    echo '#line 14045 "configure"' > conftest.$ac_ext
++    echo '#line 14004 "configure"' > conftest.$ac_ext
+     if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+@@ -15097,11 +15056,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:15100: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:15059: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:15104: \$? = $ac_status" >&5
++   echo "$as_me:15063: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -15201,11 +15160,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:15204: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:15163: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:15208: \$? = $ac_status" >&5
++   echo "$as_me:15167: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -15667,8 +15626,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_f77_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_f77_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -15718,8 +15676,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_f77_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_f77_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -16650,7 +16607,7 @@
+   libsuff=
+   case "$host_cpu" in
+   x86_64*|s390x*|powerpc64*)
+-    echo '#line 16653 "configure"' > conftest.$ac_ext
++    echo '#line 16610 "configure"' > conftest.$ac_ext
+     if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+@@ -17425,11 +17382,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:17428: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:17385: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:17432: \$? = $ac_status" >&5
++   echo "$as_me:17389: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -17693,11 +17650,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:17696: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:17653: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:17700: \$? = $ac_status" >&5
++   echo "$as_me:17657: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -17797,11 +17754,11 @@
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:17800: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:17757: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:17804: \$? = $ac_status" >&5
++   echo "$as_me:17761: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -18273,8 +18230,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -18334,8 +18290,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -19266,7 +19221,7 @@
+   libsuff=
+   case "$host_cpu" in
+   x86_64*|s390x*|powerpc64*)
+-    echo '#line 19269 "configure"' > conftest.$ac_ext
++    echo '#line 19224 "configure"' > conftest.$ac_ext
+     if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+   (eval $ac_compile) 2>&5
+   ac_status=$?
+@@ -20708,8 +20663,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -20738,8 +20692,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -20809,8 +20762,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -20862,8 +20814,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -20934,8 +20885,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -20987,8 +20937,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -21057,8 +21006,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -21358,8 +21306,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -21517,8 +21464,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -22029,8 +21975,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -22183,8 +22128,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -22566,8 +22510,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -22635,8 +22578,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -23092,8 +23034,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -23529,8 +23470,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -23675,8 +23615,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -23747,8 +23686,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -23892,8 +23830,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -23951,8 +23888,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -24049,8 +23985,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -24129,8 +24064,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -24194,8 +24128,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -24259,8 +24192,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -24337,8 +24269,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -24402,8 +24333,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -24519,8 +24449,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -24687,8 +24616,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -24821,8 +24749,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -24907,8 +24834,7 @@
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } &&
+-	 { ac_try='test -z "$ac_c_werror_flag"
+-			 || test ! -s conftest.err'
++	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -25063,7 +24989,7 @@
+ 	< $srcdir/po/POTFILES.in > po/POTFILES
+ 
+ 
+-                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ac_config_files="$ac_config_files hal.pc hal-storage.pc hal.conf Makefile hald/Makefile hald/dummy/Makefile hald/linux2/Makefile hald/linux2/probing/Makefile hald/linux2/addons/Makefile hald/solaris/Makefile hald/haldaemon libhal/Makefile libhal-storage/Makefile tools/Makefile tools/fstab-sync.8 tools/linux/Makefile tools/device-manager/hal-device-manager tools/device-manager/Makefile tools/device-manager/Const.py fdi/Makefile fdi/preprobe/Makefile fdi/preprobe/10osvendor/Makefile fdi/preprobe/20thirdparty/Makefile fdi/preprobe/30user/Makefile fdi/information/Makefile fdi/information/10freedesktop/Makefile fdi/information/20thirdparty/Makefile fdi/information/30user/Makefile fdi/policy/Makefile fdi/policy/10osvendor/Makefile fdi/policy/20thirdparty/Makefile fdi/policy/30user/Makefile doc/Makefile doc/api/Makefile doc/api/Doxyfile doc/conf/Makefile doc/spec/Makefile doc/spec/hal-spec.xml examples/Makefile examples/volumed/Makefile po/Makefile.in drive_id/Makefile volume_id/Makefile tools/hal-luks-setup tools/hal-luks-remove"
++                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ac_config_files="$ac_config_files hal.pc hal-storage.pc hal.conf Makefile hald/Makefile hald/dummy/Makefile hald/linux2/Makefile hald/linux2/probing/Makefile hald/linux2/addons/Makefile hald/solaris/Makefile hald/haldaemon hald-runner/Makefile libhal/Makefile libhal-storage/Makefile tools/Makefile tools/fstab-sync.8 tools/linux/Makefile tools/device-manager/hal-device-manager tools/device-manager/Makefile tools/device-manager/Const.py fdi/Makefile fdi/preprobe/Makefile fdi/preprobe/10osvendor/Makefile fdi/preprobe/20thirdparty/Makefile fdi/preprobe/30user/Makefile fdi/information/Makefile fdi/information/10freedesktop/Makefile fdi/information/20thirdparty/Makefile fdi/information/30user/Makefile fdi/policy/Makefile fdi/policy/10osvendor/Makefile fdi/policy/20thirdparty/Makefile fdi/policy/30user/Makefile doc/Makefile doc/api/Makefile doc/api/Doxyfile doc/conf/Makefile doc/spec/Makefile doc/spec/hal-spec.xml examples/Makefile examples/volumed/Makefile po/Makefile.in drive_id/Makefile volume_id/Makefile tools/hal-luks-setup tools/hal-luks-remove"
+ cat >confcache <<\_ACEOF
+ # This file is a shell script that caches the results of configure
+ # tests run on this system so they can be shared between configure
+@@ -25760,6 +25686,7 @@
+   "hald/linux2/addons/Makefile" ) CONFIG_FILES="$CONFIG_FILES hald/linux2/addons/Makefile" ;;
+   "hald/solaris/Makefile" ) CONFIG_FILES="$CONFIG_FILES hald/solaris/Makefile" ;;
+   "hald/haldaemon" ) CONFIG_FILES="$CONFIG_FILES hald/haldaemon" ;;
++  "hald-runner/Makefile" ) CONFIG_FILES="$CONFIG_FILES hald-runner/Makefile" ;;
+   "libhal/Makefile" ) CONFIG_FILES="$CONFIG_FILES libhal/Makefile" ;;
+   "libhal-storage/Makefile" ) CONFIG_FILES="$CONFIG_FILES libhal-storage/Makefile" ;;
+   "tools/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;;
+@@ -26229,11 +26156,6 @@
+   *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+   esac
+ 
+-  if test x"$ac_file" != x-; then
+-    { echo "$as_me:$LINENO: creating $ac_file" >&5
+-echo "$as_me: creating $ac_file" >&6;}
+-    rm -f "$ac_file"
+-  fi
+   # Let's still pretend it is `configure' which instantiates (i.e., don't
+   # use $as_me), people would be surprised to read:
+   #    /* config.h.  Generated by config.status.  */
+@@ -26272,6 +26194,12 @@
+ 	 fi;;
+       esac
+     done` || { (exit 1); exit 1; }
++
++  if test x"$ac_file" != x-; then
++    { echo "$as_me:$LINENO: creating $ac_file" >&5
++echo "$as_me: creating $ac_file" >&6;}
++    rm -f "$ac_file"
++  fi
+ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF
+   sed "$ac_vpsub
+diff -ruN hal-0.5.6-old/configure.in hal-0.5.6/configure.in
+--- hal-0.5.6-old/configure.in	2006-01-17 01:25:32.000000000 +0100
++++ hal-0.5.6/configure.in	2006-01-17 22:24:03.000000000 +0100
+@@ -486,6 +486,7 @@
+ hald/linux2/addons/Makefile
+ hald/solaris/Makefile
+ hald/haldaemon
++hald-runner/Makefile
+ libhal/Makefile
+ libhal-storage/Makefile
+ tools/Makefile
+diff -ruN hal-0.5.6-old/hald/Makefile.am hal-0.5.6/hald/Makefile.am
+--- hal-0.5.6-old/hald/Makefile.am	2005-12-08 19:23:23.000000000 +0100
++++ hal-0.5.6/hald/Makefile.am	2006-01-17 22:24:03.000000000 +0100
+@@ -40,6 +40,7 @@
+ hald_SOURCES =                                                          \
+ 	hald_marshal.h			hald_marshal.c			\
+ 	util.h				util.c				\
++	hald_runner.h			hald_runner.c			\
+ 	device.h			device.c			\
+ 	device_info.h			device_info.c			\
+ 	device_store.h			device_store.c			\
+diff -ruN hal-0.5.6-old/hald/Makefile.in hal-0.5.6/hald/Makefile.in
+--- hal-0.5.6-old/hald/Makefile.in	2006-01-17 02:07:48.000000000 +0100
++++ hal-0.5.6/hald/Makefile.in	2006-01-17 22:24:36.000000000 +0100
+@@ -53,9 +53,9 @@
+ sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+ PROGRAMS = $(sbin_PROGRAMS)
+ am_hald_OBJECTS = hald_marshal.$(OBJEXT) util.$(OBJEXT) \
+-	device.$(OBJEXT) device_info.$(OBJEXT) device_store.$(OBJEXT) \
+-	hald.$(OBJEXT) hald_dbus.$(OBJEXT) logger.$(OBJEXT) \
+-	property.$(OBJEXT)
++	hald_runner.$(OBJEXT) device.$(OBJEXT) device_info.$(OBJEXT) \
++	device_store.$(OBJEXT) hald.$(OBJEXT) hald_dbus.$(OBJEXT) \
++	logger.$(OBJEXT) property.$(OBJEXT)
+ hald_OBJECTS = $(am_hald_OBJECTS)
+ hald_DEPENDENCIES = $(top_builddir)/hald/$(HALD_BACKEND)/libhald_$(HALD_BACKEND).la
+ initdSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+@@ -323,6 +323,7 @@
+ hald_SOURCES = \
+ 	hald_marshal.h			hald_marshal.c			\
+ 	util.h				util.c				\
++	hald_runner.h			hald_runner.c			\
+ 	device.h			device.c			\
+ 	device_info.h			device_info.c			\
+ 	device_store.h			device_store.c			\
+@@ -442,6 +443,7 @@
+ @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hald.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hald_dbus.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hald_marshal.Po at am__quote@
++ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hald_runner.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/logger.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/property.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/util.Po at am__quote@
+diff -ruN hal-0.5.6-old/hald/hald.c hal-0.5.6/hald/hald.c
+--- hal-0.5.6-old/hald/hald.c	2006-01-13 03:24:10.000000000 +0100
++++ hal-0.5.6/hald/hald.c	2006-01-17 22:24:03.000000000 +0100
+@@ -55,6 +55,7 @@
+ #include "osspec.h"
+ #include "hald_dbus.h"
+ #include "util.h"
++#include "hald_runner.h"
+ 
+ static void delete_pid(void)
+ {
+@@ -71,15 +72,6 @@
+ 
+ static HalDeviceStore *temporary_device_list = NULL;
+ 
+-static GSList *running_addons = NULL;
+-
+-static void 
+-addon_terminated (HalDevice *d, gboolean timed_out, gint return_code, 
+-		  gpointer data1, gpointer data2, HalHelperData *helper_data)
+-{
+-	running_addons = g_slist_remove (running_addons, helper_data);
+-}
+-
+ static void
+ gdl_store_changed (HalDeviceStore *store, HalDevice *device,
+ 		   gboolean is_added, gpointer user_data)
+@@ -94,45 +86,18 @@
+ 			
+ 			for (i = addons; i != NULL; i = g_slist_next (i)) {
+ 				const gchar *command_line;
+-				HalHelperData *helper_data;
+ 				gchar *extra_env[2] = {"HALD_ACTION=addon", NULL};
+ 
+ 				command_line = (const gchar *) i->data;
+-				helper_data = hal_util_helper_invoke (command_line, extra_env, device,
+-								      NULL, NULL,
+-								      addon_terminated, 0 /* no timeout */);
+-
+-				if (helper_data != NULL) {
+-					HAL_INFO (("Invoked addon %s with pid %d for udi %s", 
+-						   command_line, helper_data->pid, helper_data->d->udi));
+-					running_addons = g_slist_prepend (running_addons, helper_data);
+-				}
++				hald_runner_start (device, command_line, extra_env);
++
++				HAL_INFO (("Started addon %s for udi %s", 
++				           command_line, hal_device_get_udi(device)));
+ 			}
+ 		}
+ 	} else {
+-		GSList *i;
+-
+ 		HAL_INFO (("Removed device from GDL; udi=%s", hal_device_get_udi(device)));
+-
+-	start_from_beginning:
+-
+-		/* may have several addons running */
+-		for (i = running_addons; i != NULL; i = g_slist_next (i)) {
+-			HalHelperData *helper_data;
+-
+-			helper_data = (HalHelperData *) (i->data);
+-			if (helper_data->d == device) {
+-				HAL_INFO (("Terminating addon with pid %d for udi %s", 
+-					   helper_data->pid, helper_data->d->udi));
+-				/* will force a callback - the callback removes us from the list */
+-				hal_util_terminate_helper (helper_data);
+-				/* TODO: is it safe to remove an elem from a GSList and keep iterating? 
+-				 *       Better play it safe for now.
+-				 */
+-				goto start_from_beginning;
+-			}
+-		}
+-		
++    hald_runner_kill_device(device);
+ 	}
+ 
+ 	/*hal_device_print (device);*/
+@@ -207,7 +172,7 @@
+ static void
+ usage ()
+ {
+-	fprintf (stderr, "\n" "usage : hald [--daemon=yes|no] [--verbose=yes|no] [--help]\n");
++	fprintf (stderr, "\n" "usage : hald [--daemon=yes|no] [--verbose=yes|no] [--help]  [--with-runner=location]\n");
+ 	fprintf (stderr,
+ 		 "\n"
+ 		 "        --daemon=yes|no      Become a daemon\n"
+@@ -215,6 +180,8 @@
+  		 "        --use-syslog         Print out debug messages to syslog instead of stderr.\n"
+ 		 "                             Use this option to get debug messages if HAL runs as\n"
+ 		 "                             daemon.\n"
++		 "        --with-runner        Use the program at the specified location as the\n"
++		                               "helper.\n"
+ 		 "        --retain-privileges  Run as root instead of normal user (calling of\n"
+  		 "                             external scripts to modify fstab etc. will work)\n" 
+ 		 "        --help               Show this information and exit\n"
+@@ -261,7 +228,6 @@
+ 	GError *err = NULL;
+ 	gchar data[1];
+ 	gsize bytes_read;
+-	unsigned int num_helpers;
+ 
+ 	/* Empty the pipe */
+ 	if (G_IO_STATUS_NORMAL != 
+@@ -273,8 +239,7 @@
+ 	}
+ 
+ 	HAL_INFO (("Caught SIGTERM, initiating shutdown"));
+-	num_helpers = hal_util_kill_all_helpers ();
+-	HAL_INFO (("Killed %d helpers; exiting"));
++	hald_runner_kill_all();
+ 	exit (0);
+ 
+ out:
+@@ -407,6 +372,7 @@
+ 	gboolean retain_privs;
+ 	char *path;
+ 	char newpath[512];
++	char *runner_location = NULL;
+ 
+ 	retain_privs = FALSE;
+   
+@@ -444,6 +410,7 @@
+ 			{"use-syslog", 0, NULL, 0},
+ 			{"help", 0, NULL, 0},
+ 			{"retain-privileges", 0, NULL, 0},
++			{"with-runner", 1, NULL, 0},
+ 			{"version", 0, NULL, 0},
+ 			{NULL, 0, NULL, 0}
+ 		};
+@@ -483,6 +450,8 @@
+ 				}
+ 			} else if (strcmp (opt, "retain-privileges") == 0) {
+ 				retain_privs = TRUE;
++			} else if (strcmp (opt, "with-runner") == 0) {
++				runner_location = strdup(optarg);
+ 			} else if (strcmp (opt, "use-syslog") == 0) {
+                                 hald_use_syslog = TRUE;
+ 			}
+@@ -606,6 +575,10 @@
+ 	/* set up the local dbus server */
+ 	if (!hald_dbus_local_server_init ())
+ 		return 1;
++	/* Start the runner helper daemon */
++	if (!hald_runner_start_runner(runner_location)) {
++		return 1;
++	}
+ 
+ 	/* initialize operating system specific parts */
+ 	osspec_init ();
+@@ -659,7 +632,7 @@
+ 	HAL_INFO (("Device probing completed"));
+ 
+ 	if (!hald_dbus_init ()) {
+-		hal_util_kill_all_helpers ();
++		hald_runner_kill_all();
+ 		exit (1);
+ 	}
+ 
+diff -ruN hal-0.5.6-old/hald/hald_dbus.c hal-0.5.6/hald/hald_dbus.c
+--- hal-0.5.6-old/hald/hald_dbus.c	2006-01-13 03:24:10.000000000 +0100
++++ hal-0.5.6/hald/hald_dbus.c	2006-01-17 22:24:03.000000000 +0100
+@@ -46,6 +46,7 @@
+ #include "logger.h"
+ #include "osspec.h"
+ #include "util.h"
++#include "hald_runner.h"
+ 
+ static DBusConnection *dbus_connection = NULL;
+ 
+@@ -2482,55 +2483,35 @@
+ }
+ 
+ static void
+-hald_exec_method_cb (HalDevice *d, gboolean timed_out, gint return_code, 
+-		     gpointer data1, gpointer data2, HalHelperData *helper_data)
++hald_exec_method_cb (HalDevice *d, guint32 exit_type, 
++                    gint return_code, gchar **error,
++                    gpointer data1, gpointer data2)
+ {
+ 	dbus_uint32_t result;
+-	DBusMessage *reply;
++	DBusMessage *reply = NULL;
+ 	DBusMessage *message;
+ 	DBusMessageIter iter;
+-	int *stderr_fd;
+-	char buf[512]; /* TODO: don't hardcode error message size */
+-	char *exp_name;
+-	char *exp_detail;
+-
+ 	message = (DBusMessage *) data1;
+-	stderr_fd = (int *) data2;
++  gchar *exp_name = NULL;
++  gchar *exp_detail = NULL;
+ 
+-	exp_name = NULL;
+-	exp_detail = NULL;
++	if (exit_type == HALD_RUN_SUCCESS && error != NULL) {
++    exp_name = error[0];
++    if (error[0] != NULL) {
++      exp_detail = error[1];
++    }
++    HAL_INFO (("failed with '%s' '%s'", exp_name, exp_detail));
++  }
+ 
+-	/* read back possible error conditions from stderr */
+-	if (stderr_fd != NULL) {
+-		ssize_t num_read;
+-
+-		num_read = read (*stderr_fd, buf, sizeof (buf) - 2);
+-		buf[sizeof (buf) - 2] = '\0';
+-		buf[sizeof (buf) - 1] = '\0';
+-		if (num_read > 0) {
+-			char *p;
+-			char *s;
+-			p = buf;
+-			for (s = p; *s != '\n' && *s != '\0'; s++)
+-				;
+-			if (*s != '\0') {
+-				exp_name = g_strndup (p, s - p);
+-				p = s + 1;
+-				for (s = p; *s != '\n' && *s != '\0'; s++)
+-					;
+-				if (*s != '\0') {
+-					exp_detail = g_strndup (p, s - p);
+-				}
+-			}
++  if (exit_type != HALD_RUN_SUCCESS) {
++		reply = dbus_message_new_error (message, "org.freedesktop.Hal.Device.UnknownError", "An unknown error occured");
++		if (dbus_connection != NULL) {
++			if (!dbus_connection_send (dbus_connection, reply, NULL))
++				DIE (("No memory"));
+ 		}
+-	}
+-
+-	if (exp_name != NULL && exp_detail != NULL) {
+-		HAL_INFO (("failed with '%s' '%s'", exp_name, exp_detail));
+-
+-		/* throw exception */
+-
+-		reply = dbus_message_new_error (message, exp_name, exp_detail);
++		dbus_message_unref (reply);
++  } else if (exp_name != NULL && exp_detail != NULL) {
++    reply = dbus_message_new_error (message, exp_name, exp_detail);
+ 		if (reply == NULL) {
+ 			/* error name may be invalid - assume caller fucked up and use a generic HAL error name */
+ 			reply = dbus_message_new_error (message, "org.freedesktop.Hal.Device.UnknownError", "An unknown error occured");
+@@ -2562,22 +2543,17 @@
+ 		dbus_message_unref (reply);
+ 	}
+ 
+-	dbus_message_unref (message);
+-	g_free (stderr_fd);
+ 	g_free (exp_name);
+ 	g_free (exp_detail);
++	dbus_message_unref (message);
+ }
+ 
+ static DBusHandlerResult
+ hald_exec_method (HalDevice *d, DBusConnection *connection, DBusMessage *message, const char *execpath)
+ {
+ 	int type;
+-	char *stdin;
+ 	GString *stdin_str;
+ 	DBusMessageIter iter;
+-	int stdin_fd;
+-	int *stderr_fd;
+-	ssize_t written;
+ 	const char *sender;
+ 	char *extra_env[2];
+ 	char uid_export[128];
+@@ -2700,21 +2676,15 @@
+ 		dbus_message_iter_next (&iter);
+ 	}
+ 
+-	stdin = g_string_free (stdin_str, FALSE);
+-
+-	stderr_fd = (int *) g_new0 (int, 1);
+-
+ 	/* no timeout */
+-	if (hal_util_helper_invoke_with_pipes (execpath, extra_env, d, 
+-					       (gpointer) message, (gpointer) stderr_fd, 
+-					       hald_exec_method_cb, 0, &stdin_fd, NULL, stderr_fd) != NULL) {
+-		written = write (stdin_fd, stdin, strlen (stdin));
+-		close (stdin_fd);
+-	}
+-
++	hald_runner_run_method(d, 
++                         execpath, extra_env, 
++                         stdin_str->str, TRUE,
++                         0,
++                         hald_exec_method_cb,
++                         (gpointer) message, NULL);
+ 	dbus_message_ref (message);
+-
+-	g_free (stdin);
++	g_string_free (stdin_str, TRUE);
+ 
+ 	return DBUS_HANDLER_RESULT_HANDLED;
+ 
+diff -ruN hal-0.5.6-old/hald/hald_dbus.h hal-0.5.6/hald/hald_dbus.h
+--- hal-0.5.6-old/hald/hald_dbus.h	2005-11-02 16:38:13.000000000 +0100
++++ hal-0.5.6/hald/hald_dbus.h	2006-01-17 22:24:03.000000000 +0100
+@@ -94,6 +94,4 @@
+ DBusHandlerResult hald_dbus_filter_function (DBusConnection * connection, DBusMessage * message, void *user_data);
+ 
+ char *hald_dbus_local_server_addr (void);
+-
+-
+ #endif /* HAL_DBUS_H */
+diff -ruN hal-0.5.6-old/hald/hald_runner.c hal-0.5.6/hald/hald_runner.c
+--- hal-0.5.6-old/hald/hald_runner.c	1970-01-01 01:00:00.000000000 +0100
++++ hal-0.5.6/hald/hald_runner.c	2006-01-17 22:24:03.000000000 +0100
+@@ -0,0 +1,419 @@
++/***************************************************************************
++ * CVSID: $Id$
++ *
++ * hald_runner.c - Interface to the hal runner helper daemon
++ *
++ * Copyright (C) 2006 Sjoerd Simons, <sjoerd at luon.net>
++ *
++ * Licensed under the Academic Free License version 2.1
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
++ *
++ **************************************************************************/
++
++#ifdef HAVE_CONFIG_H
++#  include <config.h>
++#endif
++
++#include <stdio.h>
++
++#include <glib.h>
++#include <dbus/dbus.h>
++#include <dbus/dbus-glib-lowlevel.h>
++
++#include "hald.h"
++#include "util.h"
++#include "logger.h"
++#include "hald_dbus.h"
++#include "hald_runner.h"
++
++typedef struct {
++  HalDevice *d;
++  HalRunTerminatedCB cb;
++  gpointer data1;
++  gpointer data2;
++} HelperData;
++
++#define DBUS_SERVER_ADDRESS "unix:tmpdir=/tmp/hald-runner" 
++
++static DBusConnection *runner_connection = NULL;
++
++static void 
++handle_connection(DBusServer *server,
++                  DBusConnection *new_connection,
++                  void *data) {
++
++  if (runner_connection == NULL) {
++    runner_connection = new_connection;
++    dbus_connection_ref (new_connection);
++    dbus_connection_setup_with_g_main (new_connection, NULL);
++    dbus_server_unref(server);
++  }
++}
++
++static void
++runner_died(GPid pid, gint status, gpointer data) {
++  g_spawn_close_pid (pid);
++  DIE (("Runner died"));
++}
++
++gboolean
++hald_runner_start_runner(gchar *runner_location) {
++  DBusServer *server = NULL;
++  DBusError err;
++  GError *error = NULL;
++  GPid pid;
++  char *argv[] = { NULL, NULL};
++  char *env[] =  { NULL, NULL};
++
++  dbus_error_init(&err);
++  server = dbus_server_listen(DBUS_SERVER_ADDRESS, &err);
++  if (server == NULL) {
++    HAL_ERROR (("Cannot create D-BUS server for the runner"));
++    goto error;
++  }
++
++  dbus_server_setup_with_g_main(server, NULL);
++  dbus_server_set_new_connection_function(server, handle_connection, 
++                                          NULL, NULL);
++  if (runner_location == NULL) {
++    runner_location = g_strdup_printf("%s/hald-runner", PACKAGE_LIBEXEC_DIR);
++  } else {
++    runner_location = g_strdup(runner_location);
++  }
++  argv[0] = runner_location;
++  env[0] = g_strdup_printf("HALD_RUNNER_DBUS_ADDRESS=%s",
++             dbus_server_get_address(server));
++
++  if (!g_spawn_async("/", argv, env, G_SPAWN_DO_NOT_REAP_CHILD, 
++        NULL, NULL, &pid, &error)) {
++    goto error;
++  }
++  g_free(argv[0]);
++  g_free(env[0]);
++
++  g_child_watch_add(pid, runner_died, NULL);
++  while (runner_connection == NULL) {
++    /* Wait for the runner */
++    g_main_context_iteration(NULL, TRUE);
++  }
++  return TRUE;
++
++error:
++  if (server != NULL)
++    dbus_server_unref(server);
++  return FALSE;
++}
++
++static gboolean
++add_property_to_msg (HalDevice *device, HalProperty *property, 
++                                     gpointer user_data)
++{
++  char *prop_upper, *value;
++  char *c;
++  gchar *env;
++  DBusMessageIter *iter = (DBusMessageIter *)user_data;
++  
++  prop_upper = g_ascii_strup (hal_property_get_key (property), -1);
++ 
++  /* periods aren't valid in the environment, so replace them with
++   * underscores. */
++  for (c = prop_upper; *c; c++) {
++    if (*c == '.')
++      *c = '_';
++  }
++
++  value = hal_property_to_string (property);
++  env = g_strdup_printf ("HAL_PROP_%s=%s", prop_upper, value);
++  dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &env);
++
++  g_free(env);
++  g_free (value);
++  g_free (prop_upper);
++
++  return TRUE;
++}
++
++static void
++add_env(DBusMessageIter *iter, const gchar *key, const gchar *value) {
++  gchar *env;
++  env = g_strdup_printf ("%s=%s", key, value);
++  dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &env);
++  g_free(env);
++}
++
++static void
++add_basic_env(DBusMessageIter *iter, const gchar *udi) {
++  if (hald_is_verbose) {
++    add_env(iter, "HALD_VERBOSE", "1");
++  }
++  if (hald_is_initialising) {
++    add_env(iter, "HALD_STARTUP", "1");
++  }
++  add_env(iter, "UDI", udi);
++  add_env(iter, "HALD_DIRECT_ADDR", hald_dbus_local_server_addr());
++}
++
++static void
++add_extra_env(DBusMessageIter *iter, gchar **env) {
++  int i;
++  if (env != NULL) for (i = 0; env[i] != NULL; i++) {
++    dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &env[i]);
++  }
++}
++
++static gboolean
++add_command(DBusMessageIter *iter, const gchar *command_line) {
++  gint argc;
++  gint x;
++  char **argv;
++  GError *err = NULL;
++  DBusMessageIter array_iter;
++
++  if (!g_shell_parse_argv(command_line, &argc, &argv, &err)) {
++    HAL_ERROR (("Error parsing commandline '%s': %s", 
++                 command_line, err->message));
++    g_error_free (err);
++    return FALSE;
++  }
++  if (!dbus_message_iter_open_container(iter, 
++                                   DBUS_TYPE_ARRAY,
++                                   DBUS_TYPE_STRING_AS_STRING,
++                                   &array_iter))
++    DIE (("No memory"));
++  for (x = 0 ; argv[x] != NULL; x++) {
++    dbus_message_iter_append_basic(&array_iter, DBUS_TYPE_STRING, &argv[x]);
++  }
++  dbus_message_iter_close_container(iter, &array_iter);
++
++  g_strfreev(argv);
++  return TRUE;
++}
++
++static gboolean
++add_first_part(DBusMessageIter *iter, HalDevice *device,
++                   const gchar *command_line, char **extra_env) {
++  DBusMessageIter array_iter;
++  const char *udi;
++
++  udi = hal_device_get_udi(device);
++  dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &udi);
++
++  dbus_message_iter_open_container(iter, 
++                                   DBUS_TYPE_ARRAY,
++                                   DBUS_TYPE_STRING_AS_STRING,
++                                   &array_iter);
++  hal_device_property_foreach (device, add_property_to_msg, &array_iter);
++  add_basic_env(&array_iter, udi);
++  add_extra_env(&array_iter, extra_env);
++  dbus_message_iter_close_container(iter, &array_iter);
++
++  if (!add_command(iter, command_line)) {
++    return FALSE;
++  }
++  return TRUE;
++}
++
++/* Start a helper, returns true on a successfull start */
++gboolean
++hald_runner_start(HalDevice *device,
++                      const gchar *command_line, char **extra_env) {
++  DBusMessage *msg, *reply;
++  DBusError err;
++  DBusMessageIter iter;
++
++  dbus_error_init(&err);
++  msg = dbus_message_new_method_call("org.freedesktop.HalRunner",
++                                     "/org/freedesktop/HalRunner",
++                                     "org.freedesktop.HalRunner",
++                                     "Start");
++  if (msg == NULL) 
++    DIE(("No memory"));
++  dbus_message_iter_init_append(msg, &iter);
++
++  if (!add_first_part(&iter, device, command_line, extra_env)) 
++    goto error;
++ 
++  /* Wait for the reply, should be almost instantanious */
++  reply = 
++    dbus_connection_send_with_reply_and_block(runner_connection, 
++                                              msg, -1, &err);
++  if (reply) {
++    gboolean ret = 
++      (dbus_message_get_type(reply) == DBUS_MESSAGE_TYPE_METHOD_RETURN);
++    dbus_message_unref(reply);
++    dbus_message_unref(msg);
++    return ret;
++  }
++
++error:
++  dbus_message_unref(msg);
++  return FALSE;
++}
++
++static void
++call_notify(DBusPendingCall *pending, void *user_data) {
++  HelperData *hb = (HelperData *)user_data;
++  dbus_uint32_t exitt = HALD_RUN_SUCCESS;
++  dbus_int32_t return_code = 0;
++  DBusMessage *m;
++  GArray *error = NULL;
++  DBusMessageIter iter;
++
++  error = g_array_new(TRUE, FALSE, sizeof(char *));
++
++  m = dbus_pending_call_steal_reply(pending);
++  if (dbus_message_get_type(m) != DBUS_MESSAGE_TYPE_METHOD_RETURN)
++    goto malformed;
++
++  if (!dbus_message_iter_init(m, &iter) ||
++       dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_UINT32) 
++    goto malformed;
++  dbus_message_iter_get_basic(&iter, &exitt);
++
++  if (!dbus_message_iter_next(&iter) || 
++        dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_INT32) 
++    goto malformed;
++  dbus_message_iter_get_basic(&iter, &return_code);
++
++  while (dbus_message_iter_next(&iter) &&
++    dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_STRING) {
++    const char *value;
++    dbus_message_iter_get_basic(&iter, &value);
++    g_array_append_vals(error, &value, 1);
++  }
++
++  hb->cb(hb->d, exitt, return_code, 
++      (gchar **)error->data, hb->data1, hb->data2);
++
++  dbus_message_unref(m);
++  g_array_free(error, FALSE);
++
++  return;
++malformed:
++  /* Send a Fail callback on malformed messages */
++  HAL_ERROR (("Malformed or unexpected reply message"));
++  hb->cb(hb->d, HALD_RUN_FAILED, return_code, NULL, hb->data1, hb->data2);
++  dbus_message_unref(m);
++  g_array_free(error, FALSE);
++}
++
++/* Run a helper program using the commandline, with input as infomation on
++ * stdin */
++void
++hald_runner_run_method(HalDevice *device,
++                           const gchar *command_line, char **extra_env, 
++                           gchar *input, gboolean error_on_stderr,
++                           guint32 timeout,
++                           HalRunTerminatedCB  cb,
++                           gpointer data1, gpointer data2) {
++  DBusMessage *msg;
++  DBusMessageIter iter;
++  DBusPendingCall *call;
++  HelperData *hd = NULL;
++  msg = dbus_message_new_method_call("org.freedesktop.HalRunner",
++                             "/org/freedesktop/HalRunner",
++                             "org.freedesktop.HalRunner",
++                             "Run");
++  if (msg == NULL) 
++    DIE(("No memory"));
++  dbus_message_iter_init_append(msg, &iter);
++  
++  if (!add_first_part(&iter, device, command_line, extra_env)) 
++    goto error;
++
++  dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &input);
++  dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &error_on_stderr);
++  dbus_message_iter_append_basic(&iter, DBUS_TYPE_UINT32, &timeout);
++
++  if (!dbus_connection_send_with_reply(runner_connection, 
++                                              msg, &call, INT_MAX))
++    DIE (("No memory"));
++
++  hd = malloc(sizeof(HelperData));
++  hd->d = device;
++  hd->cb = cb;
++  hd->data1 = data1;
++  hd->data2 = data2;
++
++  dbus_pending_call_set_notify(call, call_notify, hd, free);
++  dbus_message_unref(msg);
++  return;
++error:
++  dbus_message_unref(msg);
++  free(hd);
++  cb(device, HALD_RUN_FAILED, 0, NULL, data1, data2);
++}
++
++void
++hald_runner_run(HalDevice *device,
++                    const gchar *command_line, char **extra_env, 
++                    guint timeout,
++                    HalRunTerminatedCB  cb,
++                    gpointer data1, gpointer data2) {
++  hald_runner_run_method(device, command_line, extra_env, 
++                             "", FALSE, timeout, cb, data1, data2);
++}
++
++void
++hald_runner_kill_device(HalDevice *device) {
++  DBusMessage *msg, *reply;
++  DBusError err;
++  DBusMessageIter iter;
++  const char *udi;
++  
++  msg = dbus_message_new_method_call("org.freedesktop.HalRunner",
++                             "/org/freedesktop/HalRunner",
++                             "org.freedesktop.HalRunner",
++                             "Kill");
++  if (msg == NULL) 
++    DIE(("No memory"));
++  dbus_message_iter_init_append(msg, &iter);
++  udi = hal_device_get_udi(device);
++  dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &udi);
++
++  /* Wait for the reply, should be almost instantanious */
++  dbus_error_init(&err);
++  reply = 
++    dbus_connection_send_with_reply_and_block(runner_connection, msg, -1, &err);
++  if (reply) {
++    dbus_message_unref(reply);
++  }
++
++  dbus_message_unref(msg);
++}
++
++void
++hald_runner_kill_all(HalDevice *device) {
++  DBusMessage *msg, *reply;
++  DBusError err;
++  msg = dbus_message_new_method_call("org.freedesktop.HalRunner",
++                             "/org/freedesktop/HalRunner",
++                             "org.freedesktop.HalRunner",
++                             "KillAll");
++  if (msg == NULL) 
++    DIE(("No memory"));
++
++  /* Wait for the reply, should be almost instantanious */
++  dbus_error_init(&err);
++  reply = 
++    dbus_connection_send_with_reply_and_block(runner_connection,
++                                              msg, -1, &err);
++  if (reply) {
++    dbus_message_unref(reply);
++  }
++
++  dbus_message_unref(msg);
++}
+diff -ruN hal-0.5.6-old/hald/hald_runner.h hal-0.5.6/hald/hald_runner.h
+--- hal-0.5.6-old/hald/hald_runner.h	1970-01-01 01:00:00.000000000 +0100
++++ hal-0.5.6/hald/hald_runner.h	2006-01-17 22:24:03.000000000 +0100
+@@ -0,0 +1,75 @@
++/***************************************************************************
++ *
++ * CVSID: $Id$
++ *
++ * hald_runner.h - Interface to the hal runner helper daemon
++ *
++ * Copyright (C) 2006 Sjoerd Simons <sjoerd at luon.net>
++ *
++ * Licensed under the Academic Free License version 2.1
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
++ *
++ **************************************************************************/
++
++#ifndef HALD_RUNNER_H
++#define HALD_RUNNER_H
++
++#include "device.h"
++
++/* Successful run of the program */
++#define HALD_RUN_SUCCESS 0x0 
++/* Process was killed because of running too long */
++#define  HALD_RUN_TIMEOUT 0x1 
++/* Failed to start for some reason */
++#define HALD_RUN_FAILED 0x2
++/* Killed on purpose, e.g. hal_runner_kill_device */   
++#define HALD_RUN_KILLED 0x4
++
++/* Default sane timeout */
++#define HAL_HELPER_TIMEOUT 10000
++
++typedef void (*HalRunTerminatedCB) (HalDevice *d, guint32 exit_type, 
++                                       gint return_code, gchar **error,
++                                       gpointer data1, gpointer data2);
++
++/* Start the runner daemon */
++gboolean
++hald_runner_start_runner(gchar *runner_location);
++
++/* Start a helper, returns true on a successfull start */
++gboolean
++hald_runner_start(HalDevice *device, const gchar *command_line, 
++                  char **extra_env);
++
++/* Run a helper program using the commandline, with input as infomation on
++ * stdin */
++void
++hald_runner_run(HalDevice *device,
++               const gchar *command_line, char **extra_env, 
++               guint32 timeout,
++               HalRunTerminatedCB cb,
++               gpointer data1, gpointer data2);
++void
++hald_runner_run_method(HalDevice *device,                                                              const gchar *command_line, char **extra_env, 
++                       gchar *input, gboolean error_on_stderr,
++                       guint32 timeout,
++                       HalRunTerminatedCB  cb,
++                       gpointer data1, gpointer data2);
++
++void hald_runner_kill_device(HalDevice *device);
++void hald_runner_kill_all();
++
++#endif 
+diff -ruN hal-0.5.6-old/hald/linux2/blockdev.c hal-0.5.6/hald/linux2/blockdev.c
+--- hal-0.5.6-old/hald/linux2/blockdev.c	2006-01-08 18:58:02.000000000 +0100
++++ hal-0.5.6/hald/linux2/blockdev.c	2006-01-17 22:24:03.000000000 +0100
+@@ -60,6 +60,7 @@
+ #include "../device_info.h"
+ #include "../hald_dbus.h"
+ #include "../util.h"
++#include "../hald_runner.h"
+ 
+ #include "osspec_linux.h"
+ 
+@@ -269,15 +270,16 @@
+ }
+ 
+ static void 
+-add_blockdev_probing_helper_done (HalDevice *d, gboolean timed_out, gint return_code, 
+-				  gpointer data1, gpointer data2, HalHelperData *helper_data)
++add_blockdev_probing_helper_done (HalDevice *d, guint32 exit_type, 
++                                  gint return_code, char **error,
++                                  gpointer data1, gpointer data2) 
+ {
+ 	void *end_token = (void *) data1;
+ 	gboolean is_volume;
+ 
+ 	/* helper_data may be null if probing is skipped */
+ 
+-	HAL_INFO (("entering; timed_out=%d, return_code=%d", timed_out, return_code));
++	HAL_INFO (("entering; exit_type=%d, return_code=%d", exit_type, return_code));
+ 
+ 	if (d == NULL) {
+ 		HAL_INFO (("Device object already removed"));
+@@ -291,7 +293,8 @@
+ 	 * 
+ 	 * (return code 2 means fs found on main block device (for non-volumes)) 
+ 	 */
+-	if (timed_out || !(return_code == 0 || (!is_volume && return_code == 2))) {
++	if (exit_type != HALD_RUN_SUCCESS
++      || !(return_code == 0 || (!is_volume && return_code == 2))) {
+ 		hal_device_store_remove (hald_get_tdl (), d);
+ 		g_object_unref (d);
+ 		hotplug_event_end (end_token);
+@@ -369,15 +372,12 @@
+ 			HAL_INFO (("Probing PC floppy %s to see if it is present", 
+ 				   hal_device_property_get_string (d, "block.device")));
+ 
+-			if (hal_util_helper_invoke ("hald-probe-pc-floppy", NULL, d, (gpointer) end_token, 
+-						    NULL, add_blockdev_probing_helper_done, 
+-						    HAL_HELPER_TIMEOUT) == NULL) {
+-				hal_device_store_remove (hald_get_tdl (), d);
+-				g_object_unref (d);
+-				hotplug_event_end (end_token);
+-			}
++			hald_runner_run(d, 
++			                    "hald-probe-pc-floppy", NULL,
++			                    HAL_HELPER_TIMEOUT,
++			                    add_blockdev_probing_helper_done,
++			                    (gpointer) end_token, NULL);
+ 			goto out;
+-
+ 		} else {
+ 			HAL_INFO (("Not probing storage device %s", 
+ 				   hal_device_property_get_string (d, "block.device")));
+@@ -397,14 +397,12 @@
+ 	HAL_INFO (("Probing storage device %s", hal_device_property_get_string (d, "block.device")));
+ 
+ 	/* probe the device */
+-	if (hal_util_helper_invoke ("hald-probe-storage", NULL, d, (gpointer) end_token, 
+-				    NULL, add_blockdev_probing_helper_done, 
+-				    HAL_HELPER_TIMEOUT) == NULL) {
+-		hal_device_store_remove (hald_get_tdl (), d);
+-		g_object_unref (d);
+-		hotplug_event_end (end_token);
+-	}
+-
++	hald_runner_run(d, 
++	                    "hald-probe-storage", NULL,
++	                    HAL_HELPER_TIMEOUT,
++	                    add_blockdev_probing_helper_done,
++	                    (gpointer) end_token, NULL);
++	                    
+ out:
+ 	;
+ }
+@@ -434,14 +432,11 @@
+ 	}
+ 
+ 	/* probe the device */
+-	if (hal_util_helper_invoke ("hald-probe-volume", NULL, d, (gpointer) end_token, 
+-				    NULL, add_blockdev_probing_helper_done, 
+-				    HAL_HELPER_TIMEOUT) == NULL) {
+-		hal_device_store_remove (hald_get_tdl (), d);
+-		g_object_unref (d);
+-		hotplug_event_end (end_token);
+-	}
+-
++	hald_runner_run (d,
++	                     "hald-probe-volume", NULL, 
++	                     HAL_HELPER_TIMEOUT,
++	                     add_blockdev_probing_helper_done,
++	                     (gpointer) end_token, NULL);
+ out:
+ 	;
+ }
+@@ -1162,14 +1157,15 @@
+ }
+ 
+ static void 
+-block_rescan_storage_done (HalDevice *d, gboolean timed_out, gint return_code, 
+-			   gpointer data1, gpointer data2, HalHelperData *helper_data)
++block_rescan_storage_done (HalDevice *d, guint32 exit_type, 
++                           gint return_code, gchar **error,
++                           gpointer data1, gpointer data2)
+ {
+ 	const char *sysfs_path;
+ 	HalDevice *fakevolume;
+ 	char fake_sysfs_path[HAL_PATH_MAX];
+ 
+-	HAL_INFO (("hald-probe-storage --only-check-for-media returned %d (timed_out=%d)", return_code, timed_out));
++	HAL_INFO (("hald-probe-storage --only-check-for-media returned %d (exit_type=%d)", return_code, exit_type));
+ 
+ 	if (d == NULL) {
+ 		HAL_INFO (("Device object already removed"));
+@@ -1220,13 +1216,11 @@
+ 	}
+ 
+ 	/* now see if we got a file system on the main block device */
+-	if (hal_util_helper_invoke ("hald-probe-storage --only-check-for-media", NULL, d, NULL, 
+-				    NULL, block_rescan_storage_done, 
+-				    HAL_HELPER_TIMEOUT) == NULL) {
+-		HAL_INFO (("Could not invoke 'hald-probe-storage --only-check-for-media'"));
+-		goto out;
+-	}
+-	
++	hald_runner_run (d,
++	                 "hald-probe-storage --only-check-for-media", NULL, 
++	                 HAL_HELPER_TIMEOUT,
++	                 block_rescan_storage_done,
++	                 NULL, NULL);
+ 	ret = TRUE;
+ 
+ out:
+diff -ruN hal-0.5.6-old/hald/linux2/classdev.c hal-0.5.6/hald/linux2/classdev.c
+--- hal-0.5.6-old/hald/linux2/classdev.c	2006-01-17 01:25:34.000000000 +0100
++++ hal-0.5.6/hald/linux2/classdev.c	2006-01-17 22:24:03.000000000 +0100
+@@ -65,6 +65,7 @@
+ #include "../device_info.h"
+ #include "../device_store.h"
+ #include "../util.h"
++#include "../hald_runner.h"
+ 
+ #include "osspec_linux.h"
+ 
+@@ -1282,13 +1283,14 @@
+ }
+ 
+ static void 
+-add_classdev_probing_helper_done (HalDevice *d, gboolean timed_out, gint return_code, 
+-				  gpointer data1, gpointer data2, HalHelperData *helper_data)
++add_classdev_probing_helper_done (HalDevice *d, guint32 exit_type, 
++                                  gint return_code, char **error,
++                                  gpointer data1, gpointer data2) 
+ {
+ 	void *end_token = (void *) data1;
+ 	ClassDevHandler *handler = (ClassDevHandler *) data2;
+ 
+-	HAL_INFO (("entering; timed_out=%d, return_code=%d", timed_out, return_code));
++	HAL_INFO (("entering; exit_type=%d, return_code=%d", exit_type, return_code));
+ 
+ 	if (d == NULL) {
+ 		HAL_INFO (("Device object already removed"));
+@@ -1297,7 +1299,7 @@
+ 	}
+ 
+ 	/* Discard device if probing reports failure */
+-	if (return_code != 0) {
++	if (exit_type != HALD_RUN_SUCCESS || return_code != 0) {
+ 		hal_device_store_remove (hald_get_tdl (), d);
+ 		g_object_unref (d);
+ 		hotplug_event_end (end_token);
+@@ -1350,20 +1352,16 @@
+ 		prober = NULL;
+ 	if (prober != NULL) {
+ 		/* probe the device */
+-		if (hal_util_helper_invoke (prober, NULL, d, (gpointer) end_token, 
+-					    (gpointer) handler, add_classdev_probing_helper_done, 
+-					    HAL_HELPER_TIMEOUT) == NULL) {
+-			hal_device_store_remove (hald_get_tdl (), d);
+-			g_object_unref (d);
+-			hotplug_event_end (end_token);
+-		}
+-		goto out;
++		hald_runner_run(d, 
++		                    prober, NULL, 
++		                    HAL_HELPER_TIMEOUT, 
++		                    add_classdev_probing_helper_done,
++		                    (gpointer) end_token, (gpointer) handler);
+ 	} else {
+ 		add_classdev_after_probing (d, handler, end_token);
+-		goto out;
+ 	}
+ out:
+-	;
++  ;
+ }
+ 
+ void
+diff -ruN hal-0.5.6-old/hald/linux2/osspec.c hal-0.5.6/hald/linux2/osspec.c
+--- hal-0.5.6-old/hald/linux2/osspec.c	2006-01-13 03:24:10.000000000 +0100
++++ hal-0.5.6/hald/linux2/osspec.c	2006-01-17 22:24:03.000000000 +0100
+@@ -66,6 +66,7 @@
+ #include "../logger.h"
+ #include "../hald.h"
+ #include "../hald_dbus.h"
++#include "../hald_runner.h"
+ #include "../device_info.h"
+ #include "../util.h"
+ 
+@@ -457,8 +458,9 @@
+ }
+ 
+ static void 
+-computer_probing_pcbios_helper_done (HalDevice *d, gboolean timed_out, gint return_code, 
+-				     gpointer data1, gpointer data2, HalHelperData *helper_data)
++computer_probing_pcbios_helper_done (HalDevice *d, guint32 exit_type, 
++		                                 gint return_code, gchar **error, 
++				                             gpointer data1, gpointer data2)
+ {
+ 	const char *chassis_type;
+ 	const char *system_manufacturer;
+@@ -635,16 +637,15 @@
+ 
+ 	/* TODO: add prober for PowerMac's */
+ 	if (should_decode_dmi) {
+-		if (hal_util_helper_invoke ("hald-probe-smbios", NULL, root, NULL, NULL,
+-					    computer_probing_pcbios_helper_done, 
+-					    HAL_HELPER_TIMEOUT) != NULL)
+-			goto out;
+-	}
++		hald_runner_run (root, "hald-probe-smbios", NULL,
++                         HAL_HELPER_TIMEOUT,
++                         computer_probing_pcbios_helper_done, 
++                         NULL, NULL);
++	} else {
++		/* no probing */
++		computer_probing_helper_done (root);
++  }
+ 
+-	/* no probing or probing failed */
+-	computer_probing_helper_done (root);
+-out:
+-	;
+ }
+ 
+ DBusHandlerResult
+diff -ruN hal-0.5.6-old/hald/util.c hal-0.5.6/hald/util.c
+--- hal-0.5.6-old/hald/util.c	2005-12-08 19:23:23.000000000 +0100
++++ hal-0.5.6/hald/util.c	2006-01-17 22:24:03.000000000 +0100
+@@ -50,6 +50,7 @@
+ 
+ #include "hald_dbus.h"
+ #include "util.h"
++#include "hald_runner.h"
+ 
+ typedef struct {
+ 	int last_level;
+@@ -534,235 +535,6 @@
+ 	;
+ }
+ 
+-void
+-hal_util_terminate_helper (HalHelperData *ed)
+-{
+-	if (ed->already_issued_kill) {
+-		HAL_INFO (("Already issued SIGTERM for pid %d, udi %s",
+-			   ed->pid, ed->d != NULL ? ed->d->udi : "(finalized object)"));
+-		goto out;
+-	}
+-
+-	HAL_INFO (("killing %d for udi %s", ed->pid, ed->d != NULL ? ed->d->udi : "(finalized object)"));
+-
+-	/* kill kenny! kill it!! */
+-	ed->already_issued_kill = TRUE;
+-	kill (ed->pid, SIGTERM);
+-
+-	if (ed->timeout_watch_id != (guint) -1) {
+-		g_source_remove (ed->timeout_watch_id);
+-		ed->timeout_watch_id = -1;
+-	}
+-
+-	if (!ed->already_issued_callback) {
+-		ed->already_issued_callback = TRUE;
+-		ed->cb (ed->d, TRUE, -1, ed->data1, ed->data2, ed);
+-	}
+-
+-	/* ed will be cleaned up when helper_child_exited reaps the child */
+-out:
+-	;
+-}
+-
+-static gboolean
+-helper_child_timeout (gpointer data)
+-{
+-	HalHelperData *ed = (HalHelperData *) data;
+-
+-	HAL_INFO (("child timeout for pid %d", ed->pid));
+-
+-	/* kill kenny! kill it!! */
+-	ed->already_issued_kill = TRUE;
+-	kill (ed->pid, SIGTERM);
+-
+-	ed->timeout_watch_id = -1;
+-
+-	if (!ed->already_issued_callback) {
+-		ed->already_issued_callback = TRUE;
+-		ed->cb (ed->d, TRUE, -1, ed->data1, ed->data2, ed);
+-	}
+-
+-	/* ed will be cleaned up when helper_child_exited reaps the child */
+-	return FALSE;
+-}
+-
+-static GSList *running_helpers = NULL;
+-
+-static void 
+-helper_device_object_finalized (gpointer data, GObject *where_the_object_was)
+-{
+-	HalHelperData *ed = (HalHelperData *) data;
+-
+-	HAL_INFO (("device object finalized for helper with pid %d", ed->pid));
+-
+-	ed->d = NULL;
+-	hal_util_terminate_helper (ed);
+-}
+-
+-static void 
+-helper_child_exited (GPid pid, gint status, gpointer data)
+-{
+-	HalHelperData *ed = (HalHelperData *) data;
+-
+-	HAL_INFO (("child exited for pid %d", pid));
+-
+-	if (ed->timeout_watch_id != (guint) -1)
+-		g_source_remove (ed->timeout_watch_id);
+-	g_spawn_close_pid (ed->pid);
+-
+-	if (ed->d != NULL)
+-		g_object_weak_unref (G_OBJECT (ed->d), helper_device_object_finalized, ed);
+-
+-	if (!ed->already_issued_callback)
+-		ed->cb (ed->d, FALSE, WEXITSTATUS (status), ed->data1, ed->data2, ed);
+-
+-	running_helpers = g_slist_remove (running_helpers, ed);
+-
+-	g_free (ed);
+-}
+-
+-static gboolean
+-helper_add_property_to_env (HalDevice *device, HalProperty *property, gpointer user_data)
+-{
+-	char *prop_upper, *value;
+-	char *c;
+-	gchar ***ienvp = (gchar ***) user_data;
+-	gchar **envp;
+-
+-	envp = *ienvp;
+-	*ienvp = *ienvp + 1;
+-
+-	prop_upper = g_ascii_strup (hal_property_get_key (property), -1);
+-	
+-	/* periods aren't valid in the environment, so replace them with
+-	 * underscores. */
+-	for (c = prop_upper; *c; c++) {
+-		if (*c == '.')
+-			*c = '_';
+-	}
+-	
+-	value = hal_property_to_string (property);
+-	
+-	*envp = g_strdup_printf ("HAL_PROP_%s=%s", prop_upper, value);
+-
+-	g_free (value);
+-	g_free (prop_upper);
+-
+-	return TRUE;
+-}
+-
+-static void
+-callout_failed (HalHelperData *ed);
+-
+-HalHelperData *
+-hal_util_helper_invoke (const gchar *command_line, gchar **extra_env, HalDevice *d, 
+-			gpointer data1, gpointer data2, HalHelperTerminatedCB cb, guint timeout)
+-{
+-	return hal_util_helper_invoke_with_pipes (command_line, extra_env, d, data1, data2, cb, timeout, NULL, NULL, NULL);
+-}
+-
+-HalHelperData *
+-hal_util_helper_invoke_with_pipes (const gchar *command_line, gchar **extra_env, HalDevice *d, 
+-				   gpointer data1, gpointer data2, HalHelperTerminatedCB cb, guint timeout,
+-				   int *standard_input, int *standard_output, int *standard_error)
+-{
+-	HalHelperData *ed;
+-	gint argc;
+-	gchar **argv;
+-	gchar **envp;
+-	gchar **ienvp;
+-	GError *err = NULL;
+-	guint num_env_vars;
+-	guint i, j;
+-	guint num_properties;
+-	guint num_extras;
+-	char *local_addr;
+-
+-	ed = g_new0 (HalHelperData, 1);
+-	ed->data1 = data1;
+-	ed->data2 = data2;
+-	ed->d = d;
+-	ed->cb = cb;
+-	ed->already_issued_callback = FALSE;
+-	ed->already_issued_kill = FALSE;
+-
+-	num_properties = hal_device_num_properties (d);
+-	if (extra_env == NULL)
+-		num_extras = 0;
+-	else
+-		num_extras = g_strv_length ((gchar **) extra_env);
+-	num_env_vars = num_properties + 2 + num_extras;
+-	if (hald_is_verbose)
+-		num_env_vars++;
+-	if (hald_is_initialising)
+-		num_env_vars++;
+-	if ((local_addr = hald_dbus_local_server_addr ()) != NULL)
+-		num_env_vars++;
+-
+-	envp = g_new (char *, num_env_vars);
+-	ienvp = envp;
+-	hal_device_property_foreach (d, helper_add_property_to_env, &ienvp);
+-	i = num_properties;
+-	envp[i++] = g_strdup_printf ("UDI=%s", hal_device_get_udi (d));
+-	if (hald_is_verbose)
+-		envp[i++] = g_strdup ("HALD_VERBOSE=1");
+-	if (hald_is_initialising)
+-		envp[i++] = g_strdup ("HALD_STARTUP=1");
+-	if (local_addr != NULL)
+-		envp[i++] = g_strdup_printf ("HALD_DIRECT_ADDR=%s", local_addr);
+-	for (j = 0; j < num_extras; j++) {
+-		envp[i++] = g_strdup (extra_env[j]);
+-	}
+-	envp[i++] = NULL;
+-
+-	err = NULL;
+-	if (!g_shell_parse_argv (command_line, &argc, &argv, &err)) {
+-		HAL_ERROR (("Error parsing commandline '%s': %s", command_line, err->message));
+-		g_error_free (err);
+-		g_free (ed);
+-		ed = NULL;
+-	} else {
+-		err = NULL;
+-		if (!g_spawn_async_with_pipes (NULL, 
+-					       argv, 
+-					       envp, 
+-					       G_SPAWN_DO_NOT_REAP_CHILD|G_SPAWN_SEARCH_PATH,
+-					       NULL,
+-					       NULL,
+-					       &ed->pid,
+-					       standard_input,
+-					       standard_output,
+-					       standard_error,
+-					       &err)) {
+-			HAL_ERROR (("Couldn't spawn '%s' err=%s!", command_line, err->message));
+-			g_error_free (err);
+-
+-			/* move ahead in list */
+-			callout_failed(ed);
+-
+-			g_free (ed);
+-			ed = NULL;
+-		} else {
+-			ed->child_watch_id = g_child_watch_add (ed->pid, helper_child_exited, (gpointer) ed);
+-			if (timeout > 0)
+-				ed->timeout_watch_id = g_timeout_add (timeout, helper_child_timeout, (gpointer) ed);
+-			else
+-				ed->timeout_watch_id = (guint) -1;
+-
+-			running_helpers = g_slist_prepend (running_helpers, ed);
+-			/* device object may disappear from underneath us - this is
+-			 * used to terminate the helper and pass d=NULL in the
+-			 * HalHelperTerminatedCB callback
+-			 */
+-			g_object_weak_ref (G_OBJECT (d), helper_device_object_finalized, ed);
+-		}
+-	}
+-
+-	g_strfreev (envp);
+-	g_free (argv);
+-
+-	return ed;
+-}
+ 
+ gboolean
+ hal_util_path_ascend (gchar *path)
+@@ -1127,21 +899,10 @@
+ 
+ static void callout_do_next (Callout *c);
+ 
+-static void
+-callout_failed (HalHelperData *ed)
+-{
+-	if (ed->data1 != NULL) {
+-		Callout *c;
+-		c = (Callout *) ed->data1;
+-
+-		c->next_program++;
+-		callout_do_next(c);
+-	}
+-}
+-
+ static void 
+-callout_terminated (HalDevice *d, gboolean timed_out, gint return_code, 
+-		    gpointer data1, gpointer data2, HalHelperData *helper_data)
++callout_terminated (HalDevice *d, guint32 exit_type, 
++                   gint return_code, gchar **error, 
++                   gpointer data1, gpointer data2)
+ {
+ 	Callout *c;
+ 
+@@ -1172,8 +933,9 @@
+ 		callback (d, userdata1, userdata2);
+ 
+ 	} else {
+-		hal_util_helper_invoke (c->programs[c->next_program], c->extra_env, c->d, 
+-					(gpointer) c, NULL, callout_terminated, HAL_HELPER_TIMEOUT);
++    hald_runner_run(c->d, c->programs[c->next_program], c->extra_env,
++                    HAL_HELPER_TIMEOUT, callout_terminated,
++                    (gpointer)c, NULL);
+ 		c->next_program++;
+ 	}
+ }
+@@ -1250,29 +1012,6 @@
+ 	;
+ }
+ 
+-/** Kill all helpers we have running; useful when exiting hald.
+- *
+- *  @return                     Number of childs killed
+- */
+-unsigned int 
+-hal_util_kill_all_helpers (void)
+-{
+-	unsigned int n;
+-	GSList *i;
+-
+-	n = 0;
+-	for (i = running_helpers; i != NULL; i = i->next) {
+-		HalHelperData *ed;
+-
+-		ed = i->data;
+-		HAL_INFO (("Killing helper with pid %d", ed->pid));
+-		kill (ed->pid, SIGTERM);
+-		n++;
+-	}
+-
+-	return n;
+-}
+-
+ void
+ hal_util_hexdump (const void *mem, unsigned int size)
+ {
+diff -ruN hal-0.5.6-old/hald/util.h hal-0.5.6/hald/util.h
+--- hal-0.5.6-old/hald/util.h	2005-11-14 17:16:03.000000000 +0100
++++ hal-0.5.6/hald/util.h	2006-01-17 22:24:03.000000000 +0100
+@@ -81,38 +81,6 @@
+ 					   const gchar *linestart, guint elem, const gchar *expected, 
+ 					   gboolean reuse_file);
+ 
+-struct HalHelperData_s;
+-typedef struct HalHelperData_s HalHelperData;
+-
+-typedef void (*HalHelperTerminatedCB) (HalDevice *d, gboolean timed_out, gint return_code, 
+-				       gpointer data1, gpointer data2, HalHelperData *helper_data);
+-
+-struct HalHelperData_s
+-{
+-	GPid pid;
+-	guint timeout_watch_id;
+-	guint child_watch_id;
+-	HalHelperTerminatedCB cb;
+-	gpointer data1;
+-	gpointer data2;
+-	HalDevice *d;
+-
+-	gboolean already_issued_callback;
+-	gboolean already_issued_kill;
+-};
+-
+-unsigned int hal_util_kill_all_helpers (void);
+-
+-HalHelperData  *hal_util_helper_invoke (const gchar *command_line, gchar **extra_env, HalDevice *d, 
+-					gpointer data1, gpointer data2, HalHelperTerminatedCB cb, guint timeout);
+-
+-HalHelperData  *hal_util_helper_invoke_with_pipes (const gchar *command_line, gchar **extra_env, HalDevice *d, 
+-						   gpointer data1, gpointer data2, HalHelperTerminatedCB cb, 
+-						   guint timeout,
+-						   int *standard_input, int *standard_output, int *standard_error);
+-
+-void hal_util_terminate_helper (HalHelperData *helper_data);
+-
+ gchar **hal_util_dup_strv_from_g_slist (GSList *strlist);
+ 
+ typedef void (*HalCalloutsDone) (HalDevice *d, gpointer userdata1, gpointer userdata2);
+diff -ruN hal-0.5.6-old/hald-runner/Makefile.am hal-0.5.6/hald-runner/Makefile.am
+--- hal-0.5.6-old/hald-runner/Makefile.am	1970-01-01 01:00:00.000000000 +0100
++++ hal-0.5.6/hald-runner/Makefile.am	2006-01-17 22:24:03.000000000 +0100
+@@ -0,0 +1,16 @@
++## Process this file with automake to produce Makefile.in
++INCLUDES = \
++	-DPACKAGE_LIBEXEC_DIR=\""$(libexecdir)"\" \
++	-DPACKAGE_SYSCONF_DIR=\""$(sysconfdir)"\" \
++	-DPACKAGE_DATA_DIR=\""$(datadir)"\" \
++	-DPACKAGE_BIN_DIR=\""$(bindir)"\" \
++	-DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
++	-DPACKAGE_LOCALSTATEDIR=\""$(localstatedir)"\" \
++	-DPACKAGE_SCRIPT_DIR=\""$(datadir)/hal/scripts"\" \
++	-I$(top_srcdir) \
++	@PACKAGE_CFLAGS@
++
++libexec_PROGRAMS = hald-runner
++
++hald_runner_SOURCES = main.c runner.c runner.h utils.h utils.c
++hald_runner_LDADD = @PACKAGE_LIBS@ @DBUS_LIBS@
+diff -ruN hal-0.5.6-old/hald-runner/Makefile.in hal-0.5.6/hald-runner/Makefile.in
+--- hal-0.5.6-old/hald-runner/Makefile.in	1970-01-01 01:00:00.000000000 +0100
++++ hal-0.5.6/hald-runner/Makefile.in	2006-01-17 22:24:35.000000000 +0100
+@@ -0,0 +1,573 @@
++# Makefile.in generated by automake 1.9.6 from Makefile.am.
++# @configure_input@
++
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004, 2005  Free Software Foundation, Inc.
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
++# PARTICULAR PURPOSE.
++
++ at SET_MAKE@
++
++srcdir = @srcdir@
++top_srcdir = @top_srcdir@
++VPATH = @srcdir@
++pkgdatadir = $(datadir)/@PACKAGE@
++pkglibdir = $(libdir)/@PACKAGE@
++pkgincludedir = $(includedir)/@PACKAGE@
++top_builddir = ..
++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
++INSTALL = @INSTALL@
++install_sh_DATA = $(install_sh) -c -m 644
++install_sh_PROGRAM = $(install_sh) -c
++install_sh_SCRIPT = $(install_sh) -c
++INSTALL_HEADER = $(INSTALL_DATA)
++transform = $(program_transform_name)
++NORMAL_INSTALL = :
++PRE_INSTALL = :
++POST_INSTALL = :
++NORMAL_UNINSTALL = :
++PRE_UNINSTALL = :
++POST_UNINSTALL = :
++build_triplet = @build@
++host_triplet = @host@
++libexec_PROGRAMS = hald-runner$(EXEEXT)
++subdir = hald-runner
++DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
++am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
++	$(top_srcdir)/configure.in
++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
++	$(ACLOCAL_M4)
++mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
++CONFIG_HEADER = $(top_builddir)/config.h
++CONFIG_CLEAN_FILES =
++am__installdirs = "$(DESTDIR)$(libexecdir)"
++libexecPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
++PROGRAMS = $(libexec_PROGRAMS)
++am_hald_runner_OBJECTS = main.$(OBJEXT) runner.$(OBJEXT) \
++	utils.$(OBJEXT)
++hald_runner_OBJECTS = $(am_hald_runner_OBJECTS)
++hald_runner_DEPENDENCIES =
++DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
++depcomp = $(SHELL) $(top_srcdir)/depcomp
++am__depfiles_maybe = depfiles
++COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
++	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
++LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
++	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
++	$(AM_CFLAGS) $(CFLAGS)
++CCLD = $(CC)
++LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
++	$(AM_LDFLAGS) $(LDFLAGS) -o $@
++SOURCES = $(hald_runner_SOURCES)
++DIST_SOURCES = $(hald_runner_SOURCES)
++ETAGS = etags
++CTAGS = ctags
++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
++ACLOCAL = @ACLOCAL@
++ACPI_ACPID = @ACPI_ACPID@
++ACPI_ACPID_FALSE = @ACPI_ACPID_FALSE@
++ACPI_ACPID_TRUE = @ACPI_ACPID_TRUE@
++ACPI_PROC = @ACPI_PROC@
++ACPI_PROC_FALSE = @ACPI_PROC_FALSE@
++ACPI_PROC_TRUE = @ACPI_PROC_TRUE@
++ALL_LINGUAS = @ALL_LINGUAS@
++AMDEP_FALSE = @AMDEP_FALSE@
++AMDEP_TRUE = @AMDEP_TRUE@
++AMTAR = @AMTAR@
++AR = @AR@
++AUTOCONF = @AUTOCONF@
++AUTOHEADER = @AUTOHEADER@
++AUTOMAKE = @AUTOMAKE@
++AWK = @AWK@
++BINDIR = @BINDIR@
++CATALOGS = @CATALOGS@
++CATOBJEXT = @CATOBJEXT@
++CC = @CC@
++CCDEPMODE = @CCDEPMODE@
++CFLAGS = @CFLAGS@
++CPP = @CPP@
++CPPFLAGS = @CPPFLAGS@
++CXX = @CXX@
++CXXCPP = @CXXCPP@
++CXXDEPMODE = @CXXDEPMODE@
++CXXFLAGS = @CXXFLAGS@
++CYGPATH_W = @CYGPATH_W@
++DATADIR = @DATADIR@
++DATADIRNAME = @DATADIRNAME@
++DBUS_CFLAGS = @DBUS_CFLAGS@
++DBUS_LIBS = @DBUS_LIBS@
++DBUS_SYS_DIR = @DBUS_SYS_DIR@
++DEFS = @DEFS@
++DEPDIR = @DEPDIR@
++DOCBOOK = @DOCBOOK@
++DOCBOOK_DOCS_ENABLED_FALSE = @DOCBOOK_DOCS_ENABLED_FALSE@
++DOCBOOK_DOCS_ENABLED_TRUE = @DOCBOOK_DOCS_ENABLED_TRUE@
++DOCDIR = @DOCDIR@
++DOXYGEN = @DOXYGEN@
++DOXYGEN_DOCS_ENABLED_FALSE = @DOXYGEN_DOCS_ENABLED_FALSE@
++DOXYGEN_DOCS_ENABLED_TRUE = @DOXYGEN_DOCS_ENABLED_TRUE@
++ECHO = @ECHO@
++ECHO_C = @ECHO_C@
++ECHO_N = @ECHO_N@
++ECHO_T = @ECHO_T@
++EGREP = @EGREP@
++EXEEXT = @EXEEXT@
++EXPAT_LIB = @EXPAT_LIB@
++F77 = @F77@
++FFLAGS = @FFLAGS@
++FSTAB_SYNC_ENABLED = @FSTAB_SYNC_ENABLED@
++FSTAB_SYNC_ENABLED_FALSE = @FSTAB_SYNC_ENABLED_FALSE@
++FSTAB_SYNC_ENABLED_TRUE = @FSTAB_SYNC_ENABLED_TRUE@
++GCOV_FALSE = @GCOV_FALSE@
++GCOV_TRUE = @GCOV_TRUE@
++GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
++GMOFILES = @GMOFILES@
++GMSGFMT = @GMSGFMT@
++HALD_BACKEND = @HALD_BACKEND@
++HALD_COMPILE_LINUX2_FALSE = @HALD_COMPILE_LINUX2_FALSE@
++HALD_COMPILE_LINUX2_TRUE = @HALD_COMPILE_LINUX2_TRUE@
++HALD_COMPILE_SOLARIS_FALSE = @HALD_COMPILE_SOLARIS_FALSE@
++HALD_COMPILE_SOLARIS_TRUE = @HALD_COMPILE_SOLARIS_TRUE@
++HALD_PID_FILE = @HALD_PID_FILE@
++HAL_GROUP = @HAL_GROUP@
++HAL_USER = @HAL_USER@
++HAVE_LIBUSB_FALSE = @HAVE_LIBUSB_FALSE@
++HAVE_LIBUSB_TRUE = @HAVE_LIBUSB_TRUE@
++HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
++HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
++HWDATA_DIR = @HWDATA_DIR@
++INSTALL_DATA = @INSTALL_DATA@
++INSTALL_PROGRAM = @INSTALL_PROGRAM@
++INSTALL_SCRIPT = @INSTALL_SCRIPT@
++INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
++INSTOBJEXT = @INSTOBJEXT@
++INTLLIBS = @INTLLIBS@
++INTLTOOL_CAVES_RULE = @INTLTOOL_CAVES_RULE@
++INTLTOOL_DESKTOP_RULE = @INTLTOOL_DESKTOP_RULE@
++INTLTOOL_DIRECTORY_RULE = @INTLTOOL_DIRECTORY_RULE@
++INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
++INTLTOOL_ICONV = @INTLTOOL_ICONV@
++INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@
++INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@
++INTLTOOL_MERGE = @INTLTOOL_MERGE@
++INTLTOOL_MSGFMT = @INTLTOOL_MSGFMT@
++INTLTOOL_MSGMERGE = @INTLTOOL_MSGMERGE@
++INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@
++INTLTOOL_PERL = @INTLTOOL_PERL@
++INTLTOOL_PONG_RULE = @INTLTOOL_PONG_RULE@
++INTLTOOL_PROP_RULE = @INTLTOOL_PROP_RULE@
++INTLTOOL_SCHEMAS_RULE = @INTLTOOL_SCHEMAS_RULE@
++INTLTOOL_SERVER_RULE = @INTLTOOL_SERVER_RULE@
++INTLTOOL_SHEET_RULE = @INTLTOOL_SHEET_RULE@
++INTLTOOL_SOUNDLIST_RULE = @INTLTOOL_SOUNDLIST_RULE@
++INTLTOOL_THEME_RULE = @INTLTOOL_THEME_RULE@
++INTLTOOL_UI_RULE = @INTLTOOL_UI_RULE@
++INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
++INTLTOOL_XAM_RULE = @INTLTOOL_XAM_RULE@
++INTLTOOL_XGETTEXT = @INTLTOOL_XGETTEXT@
++INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@
++INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@
++LDFLAGS = @LDFLAGS@
++LIBDIR = @LIBDIR@
++LIBEXECDIR = @LIBEXECDIR@
++LIBOBJS = @LIBOBJS@
++LIBS = @LIBS@
++LIBTOOL = @LIBTOOL@
++LIBUSB_CONFIG = @LIBUSB_CONFIG@
++LINUX_HOTPLUG_DIR = @LINUX_HOTPLUG_DIR@
++LN_S = @LN_S@
++LOCALSTATEDIR = @LOCALSTATEDIR@
++LTLIBOBJS = @LTLIBOBJS@
++LT_AGE = @LT_AGE@
++LT_CURRENT = @LT_CURRENT@
++LT_REVISION = @LT_REVISION@
++MAINT = @MAINT@
++MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
++MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
++MAKEINFO = @MAKEINFO@
++MKINSTALLDIRS = @MKINSTALLDIRS@
++MSGFMT = @MSGFMT@
++OBJEXT = @OBJEXT@
++OS_TYPE_RED_HAT_FALSE = @OS_TYPE_RED_HAT_FALSE@
++OS_TYPE_RED_HAT_TRUE = @OS_TYPE_RED_HAT_TRUE@
++OS_TYPE_UNKNOWN_FALSE = @OS_TYPE_UNKNOWN_FALSE@
++OS_TYPE_UNKNOWN_TRUE = @OS_TYPE_UNKNOWN_TRUE@
++PACKAGE = @PACKAGE@
++PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
++PACKAGE_CFLAGS = @PACKAGE_CFLAGS@
++PACKAGE_LIBS = @PACKAGE_LIBS@
++PACKAGE_NAME = @PACKAGE_NAME@
++PACKAGE_STRING = @PACKAGE_STRING@
++PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_VERSION = @PACKAGE_VERSION@
++PATH_SEPARATOR = @PATH_SEPARATOR@
++PCMCIA_STAB_FILE = @PCMCIA_STAB_FILE@
++PCMCIA_SUPPORT_ENABLE = @PCMCIA_SUPPORT_ENABLE@
++PCMCIA_SUPPORT_ENABLE_FALSE = @PCMCIA_SUPPORT_ENABLE_FALSE@
++PCMCIA_SUPPORT_ENABLE_TRUE = @PCMCIA_SUPPORT_ENABLE_TRUE@
++PKG_CONFIG = @PKG_CONFIG@
++POFILES = @POFILES@
++POSUB = @POSUB@
++PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
++PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
++PYTHON = @PYTHON@
++PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
++PYTHON_PLATFORM = @PYTHON_PLATFORM@
++PYTHON_PREFIX = @PYTHON_PREFIX@
++PYTHON_VERSION = @PYTHON_VERSION@
++RANLIB = @RANLIB@
++SBINDIR = @SBINDIR@
++SET_MAKE = @SET_MAKE@
++SHELL = @SHELL@
++STRIP = @STRIP@
++SYSCONFDIR = @SYSCONFDIR@
++USE_NLS = @USE_NLS@
++VERSION = @VERSION@
++XGETTEXT = @XGETTEXT@
++ac_ct_AR = @ac_ct_AR@
++ac_ct_CC = @ac_ct_CC@
++ac_ct_CXX = @ac_ct_CXX@
++ac_ct_F77 = @ac_ct_F77@
++ac_ct_RANLIB = @ac_ct_RANLIB@
++ac_ct_STRIP = @ac_ct_STRIP@
++ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
++am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
++am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
++am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
++am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
++am__include = @am__include@
++am__leading_dot = @am__leading_dot@
++am__quote = @am__quote@
++am__tar = @am__tar@
++am__untar = @am__untar@
++bindir = @bindir@
++build = @build@
++build_alias = @build_alias@
++build_cpu = @build_cpu@
++build_os = @build_os@
++build_vendor = @build_vendor@
++datadir = @datadir@
++exec_prefix = @exec_prefix@
++host = @host@
++host_alias = @host_alias@
++host_cpu = @host_cpu@
++host_os = @host_os@
++host_vendor = @host_vendor@
++includedir = @includedir@
++infodir = @infodir@
++install_sh = @install_sh@
++libdir = @libdir@
++libexecdir = @libexecdir@
++localstatedir = @localstatedir@
++mandir = @mandir@
++mkdir_p = @mkdir_p@
++oldincludedir = @oldincludedir@
++pkgpyexecdir = @pkgpyexecdir@
++pkgpythondir = @pkgpythondir@
++prefix = @prefix@
++program_transform_name = @program_transform_name@
++pyexecdir = @pyexecdir@
++pythondir = @pythondir@
++sbindir = @sbindir@
++sharedstatedir = @sharedstatedir@
++sysconfdir = @sysconfdir@
++target_alias = @target_alias@
++INCLUDES = \
++	-DPACKAGE_LIBEXEC_DIR=\""$(libexecdir)"\" \
++	-DPACKAGE_SYSCONF_DIR=\""$(sysconfdir)"\" \
++	-DPACKAGE_DATA_DIR=\""$(datadir)"\" \
++	-DPACKAGE_BIN_DIR=\""$(bindir)"\" \
++	-DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
++	-DPACKAGE_LOCALSTATEDIR=\""$(localstatedir)"\" \
++	-DPACKAGE_SCRIPT_DIR=\""$(datadir)/hal/scripts"\" \
++	-I$(top_srcdir) \
++	@PACKAGE_CFLAGS@
++
++hald_runner_SOURCES = main.c runner.c runner.h utils.h utils.c
++hald_runner_LDADD = @PACKAGE_LIBS@ @DBUS_LIBS@
++all: all-am
++
++.SUFFIXES:
++.SUFFIXES: .c .lo .o .obj
++$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
++	@for dep in $?; do \
++	  case '$(am__configure_deps)' in \
++	    *$$dep*) \
++	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
++		&& exit 0; \
++	      exit 1;; \
++	  esac; \
++	done; \
++	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  hald-runner/Makefile'; \
++	cd $(top_srcdir) && \
++	  $(AUTOMAKE) --gnu  hald-runner/Makefile
++.PRECIOUS: Makefile
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++	@case '$?' in \
++	  *config.status*) \
++	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
++	  *) \
++	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
++	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
++	esac;
++
++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
++	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++
++$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
++	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
++	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++install-libexecPROGRAMS: $(libexec_PROGRAMS)
++	@$(NORMAL_INSTALL)
++	test -z "$(libexecdir)" || $(mkdir_p) "$(DESTDIR)$(libexecdir)"
++	@list='$(libexec_PROGRAMS)'; for p in $$list; do \
++	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
++	  if test -f $$p \
++	     || test -f $$p1 \
++	  ; then \
++	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
++	   echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(libexecPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(libexecdir)/$$f'"; \
++	   $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(libexecPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(libexecdir)/$$f" || exit 1; \
++	  else :; fi; \
++	done
++
++uninstall-libexecPROGRAMS:
++	@$(NORMAL_UNINSTALL)
++	@list='$(libexec_PROGRAMS)'; for p in $$list; do \
++	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
++	  echo " rm -f '$(DESTDIR)$(libexecdir)/$$f'"; \
++	  rm -f "$(DESTDIR)$(libexecdir)/$$f"; \
++	done
++
++clean-libexecPROGRAMS:
++	@list='$(libexec_PROGRAMS)'; for p in $$list; do \
++	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
++	  echo " rm -f $$p $$f"; \
++	  rm -f $$p $$f ; \
++	done
++hald-runner$(EXEEXT): $(hald_runner_OBJECTS) $(hald_runner_DEPENDENCIES) 
++	@rm -f hald-runner$(EXEEXT)
++	$(LINK) $(hald_runner_LDFLAGS) $(hald_runner_OBJECTS) $(hald_runner_LDADD) $(LIBS)
++
++mostlyclean-compile:
++	-rm -f *.$(OBJEXT)
++
++distclean-compile:
++	-rm -f *.tab.c
++
++ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/main.Po at am__quote@
++ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/runner.Po at am__quote@
++ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/utils.Po at am__quote@
++
++.c.o:
++ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
++ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
++ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
++ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
++
++.c.obj:
++ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
++ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
++ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
++ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
++
++.c.lo:
++ at am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
++ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
++ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
++ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
++
++mostlyclean-libtool:
++	-rm -f *.lo
++
++clean-libtool:
++	-rm -rf .libs _libs
++
++distclean-libtool:
++	-rm -f libtool
++uninstall-info-am:
++
++ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
++	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
++	unique=`for i in $$list; do \
++	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++	  done | \
++	  $(AWK) '    { files[$$0] = 1; } \
++	       END { for (i in files) print i; }'`; \
++	mkid -fID $$unique
++tags: TAGS
++
++TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
++		$(TAGS_FILES) $(LISP)
++	tags=; \
++	here=`pwd`; \
++	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
++	unique=`for i in $$list; do \
++	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++	  done | \
++	  $(AWK) '    { files[$$0] = 1; } \
++	       END { for (i in files) print i; }'`; \
++	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
++	  test -n "$$unique" || unique=$$empty_fix; \
++	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++	    $$tags $$unique; \
++	fi
++ctags: CTAGS
++CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
++		$(TAGS_FILES) $(LISP)
++	tags=; \
++	here=`pwd`; \
++	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
++	unique=`for i in $$list; do \
++	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++	  done | \
++	  $(AWK) '    { files[$$0] = 1; } \
++	       END { for (i in files) print i; }'`; \
++	test -z "$(CTAGS_ARGS)$$tags$$unique" \
++	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
++	     $$tags $$unique
++
++GTAGS:
++	here=`$(am__cd) $(top_builddir) && pwd` \
++	  && cd $(top_srcdir) \
++	  && gtags -i $(GTAGS_ARGS) $$here
++
++distclean-tags:
++	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
++
++distdir: $(DISTFILES)
++	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
++	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
++	list='$(DISTFILES)'; for file in $$list; do \
++	  case $$file in \
++	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
++	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
++	  esac; \
++	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
++	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
++	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
++	    dir="/$$dir"; \
++	    $(mkdir_p) "$(distdir)$$dir"; \
++	  else \
++	    dir=''; \
++	  fi; \
++	  if test -d $$d/$$file; then \
++	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
++	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
++	    fi; \
++	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
++	  else \
++	    test -f $(distdir)/$$file \
++	    || cp -p $$d/$$file $(distdir)/$$file \
++	    || exit 1; \
++	  fi; \
++	done
++check-am: all-am
++check: check-am
++all-am: Makefile $(PROGRAMS)
++installdirs:
++	for dir in "$(DESTDIR)$(libexecdir)"; do \
++	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
++	done
++install: install-am
++install-exec: install-exec-am
++install-data: install-data-am
++uninstall: uninstall-am
++
++install-am: all-am
++	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
++
++installcheck: installcheck-am
++install-strip:
++	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++	  `test -z '$(STRIP)' || \
++	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++mostlyclean-generic:
++
++clean-generic:
++
++distclean-generic:
++	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++
++maintainer-clean-generic:
++	@echo "This command is intended for maintainers to use"
++	@echo "it deletes files that may require special tools to rebuild."
++clean: clean-am
++
++clean-am: clean-generic clean-libexecPROGRAMS clean-libtool \
++	mostlyclean-am
++
++distclean: distclean-am
++	-rm -rf ./$(DEPDIR)
++	-rm -f Makefile
++distclean-am: clean-am distclean-compile distclean-generic \
++	distclean-libtool distclean-tags
++
++dvi: dvi-am
++
++dvi-am:
++
++html: html-am
++
++info: info-am
++
++info-am:
++
++install-data-am:
++
++install-exec-am: install-libexecPROGRAMS
++
++install-info: install-info-am
++
++install-man:
++
++installcheck-am:
++
++maintainer-clean: maintainer-clean-am
++	-rm -rf ./$(DEPDIR)
++	-rm -f Makefile
++maintainer-clean-am: distclean-am maintainer-clean-generic
++
++mostlyclean: mostlyclean-am
++
++mostlyclean-am: mostlyclean-compile mostlyclean-generic \
++	mostlyclean-libtool
++
++pdf: pdf-am
++
++pdf-am:
++
++ps: ps-am
++
++ps-am:
++
++uninstall-am: uninstall-info-am uninstall-libexecPROGRAMS
++
++.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
++	clean-libexecPROGRAMS clean-libtool ctags distclean \
++	distclean-compile distclean-generic distclean-libtool \
++	distclean-tags distdir dvi dvi-am html html-am info info-am \
++	install install-am install-data install-data-am install-exec \
++	install-exec-am install-info install-info-am \
++	install-libexecPROGRAMS install-man install-strip installcheck \
++	installcheck-am installdirs maintainer-clean \
++	maintainer-clean-generic mostlyclean mostlyclean-compile \
++	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
++	tags uninstall uninstall-am uninstall-info-am \
++	uninstall-libexecPROGRAMS
++
++# Tell versions [3.59,3.63) of GNU make to not export all variables.
++# Otherwise a system limit (for SysV at least) may be exceeded.
++.NOEXPORT:
+diff -ruN hal-0.5.6-old/hald-runner/main.c hal-0.5.6/hald-runner/main.c
+--- hal-0.5.6-old/hald-runner/main.c	1970-01-01 01:00:00.000000000 +0100
++++ hal-0.5.6/hald-runner/main.c	2006-01-17 22:24:03.000000000 +0100
+@@ -0,0 +1,195 @@
++#include <stdio.h>
++#include <stdlib.h>
++#define DBUS_API_SUBJECT_TO_CHANGE 
++#include <dbus/dbus-glib-lowlevel.h>
++
++#include <glib.h>
++#include "utils.h"
++#include "runner.h"
++
++static gboolean
++parse_first_part(run_request *r, DBusMessage *msg, DBusMessageIter *iter) {
++  DBusMessageIter sub_iter;
++  char *tmpstr;
++
++  /* First should be the device UDI */
++  if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_STRING) 
++    goto malformed;
++  dbus_message_iter_get_basic(iter, &tmpstr);
++  r->udi = g_strdup(tmpstr);
++
++  /* Then the environment array */
++  if (!dbus_message_iter_next(iter) ||
++      dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_ARRAY) 
++    goto malformed;
++  dbus_message_iter_recurse(iter, &sub_iter);
++  r->environment = get_string_array(&sub_iter);
++
++  /* Then argv */
++  if (!dbus_message_iter_next(iter) ||
++      dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_ARRAY) 
++    goto malformed;
++  dbus_message_iter_recurse(iter, &sub_iter);
++  r->argv = get_string_array(&sub_iter);
++
++  return TRUE;
++
++malformed:
++  return FALSE;
++}
++
++static void
++handle_run(DBusConnection *con, DBusMessage *msg) {
++  DBusMessage *reply;
++  DBusMessageIter iter;
++  run_request *r;
++  char *tmpstr;
++
++  r = new_run_request();
++  g_assert(dbus_message_iter_init(msg, &iter));
++
++  if (!parse_first_part(r, msg, &iter)) 
++    goto malformed;
++
++  /* Next a string of what should be written to stdin */
++  if (!dbus_message_iter_next(&iter) ||
++      dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING) 
++    goto malformed;
++  dbus_message_iter_get_basic(&iter, &tmpstr);
++  r->input = g_strdup(tmpstr);
++
++  /* Then an bool to indicate if we should grab stderr */
++  if (!dbus_message_iter_next(&iter) ||
++      dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_BOOLEAN) 
++    goto malformed;
++  dbus_message_iter_get_basic(&iter, &(r->error_on_stderr));
++
++  /* Then an uint32 timeout for it */
++  if (!dbus_message_iter_next(&iter) ||
++      dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_UINT32) 
++    goto malformed;
++  dbus_message_iter_get_basic(&iter, &(r->timeout));
++
++  /* let run_request_run handle the reply */
++  run_request_run(r, con, msg);
++  return ;
++malformed:
++  del_run_request(r);
++  reply = dbus_message_new_error(msg, "org.freedesktop.HalRunner.Malformed",
++                                 "Malformed run request");
++  dbus_connection_send(con, reply, NULL);
++  dbus_message_unref(reply);
++}
++
++static void
++handle_start(DBusConnection *con, DBusMessage *msg) {
++  DBusMessage *reply;
++  DBusMessageIter iter;
++  run_request *r;
++
++  r = new_run_request();
++  g_assert(dbus_message_iter_init(msg, &iter));
++
++  if (!dbus_message_iter_init(msg, &iter) || !parse_first_part(r, msg, &iter)) 
++    goto malformed;
++
++  if (run_request_run(r, NULL, NULL)) {
++    reply = dbus_message_new_method_return(msg);
++  } else {
++    reply = dbus_message_new_error(msg, "org.freedesktop.HalRunner.Failed",
++                                    "Start request failed");
++  }
++  dbus_connection_send(con, reply, NULL);
++  dbus_message_unref(reply);
++  return ;
++malformed:
++  del_run_request(r);
++  reply = dbus_message_new_error(msg, "org.freedesktop.HalRunner.Malformed",
++                                 "Malformed start request");
++  dbus_connection_send(con, reply, NULL);
++  dbus_message_unref(reply);
++}
++
++static void
++handle_kill(DBusConnection *con, DBusMessage *msg) {
++  DBusError error;
++  DBusMessage *reply = NULL;
++  char *udi;
++
++  dbus_error_init (&error);
++  if (!dbus_message_get_args(msg, &error,
++                             DBUS_TYPE_STRING, &udi,
++                             DBUS_TYPE_INVALID)) {
++    reply = dbus_message_new_error (msg, 
++                                     "org.freedesktop.HalRunner.Malformed", 
++                                     "Malformed kill message");
++    g_assert(reply);
++    dbus_connection_send (con, reply, NULL);
++    dbus_message_unref(reply);
++    return;
++  }
++  run_kill_udi(udi);
++  /* always successfull */
++  reply = dbus_message_new_method_return(msg);
++  dbus_connection_send(con, reply, NULL);
++  dbus_message_unref(reply);
++}
++
++static DBusHandlerResult
++filter(DBusConnection *con, DBusMessage *msg, void *user_data) {
++  DBusMessage *reply;
++
++  if (dbus_message_is_method_call(msg,
++        "org.freedesktop.HalRunner", "Run")) {
++    handle_run(con, msg);
++    return DBUS_HANDLER_RESULT_HANDLED;
++  } else if (dbus_message_is_method_call(msg,
++              "org.freedesktop.HalRunner", "Start")) {
++    handle_start(con, msg);
++    return DBUS_HANDLER_RESULT_HANDLED;
++  } else if (dbus_message_is_method_call(msg,
++              "org.freedesktop.HalRunner", "Kill")) {
++    handle_kill(con, msg);
++    return DBUS_HANDLER_RESULT_HANDLED;
++  } else if (dbus_message_is_method_call(msg,
++              "org.freedesktop.HalRunner", "KillAll")) {
++    run_kill_all();
++    /* alwasy successfull */
++    reply = dbus_message_new_method_return(msg);
++    dbus_connection_send(con, reply, NULL);
++    dbus_message_unref(reply);
++    return DBUS_HANDLER_RESULT_HANDLED;
++  }
++  return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
++}
++
++int
++main(int argc, char **argv) {
++  DBusConnection *c;
++  DBusError error;
++  GMainLoop *loop;
++  char *dbus_address;
++
++  run_init();
++  dbus_error_init(&error);
++  dbus_address = getenv("HALD_RUNNER_DBUS_ADDRESS");
++  g_assert(dbus_address != NULL);
++
++  c = dbus_connection_open(dbus_address, &error);
++  if (c == NULL) 
++    goto error;
++
++  loop = g_main_loop_new(NULL, FALSE);
++
++  dbus_connection_setup_with_g_main(c, NULL);
++  dbus_connection_set_exit_on_disconnect(c, TRUE);
++  dbus_connection_add_filter(c, filter, NULL, NULL);
++
++  g_main_loop_run(loop);
++
++  fprintf(stderr, "Should not be reached\n");
++  
++error:
++ fprintf(stderr,"An error has occured: %s\n", error.message);
++ return -1;
++}
+diff -ruN hal-0.5.6-old/hald-runner/runner.c hal-0.5.6/hald-runner/runner.c
+--- hal-0.5.6-old/hald-runner/runner.c	1970-01-01 01:00:00.000000000 +0100
++++ hal-0.5.6/hald-runner/runner.c	2006-01-17 22:24:03.000000000 +0100
+@@ -0,0 +1,307 @@
++#include <stdio.h>
++#include <unistd.h>
++#include <stdlib.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <sys/wait.h>
++#include <signal.h>
++#include <string.h>
++
++#define DBUS_API_SUBJECT_TO_CHANGE 
++#include <dbus/dbus-glib-lowlevel.h>
++
++#include <glib.h>
++#include "utils.h"
++#include "runner.h"
++
++/* Successful run of the program */
++#define HALD_RUN_SUCCESS 0x0 
++/* Process was killed because of running too long */
++#define  HALD_RUN_TIMEOUT 0x1 
++/* Failed to start for some reason */
++#define HALD_RUN_FAILED 0x2
++/* Killed on purpose, e.g. hal_util_kill_device_helpers */   
++#define HALD_RUN_KILLED 0x4
++
++GHashTable *udi_hash = NULL;
++
++typedef struct {
++  run_request *r;
++  DBusMessage *msg;
++  DBusConnection *con;
++  GPid pid;
++  gint stderr_v;
++  guint watch;
++  guint timeout;
++  gboolean sent_kill;
++} run_data;
++
++static void
++del_run_data(run_data *rd) {
++  if (rd == NULL) 
++    return;
++
++  del_run_request(rd->r);
++  if (rd->msg) {
++    dbus_message_unref(rd->msg);
++  }
++  g_spawn_close_pid(rd->pid);
++
++  if (rd->stderr_v >= 0) {
++    close(rd->stderr_v);
++  }
++
++  if (rd->timeout != 0) {
++    g_source_remove(rd->timeout);
++  }
++  g_free(rd);
++}
++
++run_request *
++new_run_request(void) {
++  run_request *result;
++  result = g_new0(run_request, 1);
++  g_assert(result != NULL);
++  return result;
++}
++
++void
++del_run_request(run_request *r) {
++  if (r == NULL) 
++    return;
++  g_free(r->udi);
++  free_string_array(r->environment);
++  free_string_array(r->argv);
++  g_free(r->input);
++  g_free(r);
++}
++
++static void
++send_reply(DBusConnection *con, DBusMessage *msg, 
++           guint32 exit_type, gint32 return_code, gchar **error) {
++  DBusMessage *reply;
++  DBusMessageIter iter;
++  int i;
++
++  reply = dbus_message_new_method_return(msg);
++  g_assert(reply != NULL);
++
++  dbus_message_iter_init_append(reply, &iter);
++  dbus_message_iter_append_basic(&iter, DBUS_TYPE_UINT32, &exit_type);
++  dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &return_code);
++  if (error != NULL) for (i = 0; error[i] != NULL; i++) {
++    dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &error[i]);
++  }
++
++  dbus_connection_send(con, reply, NULL);
++  dbus_message_unref(reply);
++}
++
++static void
++remove_from_hash_table(run_data *rd) {
++  GList *list;
++  /* Remove to the hashtable */
++  list = (GList *)g_hash_table_lookup(udi_hash, rd->r->udi);
++  list = g_list_remove(list, rd);
++  /* The hash table will take care to not leak the dupped string */
++  g_hash_table_insert(udi_hash, g_strdup(rd->r->udi), list);
++}
++
++static void
++run_exited(GPid pid, gint status, gpointer data) {
++  run_data *rd = (run_data *)data;
++  char **error = NULL;
++
++  printf("%s exited\n", rd->r->argv[0]);
++  rd->watch = 0;
++  if (rd->sent_kill == TRUE) {
++    /* We send it a kill, so ignore */
++    del_run_data(rd);
++    return;
++  }
++  /* Check if it was a normal exit */
++  if (!WIFEXITED(status)) {
++    /* No not normal termination ? crash ? */
++    send_reply(rd->con, rd->msg, HALD_RUN_FAILED, 0, NULL);
++    remove_from_hash_table(rd);
++    del_run_data(rd);
++    return;
++  }
++  /* normal exit */
++  if (rd->stderr_v >= 0) {
++    /* Need to read stderr */
++    error = get_string_array_from_fd(rd->stderr_v);
++    rd->stderr_v = -1;
++  }
++  if (rd->msg != NULL) {
++    send_reply(rd->con, rd->msg, HALD_RUN_SUCCESS, WEXITSTATUS(status), error);
++  }
++  free_string_array(error);
++
++  remove_from_hash_table(rd);
++  del_run_data(rd);
++}
++
++static gboolean
++run_timedout(gpointer data) {
++  run_data *rd = (run_data *)data;
++  /* Time is up, kill the process, send reply that it was killed! 
++   * Don't wait for exit, because it could hang in state D
++   */ 
++  kill(rd->pid, SIGTERM);
++  /* Ensure the timeout is not removed in the delete */
++  rd->timeout = 0;
++  /* So the exit watch will know it's killed  in case it runs*/
++  rd->sent_kill = TRUE;
++
++  send_reply(rd->con, rd->msg, HALD_RUN_TIMEOUT, 0, NULL);
++  remove_from_hash_table(rd);
++  return FALSE;
++}
++
++static
++gboolean find_program(char **argv) {
++  /* Search for the program in the dirs where it's allowed to be */
++  char *dirs[] = { PACKAGE_LIBEXEC_DIR, PACKAGE_SCRIPT_DIR, NULL };
++  char *program;
++  char *path = NULL;
++  struct stat buf;
++  int i;
++
++  if (argv[0] == NULL) 
++    return FALSE;
++  program = g_path_get_basename(argv[0]);
++  for (i = 0; dirs[i] != NULL; i++) {
++    path = g_build_filename(dirs[i], program, NULL);
++    if (stat(path, &buf) == 0) {
++        break;
++    }
++    g_free(path);
++    path = NULL;
++  }
++  g_free(program);
++  if (path == NULL) 
++    return FALSE;
++  else {
++    /* Replace program in argv[0] with the full path */
++    g_free(argv[0]);
++    argv[0] = path;
++  }
++  return TRUE;
++}
++
++
++/* Run the given request and reply it's result on msg */
++gboolean 
++run_request_run(run_request *r, DBusConnection *con, DBusMessage *msg) {
++  GPid pid;
++  GError *error = NULL;
++  gint *stdin_p = NULL;
++  gint *stderr_p = NULL;
++  gint stdin_v;
++  gint stderr_v = -1;
++  run_data *rd = NULL;
++  GList *list;
++
++  printf("Run started %s (%d)\n!", r->argv[0], r->timeout);
++  if (r->input != NULL) {
++    stdin_p = &stdin_v; 
++  }
++  if (r->error_on_stderr) {
++    stderr_p = &stderr_v;
++  }
++
++  if (!find_program(r->argv) ||
++      !g_spawn_async_with_pipes("/", r->argv, r->environment, 
++                                G_SPAWN_DO_NOT_REAP_CHILD,
++                                NULL, NULL, &pid, 
++                                stdin_p, NULL, stderr_p, &error)) {
++    del_run_request(r);
++    if (con && msg) {
++      send_reply(con, msg, HALD_RUN_FAILED, 0, NULL);
++    }
++    return FALSE;
++  }
++
++  if (r->input) {
++    write(stdin_v, r->input, strlen(r->input));
++    close(stdin_v);
++  }
++
++  rd = g_new0(run_data,1);
++  g_assert(rd != NULL);
++  rd->r = r;
++  rd->msg = msg;
++  if (msg != NULL) {
++    dbus_message_ref(msg);
++  }
++  rd->con = con;
++  rd->pid = pid;
++  rd->stderr_v = stderr_v;
++  rd->sent_kill = FALSE;
++
++  /* Add watch for exit of the program */
++  rd->watch = g_child_watch_add(pid, run_exited, rd);
++  /* Add timeout if needed */
++  if (r->timeout > 0) {
++    rd->timeout = g_timeout_add(r->timeout, run_timedout, rd);
++  } else {
++    rd->timeout = 0;
++  }
++  /* Add to the hashtable */
++  list = (GList *)g_hash_table_lookup(udi_hash, r->udi);
++  list = g_list_prepend(list, rd);
++  /* The hash table will take care to not leak the dupped string */
++  g_hash_table_insert(udi_hash, g_strdup(r->udi), list);
++  return TRUE;
++}
++
++static void
++kill_rd(gpointer data, gpointer user_data) {
++  run_data *rd = (run_data *)data;
++
++  kill(rd->pid, SIGTERM);
++  printf("Sent kill to %d\n", rd->pid);
++  if (rd->timeout != 0) {
++    /* Remove the timeout watch */
++    g_source_remove(rd->timeout);
++    rd->timeout = 0;
++  }
++  /* So the exit watch will know it's killed  in case it runs*/
++  rd->sent_kill = TRUE;
++
++  if (rd->msg != NULL) {
++    send_reply(rd->con, rd->msg, HALD_RUN_KILLED, 0, NULL);
++  }
++}
++
++static void
++do_kill_udi(gchar *udi) {
++  GList *list;
++  list = (GList *)g_hash_table_lookup(udi_hash, udi);
++  g_list_foreach(list, kill_rd, NULL);
++  g_list_free(list);
++}
++
++/* Kill all running request for a udi */
++void 
++run_kill_udi(gchar *udi) {
++  do_kill_udi(udi);
++  g_hash_table_remove(udi_hash, udi);
++}
++
++static void
++hash_kill_udi(gpointer key, gpointer value, gpointer user_data) {
++  do_kill_udi(key);
++}
++
++/* Kill all running request*/
++void 
++run_kill_all() {
++  g_hash_table_foreach_remove(udi_hash, hash_kill_udi, NULL);
++}
++
++void
++run_init() {
++  udi_hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
++}
+diff -ruN hal-0.5.6-old/hald-runner/runner.h hal-0.5.6/hald-runner/runner.h
+--- hal-0.5.6-old/hald-runner/runner.h	1970-01-01 01:00:00.000000000 +0100
++++ hal-0.5.6/hald-runner/runner.h	2006-01-17 22:24:03.000000000 +0100
+@@ -0,0 +1,32 @@
++#ifndef RUNNER_H
++#define RUNNER_H
++
++#define DBUS_API_SUBJECT_TO_CHANGE 
++#include <dbus/dbus-glib-lowlevel.h>
++
++#include <glib.h>
++
++typedef struct {
++  gchar *udi;
++  gchar **environment;
++  gchar **argv;
++  gchar *input;
++  gboolean error_on_stderr;
++  guint32 timeout;
++} run_request;
++
++run_request *new_run_request(void);
++void del_run_request(run_request *r);
++
++/* Run the given request and reply it's result on msg */
++gboolean run_request_run(run_request *r, DBusConnection *con, DBusMessage *msg);
++
++/* Kill all running request for a udi */
++void run_kill_udi(gchar *udi);
++
++/* Kill all running request*/
++void run_kill_all();
++
++/* initialise the actual runner data */
++void run_init();
++#endif /*  RUNNER_H */
+diff -ruN hal-0.5.6-old/hald-runner/utils.c hal-0.5.6/hald-runner/utils.c
+--- hal-0.5.6-old/hald-runner/utils.c	1970-01-01 01:00:00.000000000 +0100
++++ hal-0.5.6/hald-runner/utils.c	2006-01-17 22:24:03.000000000 +0100
+@@ -0,0 +1,62 @@
++#include <stdio.h>
++#include <stdlib.h>
++#define DBUS_API_SUBJECT_TO_CHANGE 
++#include <dbus/dbus-glib-lowlevel.h>
++#include <glib.h>
++
++#include "utils.h"
++
++char **
++get_string_array(DBusMessageIter *iter) {
++  GArray *array;
++  char **result;
++  array = g_array_new(TRUE, FALSE, sizeof(char *));
++
++  while (dbus_message_iter_get_arg_type(iter) == DBUS_TYPE_STRING) {
++    const char *value;
++    char *t;
++    dbus_message_iter_get_basic(iter, &value);
++    t = g_strdup(value);
++    g_array_append_vals(array, &t, 1);
++    dbus_message_iter_next(iter);
++  }
++  result = (char **) array->data;
++  g_array_free(array, FALSE);
++  return result;
++}
++
++char **
++get_string_array_from_fd(int fd) {
++  GArray *array;
++  char **result;
++  GString *str;
++  gsize pos;
++  GIOChannel *io;
++  int i = 0;
++
++  array = g_array_new(TRUE, FALSE, sizeof(char *));
++  str = g_string_new("");
++  io = g_io_channel_unix_new(fd);
++  while (g_io_channel_read_line_string(io, str, &pos, NULL) 
++          == G_IO_STATUS_NORMAL && (i++ < 128)) {
++    char *t;
++    /* Remove the terminting char aka \n*/
++    g_string_erase(str, pos, 1);
++    t = g_strdup(str->str);
++    g_array_append_vals(array, &t, 1);
++  }
++  g_string_free(str, TRUE);
++  g_io_channel_unref(io);
++  result = (char **) array->data;
++  g_array_free(array, FALSE);
++  return result;
++}
++
++void 
++free_string_array(char **array) {
++  char **p;
++  for (p = array; p != NULL && *p != NULL; p++) {
++    g_free(*p);
++  }
++  g_free(array);
++}
+diff -ruN hal-0.5.6-old/hald-runner/utils.h hal-0.5.6/hald-runner/utils.h
+--- hal-0.5.6-old/hald-runner/utils.h	1970-01-01 01:00:00.000000000 +0100
++++ hal-0.5.6/hald-runner/utils.h	2006-01-17 22:24:03.000000000 +0100
+@@ -0,0 +1,11 @@
++#ifndef UTILS_H
++#define UTILS_H
++
++#define DBUS_API_SUBJECT_TO_CHANGE 
++#include <dbus/dbus-glib-lowlevel.h>
++
++char **get_string_array(DBusMessageIter *iter);
++char **get_string_array_from_fd(int fd);
++void free_string_array(char **array);
++
++#endif /*  UTILS_H */

Modified: packages/experimental/hal/debian/rules
===================================================================
--- packages/experimental/hal/debian/rules	2006-01-19 21:18:50 UTC (rev 505)
+++ packages/experimental/hal/debian/rules	2006-01-19 22:01:04 UTC (rev 506)
@@ -14,7 +14,7 @@
                              --enable-hotplug-map  \
                              --with-pid-file=/var/run/hal/hald.pid \
                              --enable-pcmcia-support \
-                             --with-hwdata=/var/lib/misc
+                             --with-hwdata=/usr/share/misc
 
 binary-predeb/hal-device-manager::
 	dh_python -phal-device-manager
@@ -25,9 +25,6 @@
 	install -m 755 debian/hal.init.dbus \
 		$(DEB_DESTDIR)/etc/dbus-1/event.d/20hal
 	
-	# helper scripts and settings for when running with dropped priviledges
-	install -m 755 -D debian/hal.udev.device-removable.sh \
-		$(DEB_DESTDIR)/etc/udev/scripts/device-removable.sh
 	install -m 644 -D debian/hal.udev.rules \
 		$(DEB_DESTDIR)/etc/udev/hal.rules
 	install -m 755 -D debian/hal-unmount.sh \
@@ -36,3 +33,4 @@
 	# Don't put links in /etc/dev.d and /etc/hotplug.d
 	rm -rf $(DEB_DESTDIR)/etc/hotplug.d
 	rm -rf $(DEB_DESTDIR)/etc/dev.d
+	rm -rf $(DEB_DESTDIR)/usr/lib/hal/hal.hotplug




More information about the Pkg-utopia-commits mailing list