_dbus_server_new_for_socket: raise a DBusError
authorSimon McVittie <simon.mcvittie@collabora.co.uk>
Thu, 14 May 2015 11:17:10 +0000 (12:17 +0100)
committerSimon McVittie <simon.mcvittie@collabora.co.uk>
Thu, 14 May 2015 13:30:30 +0000 (14:30 +0100)
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>
dbus/dbus-server-launchd.c
dbus/dbus-server-socket.c
dbus/dbus-server-socket.h
dbus/dbus-server-unix.c

index d9d5908..818ba8c 100644 (file)
@@ -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;
       }
 
index 92788e7..cf28b7c 100644 (file)
@@ -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
index cdb6284..1a589f7 100644 (file)
@@ -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
index 0f67de3..5474177 100644 (file)
@@ -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;
     }