diff options
author | Johan Hedberg <johan.hedberg@nokia.com> | 2006-11-11 23:14:14 +0000 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@nokia.com> | 2006-11-11 23:14:14 +0000 |
commit | 3eb0a5cd951b680c89f92bce6dddce2da2539af0 (patch) | |
tree | a57f71cb98c018b4fc09c6f0ff019c7b740e3605 /input/main.c | |
parent | cd3839f1d911767db77d1383e2ac1b1df405bed2 (diff) |
Initial service skeleton for bt.inputd
Diffstat (limited to 'input/main.c')
-rw-r--r-- | input/main.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/input/main.c b/input/main.c index c04bb251..df3b5160 100644 --- a/input/main.c +++ b/input/main.c @@ -26,9 +26,78 @@ #endif #include <stdio.h> +#include <unistd.h> +#include <string.h> #include <errno.h> +#include <signal.h> +#include <getopt.h> +#include <dbus/dbus.h> + +#include "dbus.h" +#include "logging.h" +#include "glib-ectomy.h" + +#include "input-service.h" + +static GMainLoop *main_loop; + +static void usage(void) +{ + printf("bt.inputd - Bluetooth Input daemon ver %s\n", VERSION); + printf("Usage: \n"); + printf("\tbt.inputd [-n not_daemon]\n"); +} + +static void sig_term(int sig) +{ + g_main_quit(main_loop); +} int main(int argc, char *argv[]) { + struct sigaction sa; + int opt, daemonize = 1; + + while ((opt = getopt(argc, argv, "n")) != EOF) { + switch (opt) { + case 'n': + daemonize = 0; + break; + + default: + usage(); + exit(1); + } + } + + if (daemonize && daemon(0, 0)) { + error("Can't daemonize: %s (%d)", strerror(errno), errno); + exit(1); + } + + start_logging("bt.inputd", "Bluetooth Input daemon"); + + memset(&sa, 0, sizeof(sa)); + sa.sa_flags = SA_NOCLDSTOP; + sa.sa_handler = sig_term; + sigaction(SIGTERM, &sa, NULL); + sigaction(SIGINT, &sa, NULL); + + sa.sa_handler = SIG_IGN; + sigaction(SIGCHLD, &sa, NULL); + sigaction(SIGPIPE, &sa, NULL); + + enable_debug(); + + /* Create event loop */ + main_loop = g_main_new(FALSE); + + if (input_dbus_init() < 0) { + error("Unable to get on D-Bus"); + exit(1); + } + + g_main_run(main_loop); + return 0; } |