summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2015-05-14 12:17:10 +0100
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2015-05-14 14:30:30 +0100
commitf180a839727981c8896056a35df17768d54eada6 (patch)
tree9a0647ea61d31d7b92afcceb2354d1fc8e5ad625
parent084977cfe2cc232bc8b25fd7088a5a4f1a6a65d5 (diff)
downloaddbus-f180a839727981c8896056a35df17768d54eada6.tar.gz
_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 <ralf.habacker@freenet.de> [smcv: correct failure to set error in one case; document @error] Signed-off-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
-rw-r--r--dbus/dbus-server-launchd.c4
-rw-r--r--dbus/dbus-server-socket.c15
-rw-r--r--dbus/dbus-server-socket.h3
-rw-r--r--dbus/dbus-server-unix.c8
4 files changed, 17 insertions, 13 deletions
diff --git a/dbus/dbus-server-launchd.c b/dbus/dbus-server-launchd.c
index d9d5908c..818ba8cf 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 92788e73..cf28b7cc 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 cdb62840..1a589f7d 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 0f67de37..5474177a 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;
}