diff options
| author | Marcel Holtmann <marcel@holtmann.org> | 2006-11-17 23:39:20 +0000 | 
|---|---|---|
| committer | Marcel Holtmann <marcel@holtmann.org> | 2006-11-17 23:39:20 +0000 | 
| commit | b8e61e63c24124da88e21e08668fa95fde346b4c (patch) | |
| tree | db217e8a3b7f57492bcbdc35f1b0ff6cdc319ae4 /daemon/main.c | |
| parent | 258fbc778115d19957162078ff2a3504b8551211 (diff) | |
Create skeleton of new master daemon
Diffstat (limited to 'daemon/main.c')
| -rw-r--r-- | daemon/main.c | 83 | 
1 files changed, 83 insertions, 0 deletions
| diff --git a/daemon/main.c b/daemon/main.c index 6432dd9b..a534cdb0 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -27,13 +27,96 @@  #include <stdio.h>  #include <errno.h> +#include <unistd.h> +#include <stdlib.h> +#include <signal.h> +#include <getopt.h> +#include <sys/stat.h>  #include <dbus/dbus.h> +#include "glib-ectomy.h" +#include "logging.h" +  #include "hcid.h"  #include "sdpd.h" +static GMainLoop *event_loop; + +static void sig_term(int sig) +{ +	g_main_quit(event_loop); +} + +static void sig_hup(int sig) +{ +} + +static void usage(void) +{ +	printf("bluetoothd - Bluetooth daemon ver %s\n\n", VERSION); +	printf("Usage:\n\tbluetoothd [-n]\n"); +} + +static struct option main_options[] = { +	{ "help",	0, 0, 'h' }, +	{ "nodaemon",	0, 0, 'n' }, +	{ 0, 0, 0, 0} +}; +  int main(int argc, char *argv[])  { +	struct sigaction sa; +	int opt, daemonize = 1; + +	while ((opt = getopt_long(argc, argv, "nh", main_options, NULL)) != -1) { +		switch (opt) { +		case 'n': +			daemonize = 0; +			break; + +		case 'h': +			usage(); +			exit(0); + +		default: +			usage(); +			exit(1); +		} +	} + +	if (daemonize && daemon(0, 0)) { +		error("Daemon startup failed: %s (%d)", strerror(errno), errno); +		exit(1); +	} + +	umask(0077); + +	start_logging("bluetoothd", "Bluetooth 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_hup; +	sigaction(SIGHUP, &sa, NULL); + +	sa.sa_handler = SIG_IGN; +	sigaction(SIGCHLD, &sa, NULL); +	sigaction(SIGPIPE, &sa, NULL); + +	enable_debug(); + +	event_loop = g_main_new(FALSE); + +	g_main_run(event_loop); + +	g_main_unref(event_loop); + +	info("Exit"); + +	stop_logging(); +  	return 0;  } | 
