X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bus%2Fmain.c;h=960a9c7e184eabb01ca0b7e445d829fffecda1c7;hb=3428a70ec49b9657651ad74f372912f7aa4d6b09;hp=e879ff86deac64e98b3240d6cca3de4ea572a8f7;hpb=82495f4b4077b8bb60a9d0d23b13bbe54e79dae0;p=platform%2Fupstream%2Fdbus.git diff --git a/bus/main.c b/bus/main.c index e879ff8..960a9c7 100644 --- a/bus/main.c +++ b/bus/main.c @@ -42,13 +42,14 @@ static BusContext *context; +#ifdef DBUS_UNIX + static int reload_pipe[2]; #define RELOAD_READ_END 0 #define RELOAD_WRITE_END 1 static void close_reload_pipe (DBusWatch **); -#ifdef DBUS_UNIX typedef enum { ACTION_RELOAD = 'r', @@ -60,10 +61,6 @@ signal_handler (int sig) { switch (sig) { -#ifdef DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX - case SIGIO: - /* explicit fall-through */ -#endif /* DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX */ #ifdef SIGHUP case SIGHUP: { @@ -90,7 +87,10 @@ signal_handler (int sig) static const char message[] = "Unable to write to reload pipe - buffer full?\n"; - write (STDERR_FILENO, message, strlen (message)); + if (write (STDERR_FILENO, message, strlen (message)) != strlen (message)) + { + /* ignore failure to write out a warning */ + } } } break; @@ -112,7 +112,10 @@ signal_handler (int sig) "Unable to write termination signal to pipe - buffer full?\n" "Will exit instead.\n"; - write (STDERR_FILENO, message, strlen (message)); + if (write (STDERR_FILENO, message, strlen (message)) != strlen (message)) + { + /* ignore failure to write out a warning */ + } _exit (1); } } @@ -124,7 +127,23 @@ signal_handler (int sig) static void usage (void) { - fprintf (stderr, DBUS_DAEMON_NAME " [--version] [--session] [--system] [--config-file=FILE] [--print-address[=DESCRIPTOR]] [--print-pid[=DESCRIPTOR]] [--fork] [--nofork] [--introspect] [--address=ADDRESS] [--systemd-activation]\n"); + fprintf (stderr, + DBUS_DAEMON_NAME + " [--version]" + " [--session]" + " [--system]" + " [--config-file=FILE]" + " [--print-address[=DESCRIPTOR]]" + " [--print-pid[=DESCRIPTOR]]" + " [--introspect]" + " [--address=ADDRESS]" + " [--nopidfile]" + " [--nofork]" +#ifdef DBUS_UNIX + " [--fork]" + " [--systemd-activation]" +#endif + "\n"); exit (1); } @@ -212,6 +231,7 @@ check_two_pid_descriptors (const DBusString *pid_fd, } } +#ifdef DBUS_UNIX static dbus_bool_t handle_reload_watch (DBusWatch *watch, unsigned int flags, @@ -337,6 +357,7 @@ close_reload_pipe (DBusWatch **watch) _dbus_close_socket (reload_pipe[RELOAD_WRITE_END], NULL); reload_pipe[RELOAD_WRITE_END] = -1; } +#endif /* DBUS_UNIX */ int main (int argc, char **argv) @@ -352,8 +373,7 @@ main (int argc, char **argv) int i; dbus_bool_t print_address; dbus_bool_t print_pid; - int force_fork; - dbus_bool_t systemd_activation; + BusContextFlags flags; if (!_dbus_string_init (&config_file)) return 1; @@ -369,8 +389,8 @@ main (int argc, char **argv) print_address = FALSE; print_pid = FALSE; - force_fork = FORK_FOLLOW_CONFIG_FILE; - systemd_activation = FALSE; + + flags = BUS_CONTEXT_FLAG_WRITE_PID_FILE; prev_arg = NULL; i = 1; @@ -381,17 +401,37 @@ main (int argc, char **argv) if (strcmp (arg, "--help") == 0 || strcmp (arg, "-h") == 0 || strcmp (arg, "-?") == 0) - usage (); + { + usage (); + } else if (strcmp (arg, "--version") == 0) - version (); + { + version (); + } else if (strcmp (arg, "--introspect") == 0) - introspect (); + { + introspect (); + } else if (strcmp (arg, "--nofork") == 0) - force_fork = FORK_NEVER; + { + flags &= ~BUS_CONTEXT_FLAG_FORK_ALWAYS; + flags |= BUS_CONTEXT_FLAG_FORK_NEVER; + } +#ifdef DBUS_UNIX else if (strcmp (arg, "--fork") == 0) - force_fork = FORK_ALWAYS; + { + flags &= ~BUS_CONTEXT_FLAG_FORK_NEVER; + flags |= BUS_CONTEXT_FLAG_FORK_ALWAYS; + } else if (strcmp (arg, "--systemd-activation") == 0) - systemd_activation = TRUE; + { + flags |= BUS_CONTEXT_FLAG_SYSTEMD_ACTIVATION; + } +#endif + else if (strcmp (arg, "--nopidfile") == 0) + { + flags &= ~BUS_CONTEXT_FLAG_WRITE_PID_FILE; + } else if (strcmp (arg, "--system") == 0) { check_two_config_files (&config_file, "system"); @@ -427,7 +467,9 @@ main (int argc, char **argv) exit (1); } else if (strcmp (arg, "--config-file") == 0) - ; /* wait for next arg */ + { + /* wait for next arg */ + } else if (strstr (arg, "--address=") == arg) { const char *file; @@ -449,7 +491,9 @@ main (int argc, char **argv) exit (1); } else if (strcmp (arg, "--address") == 0) - ; /* wait for next arg */ + { + /* wait for next arg */ + } else if (strstr (arg, "--print-address=") == arg) { const char *desc; @@ -475,7 +519,9 @@ main (int argc, char **argv) print_address = TRUE; } else if (strcmp (arg, "--print-address") == 0) - print_address = TRUE; /* and we'll get the next arg if appropriate */ + { + print_address = TRUE; /* and we'll get the next arg if appropriate */ + } else if (strstr (arg, "--print-pid=") == arg) { const char *desc; @@ -501,9 +547,13 @@ main (int argc, char **argv) print_pid = TRUE; } else if (strcmp (arg, "--print-pid") == 0) - print_pid = TRUE; /* and we'll get the next arg if appropriate */ + { + print_pid = TRUE; /* and we'll get the next arg if appropriate */ + } else - usage (); + { + usage (); + } prev_arg = arg; @@ -567,10 +617,9 @@ main (int argc, char **argv) } dbus_error_init (&error); - context = bus_context_new (&config_file, force_fork, + context = bus_context_new (&config_file, flags, &print_addr_pipe, &print_pid_pipe, _dbus_string_get_length(&address) > 0 ? &address : NULL, - systemd_activation, &error); _dbus_string_free (&config_file); if (context == NULL) @@ -585,9 +634,9 @@ main (int argc, char **argv) * print_pid_pipe */ +#ifdef DBUS_UNIX setup_reload_pipe (bus_context_get_loop (context)); -#ifdef DBUS_UNIX /* POSIX signals are Unix-specific, and _dbus_set_signal_handler is * unimplemented (and probably unimplementable) on Windows, so there's * no point in trying to make the handler portable to non-Unix. */ @@ -596,11 +645,20 @@ main (int argc, char **argv) #ifdef SIGHUP _dbus_set_signal_handler (SIGHUP, signal_handler); #endif -#ifdef DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX - _dbus_set_signal_handler (SIGIO, signal_handler); -#endif /* DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX */ #endif /* DBUS_UNIX */ +#ifdef ENABLE_KDBUS_TRANSPORT + if (bus_context_get_systemd_activation(context) == TRUE) + { + if (strncmp(bus_context_get_address(context), "kdbus:", strlen("kdbus:")) == 0 && + !strcmp(bus_context_get_type(context), "system") && + getuid() == 0) + { + kill (1, SIGUSR1); + } + } +#endif + _dbus_verbose ("We are on D-Bus...\n"); _dbus_loop_run (bus_context_get_loop (context));