[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