#include <unistd.h>
#include <errno.h>
#include <ctype.h>
+#include <signal.h>
#include "udev.h"
#include "udev_version.h"
+#include "udev_dbus.h"
#include "namedev.h"
#include "udevdb.h"
#include "libsysfs/libsysfs.h"
char **main_argv;
char **main_envp;
+static void sig_handler(int signum)
+{
+ dbg("caught signal %d", signum);
+ switch (signum) {
+ case SIGINT:
+ case SIGTERM:
+ case SIGKILL:
+ sysbus_disconnect();
+ udevdb_exit();
+ exit(20 + signum);
+ break;
+ default:
+ dbg("unhandled signal");
+ }
+}
+
static inline char *get_action(void)
{
char *action;
char *devpath;
char *subsystem;
int retval = -EINVAL;
-
+
main_argv = argv;
main_envp = envp;
/* initialize our configuration */
udev_init_config();
+ /* connect to the system message bus */
+ sysbus_connect();
+
/* initialize udev database */
retval = udevdb_init(UDEVDB_DEFAULT);
if (retval != 0) {
dbg("unable to initialize database");
- goto exit;
+ goto exit_sysbus;
}
+ /* set up a default signal handler for now */
+ signal(SIGINT, sig_handler);
+ signal(SIGTERM, sig_handler);
+ signal(SIGKILL, sig_handler);
+
/* initialize the naming deamon */
namedev_init();
}
udevdb_exit();
-exit:
+exit_sysbus:
+ /* disconnect from the system message bus */
+ sysbus_disconnect();
+
+exit:
return retval;
}