diff options
| -rw-r--r-- | ChangeLog | 12 | ||||
| -rw-r--r-- | dbus/dbus-sysdeps-unix.c | 65 | ||||
| -rw-r--r-- | dbus/dbus-sysdeps.h | 8 | 
3 files changed, 58 insertions, 27 deletions
| @@ -1,5 +1,17 @@  2006-09-16  Havoc Pennington  <hp@redhat.com> +	* dbus/dbus-sysdeps-unix.c (_dbus_open_tcp_socket)  +	(_dbus_open_unix_socket, _dbus_open_socket): change API for  +	_dbus_open_socket so the domain/type/protocol from system headers +	are not required. This is kind of pointless though unless we move +	part of _dbus_connect_tcp_socket into sysdeps.c instead of +	sysdeps-unix.c, which would mean adding a wrapper around +	bind/listen/etc. +	Also, add DBusError to the socket-opening functions so they  +	don't require use of errno. + +2006-09-16  Havoc Pennington  <hp@redhat.com> +  	* dbus/dbus-sysdeps-unix.h: small change to Peter's patch to make  	dbus-sysdeps-unix-util.c build, add unix-specific sysdeps header. diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c index 1ce928af..38adebb1 100644 --- a/dbus/dbus-sysdeps-unix.c +++ b/dbus/dbus-sysdeps-unix.c @@ -77,14 +77,40 @@   * @{   */ -dbus_bool_t +static dbus_bool_t  _dbus_open_socket (int              *fd,                     int               domain,                     int               type, -                   int               protocol) +                   int               protocol, +                   DBusError        *error)  {    *fd = socket (domain, type, protocol); -  return fd >= 0; +  if (fd >= 0) +    { +      return TRUE; +    } +  else +    { +      dbus_set_error(error, +                     _dbus_error_from_errno (errno), +                     "Failed to open socket: %s", +                     _dbus_strerror (errno)); +      return FALSE; +    } +} + +dbus_bool_t +_dbus_open_tcp_socket (int              *fd, +                       DBusError        *error) +{ +  return _dbus_open_socket(fd, AF_INET, SOCK_STREAM, 0, error); +} + +dbus_bool_t +_dbus_open_unix_socket (int              *fd, +                        DBusError        *error) +{ +  return _dbus_open_socket(fd, PF_UNIX, SOCK_STREAM, 0, error);  }  dbus_bool_t  @@ -356,15 +382,12 @@ _dbus_connect_unix_socket (const char     *path,                   path, abstract); -  if (!_dbus_open_socket (&fd, PF_UNIX, SOCK_STREAM, 0)) +  if (!_dbus_open_unix_socket (&fd, error))      { -      dbus_set_error (error, -                      _dbus_error_from_errno (errno), -                      "Failed to create socket: %s", -                      _dbus_strerror (errno));  -       +      _DBUS_ASSERT_ERROR_IS_SET(error);        return -1;      } +  _DBUS_ASSERT_ERROR_IS_CLEAR(error);    _DBUS_ZERO (addr);    addr.sun_family = AF_UNIX; @@ -490,13 +513,12 @@ _dbus_listen_unix_socket (const char     *path,    _dbus_verbose ("listening on unix socket %s abstract=%d\n",                   path, abstract); -  if (!_dbus_open_socket (&listen_fd, PF_UNIX, SOCK_STREAM, 0)) +  if (!_dbus_open_unix_socket (&listen_fd, error))      { -      dbus_set_error (error, _dbus_error_from_errno (errno), -                      "Failed to create socket \"%s\": %s", -                      path, _dbus_strerror (errno)); +      _DBUS_ASSERT_ERROR_IS_SET(error);        return -1;      } +  _DBUS_ASSERT_ERROR_IS_CLEAR(error);    _DBUS_ZERO (addr);    addr.sun_family = AF_UNIX; @@ -626,16 +648,14 @@ _dbus_connect_tcp_socket (const char     *host,    _DBUS_ASSERT_ERROR_IS_CLEAR (error); -  if (!_dbus_open_socket (&fd, AF_INET, SOCK_STREAM, 0)) +  if (!_dbus_open_tcp_socket (&fd, error))      { -      dbus_set_error (error, -                      _dbus_error_from_errno (errno), -                      "Failed to create socket: %s", -                      _dbus_strerror (errno));  +      _DBUS_ASSERT_ERROR_IS_SET(error);        return -1;      } - +  _DBUS_ASSERT_ERROR_IS_CLEAR(error); +          if (host == NULL)      host = "localhost"; @@ -704,13 +724,12 @@ _dbus_listen_tcp_socket (const char     *host,    _DBUS_ASSERT_ERROR_IS_CLEAR (error); -  if (!_dbus_open_socket (&listen_fd, AF_INET, SOCK_STREAM, 0)) +  if (!_dbus_open_tcp_socket (&listen_fd, error))      { -      dbus_set_error (error, _dbus_error_from_errno (errno), -                      "Failed to create socket \"%s:%d\": %s", -                      host, port, _dbus_strerror (errno)); +      _DBUS_ASSERT_ERROR_IS_SET(error);        return -1;      } +  _DBUS_ASSERT_ERROR_IS_CLEAR(error);    he = gethostbyname (host);    if (he == NULL)  diff --git a/dbus/dbus-sysdeps.h b/dbus/dbus-sysdeps.h index 729f14d2..6e301976 100644 --- a/dbus/dbus-sysdeps.h +++ b/dbus/dbus-sysdeps.h @@ -98,10 +98,10 @@ typedef unsigned long dbus_gid_t;   *    */ -dbus_bool_t _dbus_open_socket      (int              *fd, -                                    int               domain,  -                                    int               type,  -                                    int               protocol); +dbus_bool_t _dbus_open_tcp_socket  (int              *fd, +                                    DBusError        *error); +dbus_bool_t _dbus_open_unix_socket (int              *fd, +                                    DBusError        *error);  dbus_bool_t _dbus_close_socket     (int               fd,                                      DBusError        *error);  int         _dbus_read_socket      (int               fd, | 
