diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2015-05-14 12:17:54 +0100 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2015-05-14 14:30:30 +0100 |
commit | 49646211f3c8dcdc3728f4059c61c05ef4df857c (patch) | |
tree | f6e66a427de201d71776113eb5c1ea6b48eace77 | |
parent | f180a839727981c8896056a35df17768d54eada6 (diff) | |
download | dbus-49646211f3c8dcdc3728f4059c61c05ef4df857c.tar.gz |
_dbus_server_init_base: raise a DBusError
This can currently only fail from OOM, but I'm about to make
it possible to fail from insufficient entropy.
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=90414
Reviewed-by: Ralf Habacker <ralf.habacker@freenet.de>
[smcv: document @error]
Signed-off-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
-rw-r--r-- | dbus/dbus-server-debug-pipe.c | 10 | ||||
-rw-r--r-- | dbus/dbus-server-protected.h | 3 | ||||
-rw-r--r-- | dbus/dbus-server-socket.c | 3 | ||||
-rw-r--r-- | dbus/dbus-server.c | 22 |
4 files changed, 24 insertions, 14 deletions
diff --git a/dbus/dbus-server-debug-pipe.c b/dbus/dbus-server-debug-pipe.c index a7abe058..ca0be876 100644 --- a/dbus/dbus-server-debug-pipe.c +++ b/dbus/dbus-server-debug-pipe.c @@ -166,8 +166,9 @@ _dbus_server_debug_pipe_new (const char *server_name, goto nomem_2; if (!_dbus_server_init_base (&debug_server->base, - &debug_vtable, &address)) - goto nomem_3; + &debug_vtable, &address, + error)) + goto fail_3; if (!_dbus_hash_table_insert_string (server_pipe_hash, debug_server->name, @@ -183,7 +184,7 @@ _dbus_server_debug_pipe_new (const char *server_name, nomem_4: _dbus_server_finalize_base (&debug_server->base); - nomem_3: + fail_3: dbus_free (debug_server->name); nomem_2: _dbus_string_free (&address); @@ -191,7 +192,8 @@ _dbus_server_debug_pipe_new (const char *server_name, dbus_free (debug_server); nomem_0: pipe_hash_unref (); - dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); + if (error != NULL && !dbus_error_is_set (error)) + _DBUS_SET_OOM (error); return NULL; } diff --git a/dbus/dbus-server-protected.h b/dbus/dbus-server-protected.h index 44f53eeb..f613bf34 100644 --- a/dbus/dbus-server-protected.h +++ b/dbus/dbus-server-protected.h @@ -93,7 +93,8 @@ struct DBusServer dbus_bool_t _dbus_server_init_base (DBusServer *server, const DBusServerVTable *vtable, - const DBusString *address); + const DBusString *address, + DBusError *error); void _dbus_server_finalize_base (DBusServer *server); dbus_bool_t _dbus_server_add_watch (DBusServer *server, DBusWatch *watch); diff --git a/dbus/dbus-server-socket.c b/dbus/dbus-server-socket.c index cf28b7cc..d716f500 100644 --- a/dbus/dbus-server-socket.c +++ b/dbus/dbus-server-socket.c @@ -324,7 +324,8 @@ _dbus_server_new_for_socket (DBusSocket *fds, } if (!_dbus_server_init_base (&socket_server->base, - &socket_vtable, address)) + &socket_vtable, address, + error)) goto failed_2; server = (DBusServer*)socket_server; diff --git a/dbus/dbus-server.c b/dbus/dbus-server.c index 7b810792..42891bde 100644 --- a/dbus/dbus-server.c +++ b/dbus/dbus-server.c @@ -105,12 +105,14 @@ copy_address_with_guid_appended (const DBusString *address, * @param server the server. * @param vtable the vtable for the subclass. * @param address the server's address + * @param error location to store reason for failure * @returns #TRUE on success. */ dbus_bool_t _dbus_server_init_base (DBusServer *server, const DBusServerVTable *vtable, - const DBusString *address) + const DBusString *address, + DBusError *error) { server->vtable = vtable; @@ -130,29 +132,32 @@ _dbus_server_init_base (DBusServer *server, server->published_address = FALSE; if (!_dbus_string_init (&server->guid_hex)) - return FALSE; + { + _DBUS_SET_OOM (error); + return FALSE; + } _dbus_generate_uuid (&server->guid); if (!_dbus_uuid_encode (&server->guid, &server->guid_hex)) - goto failed; + goto oom; server->address = copy_address_with_guid_appended (address, &server->guid_hex); if (server->address == NULL) - goto failed; + goto oom; _dbus_rmutex_new_at_location (&server->mutex); if (server->mutex == NULL) - goto failed; + goto oom; server->watches = _dbus_watch_list_new (); if (server->watches == NULL) - goto failed; + goto oom; server->timeouts = _dbus_timeout_list_new (); if (server->timeouts == NULL) - goto failed; + goto oom; _dbus_data_slot_list_init (&server->slot_list); @@ -160,7 +165,8 @@ _dbus_server_init_base (DBusServer *server, return TRUE; - failed: + oom: + _DBUS_SET_OOM (error); _dbus_rmutex_free_at_location (&server->mutex); server->mutex = NULL; if (server->watches) |