From f180a839727981c8896056a35df17768d54eada6 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Thu, 14 May 2015 12:17:10 +0100 Subject: [PATCH] _dbus_server_new_for_socket: raise a DBusError This can currently only fail due to OOM, but I'm about to make it possible to fail for other reasons. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=90414 Reviewed-by: Ralf Habacker [smcv: correct failure to set error in one case; document @error] Signed-off-by: Simon McVittie --- dbus/dbus-server-launchd.c | 4 +--- dbus/dbus-server-socket.c | 15 ++++++++++----- dbus/dbus-server-socket.h | 3 ++- dbus/dbus-server-unix.c | 8 ++++---- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/dbus/dbus-server-launchd.c b/dbus/dbus-server-launchd.c index d9d5908..818ba8c 100644 --- a/dbus/dbus-server-launchd.c +++ b/dbus/dbus-server-launchd.c @@ -185,11 +185,9 @@ _dbus_server_new_for_launchd (const char *launchd_env_var, DBusError * error) } - server = _dbus_server_new_for_socket (&launchd_fd, 1, &address, 0); + server = _dbus_server_new_for_socket (&launchd_fd, 1, &address, 0, error); if (server == NULL) { - dbus_set_error (error, DBUS_ERROR_NO_SERVER, - "Unable to listen on launchd fd %d.", launchd_fd); goto l_failed_0; } diff --git a/dbus/dbus-server-socket.c b/dbus/dbus-server-socket.c index 92788e7..cf28b7c 100644 --- a/dbus/dbus-server-socket.c +++ b/dbus/dbus-server-socket.c @@ -277,14 +277,16 @@ static const DBusServerVTable socket_vtable = { * @param n_fds number of file descriptors * @param address the server's address * @param noncefile to be used for authentication (NULL if not needed) - * @returns the new server, or #NULL if no memory. + * @param error location to store reason for failure + * @returns the new server, or #NULL on OOM or other error. * */ DBusServer* _dbus_server_new_for_socket (DBusSocket *fds, int n_fds, const DBusString *address, - DBusNonceFile *noncefile) + DBusNonceFile *noncefile, + DBusError *error) { DBusServerSocket *socket_server; DBusServer *server; @@ -292,7 +294,7 @@ _dbus_server_new_for_socket (DBusSocket *fds, socket_server = dbus_new0 (DBusServerSocket, 1); if (socket_server == NULL) - return NULL; + goto failed_0; socket_server->noncefile = noncefile; @@ -366,6 +368,10 @@ _dbus_server_new_for_socket (DBusSocket *fds, failed_0: dbus_free (socket_server); + + if (error != NULL && !dbus_error_is_set (error)) + _DBUS_SET_OOM (error); + return NULL; } @@ -478,10 +484,9 @@ _dbus_server_new_for_tcp_socket (const char *host, } - server = _dbus_server_new_for_socket (listen_fds, nlisten_fds, &address, noncefile); + server = _dbus_server_new_for_socket (listen_fds, nlisten_fds, &address, noncefile, error); if (server == NULL) { - dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); if (noncefile != NULL) goto failed_4; else diff --git a/dbus/dbus-server-socket.h b/dbus/dbus-server-socket.h index cdb6284..1a589f7 100644 --- a/dbus/dbus-server-socket.h +++ b/dbus/dbus-server-socket.h @@ -32,7 +32,8 @@ DBUS_BEGIN_DECLS DBusServer* _dbus_server_new_for_socket (DBusSocket *fds, int n_fds, const DBusString *address, - DBusNonceFile *noncefile); + DBusNonceFile *noncefile, + DBusError *error); DBusServer* _dbus_server_new_for_autolaunch (const DBusString *address, DBusError *error); DBUS_PRIVATE_EXPORT diff --git a/dbus/dbus-server-unix.c b/dbus/dbus-server-unix.c index 0f67de3..5474177 100644 --- a/dbus/dbus-server-unix.c +++ b/dbus/dbus-server-unix.c @@ -224,13 +224,14 @@ _dbus_server_listen_platform_specific (DBusAddressEntry *entry, goto systemd_err; } - *server_p = _dbus_server_new_for_socket (fds, n, &address, NULL); + *server_p = _dbus_server_new_for_socket (fds, n, &address, NULL, error); if (*server_p == NULL) - goto systemd_oom; + goto systemd_err; dbus_free (fds); return DBUS_SERVER_LISTEN_OK; + systemd_oom: _DBUS_SET_OOM (error); systemd_err: @@ -336,10 +337,9 @@ _dbus_server_new_for_domain_socket (const char *path, goto failed_1; } - server = _dbus_server_new_for_socket (&listen_fd, 1, &address, 0); + server = _dbus_server_new_for_socket (&listen_fd, 1, &address, 0, error); if (server == NULL) { - dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); goto failed_2; } -- 2.7.4