From f116b1282f8482dff6dc797f64270d95f79b53a3 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Sun, 16 Feb 2003 10:00:37 +0000 Subject: 2003-02-16 Anders Carlsson * bus/activation.c: (load_directory), (bus_activation_init), (bus_activation_activate_service): * bus/activation.h: * bus/driver.c: (bus_driver_handle_activate_service), (bus_driver_handle_message): More work on the activation handling. * dbus/dbus-errors.h: Add some error messages * dbus/dbus-message.c: (dbus_message_new_error_reply): * dbus/dbus-message.h: New function that creates an error message. * dbus/dbus-protocol.h: Add ACTIVATE_SERVER message. * dbus/dbus-server-unix.c: (unix_handle_watch), (_dbus_server_new_for_domain_socket): Call _dbus_fd_set_close_on_exec. * dbus/dbus-sysdeps.c: (make_pipe), (do_exec), (_dbus_spawn_async), (_dbus_disable_sigpipe), (_dbus_fd_set_close_on_exec): * dbus/dbus-sysdeps.h: Add _dbus_fd_set_close_on exec function. Also add function that checks that all open fds are set to close-on-exec and warns otherwise. * dbus/dbus-transport-unix.c: (_dbus_transport_new_for_domain_socket): Call _dbus_fd_set_close_on_exec. --- bus/activation.c | 63 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 30 deletions(-) (limited to 'bus/activation.c') diff --git a/bus/activation.c b/bus/activation.c index 7f7dd438..b4acd0f3 100644 --- a/bus/activation.c +++ b/bus/activation.c @@ -41,6 +41,12 @@ typedef struct char *exec; } BusActivationEntry; +static DBusHashTable *pending_activations = NULL; +typedef struct +{ + char *service; +} BusPendingActivation; + static void bus_activation_entry_free (BusActivationEntry *entry) { @@ -164,36 +170,6 @@ load_directory (const char *directory) bus_desktop_file_free (desktop_file); _dbus_string_free (&full_path); } - -#if 0 - while ((directory_entry = readdir (directory_handle))) - { - DBusString path, filename; - BusDesktopFile *desktop_file; - DBusError error; - const char *filename_c; - - - _dbus_string_init_const (&filename, directory_entry->d_name); - - - _dbus_string_get_const_data (&path, &filename_c); - - if (!desktop_file) - { - _dbus_verbose ("Could not load %s: %s\n", filename_c, - error.message); - dbus_error_free (&error); - _dbus_string_free (&path); - continue; - } - - if (!add_desktop_file_entry (desktop_file)) - { - _dbus_verbose ("Could not add %s to activation entry list.\n", filename_c); - } - } -#endif } @@ -214,3 +190,30 @@ bus_activation_init (const char **directories) i++; } } + +dbus_bool_t +bus_activation_activate_service (const char *service_name, + DBusError *error) +{ + BusActivationEntry *entry; + char *argv[2]; + + entry = _dbus_hash_table_lookup_string (activation_entries, service_name); + + if (!entry) + { + dbus_set_error (error, DBUS_ERROR_ACTIVATE_SERVICE_NOT_FOUND, + "The service %s was not found in the activation entry list", + service_name); + return FALSE; + } + + /* Now try to spawn the process */ + argv[0] = entry->exec; + argv[1] = NULL; + + if (!_dbus_spawn_async (argv, error)) + return FALSE; + + return TRUE; +} -- cgit