From 89ee9e6abf40b594c681479dfc4d18d892c93838 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Wed, 19 Feb 2003 16:23:41 +0000 Subject: 2003-02-19 Anders Carlsson * configure.in: Add check for nonposix getpwnam_r * dbus/dbus-mempool.c: (_dbus_mem_pool_new): Align the pool element size to a sizeof (void *) boundary. * dbus/dbus-sysdeps.c: (_dbus_setenv), (_dbus_connect_unix_socket), (_dbus_listen_unix_socket), (_dbus_credentials_from_username): General Solaris fixes. * test/data/valid-messages/simplest-manual.message: Explicitly state that we want little-endian packing. --- ChangeLog | 15 ++++++++ configure.in | 40 ++++++++++++++++++++- dbus/dbus-mempool.c | 13 ++++--- dbus/dbus-sysdeps.c | 44 ++++++++++++++++++++---- test/data/valid-messages/simplest-manual.message | 1 + 5 files changed, 101 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index e26ffc63..023b43d3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2003-02-19 Anders Carlsson + + * configure.in: + Add check for nonposix getpwnam_r + + * dbus/dbus-mempool.c: (_dbus_mem_pool_new): + Align the pool element size to a sizeof (void *) boundary. + + * dbus/dbus-sysdeps.c: (_dbus_setenv), (_dbus_connect_unix_socket), + (_dbus_listen_unix_socket), (_dbus_credentials_from_username): + General Solaris fixes. + + * test/data/valid-messages/simplest-manual.message: + Explicitly state that we want little-endian packing. + 2003-02-19 Mikael Hallendal * dbus/dbus-server.c (dbus_server_listen): Support tcp: addresses. diff --git a/configure.in b/configure.in index 557238bc..4b613e06 100644 --- a/configure.in +++ b/configure.in @@ -131,7 +131,45 @@ AC_CHECK_SIZEOF(__int64) ## byte order AC_C_BIGENDIAN -AC_CHECK_FUNCS(vsnprintf vasprintf getpwnam_r nanosleep usleep poll) +AC_CHECK_LIB(socket,socket) + +AC_CHECK_FUNCS(vsnprintf vasprintf nanosleep usleep poll setenv) + +AC_CACHE_CHECK([for posix getpwnam_r], + ac_cv_func_posix_getpwnam_r, + [AC_TRY_RUN([ +#include +#include +int main () { + char buffer[10000]; + struct passwd pwd, *pwptr = &pwd; + int error; + errno = 0; + error = getpwnam_r ("", &pwd, buffer, + sizeof (buffer), &pwptr); + return (error < 0 && errno == ENOSYS) + || error == ENOSYS; +} ], + [ac_cv_func_posix_getpwnam_r=yes], + [ac_cv_func_posix_getpwnam_r=no])]) +if test "$ac_cv_func_posix_getpwnam_r" = yes; then + AC_DEFINE(HAVE_POSIX_GETPWNAM_R,1, + [Have POSIX function getpwnam_r]) +else + AC_CACHE_CHECK([for nonposix getpwnam_r], + ac_cv_func_nonposix_getpwnam_r, + [AC_TRY_LINK([#include ], + [char buffer[10000]; + struct passwd pwd; + getpwnam_r ("", &pwd, buffer, + sizeof (buffer));], + [ac_cv_func_nonposix_getpwnam_r=yes], + [ac_cv_func_nonposix_getpwnam_r=no])]) + if test "$ac_cv_func_nonposix_getpwnam_r" = yes; then + AC_DEFINE(HAVE_NONPOSIX_GETPWNAM_R,1, + [Have non-POSIX function getpwnam_r]) + fi +fi dnl check for writev header and writev function so we're dnl good to go if HAVE_WRITEV gets defined. diff --git a/dbus/dbus-mempool.c b/dbus/dbus-mempool.c index 3b233dd1..0d62e62b 100644 --- a/dbus/dbus-mempool.c +++ b/dbus/dbus-mempool.c @@ -144,17 +144,20 @@ _dbus_mem_pool_new (int element_size, */ _dbus_assert (element_size >= (int) sizeof (void*)); _dbus_assert (element_size >= (int) sizeof (DBusFreedElement)); - - pool->element_size = element_size; + + /* align the element size to a pointer boundary so we won't get bus + * errors under other architectures. + */ + pool->element_size = _DBUS_ALIGN_VALUE (element_size, sizeof (void *)); + pool->zero_elements = zero_elements != FALSE; /* pick a size for the first block; it increases * for each block we need to allocate. This is * actually half the initial block size * since _dbus_mem_pool_alloc() unconditionally - * doubles it prior to creating a new block. - */ - pool->block_size = element_size * 8; + * doubles it prior to creating a new block. */ + pool->block_size = pool->element_size * 8; _dbus_assert ((pool->block_size % pool->element_size) == 0); diff --git a/dbus/dbus-sysdeps.c b/dbus/dbus-sysdeps.c index bf4793eb..f470c4b8 100644 --- a/dbus/dbus-sysdeps.c +++ b/dbus/dbus-sysdeps.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -54,6 +55,12 @@ #define O_BINARY 0 #endif +#ifndef SUN_LEN +/* This system is not POSIX.1g. */ +#define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) \ + + strlen ((ptr)->sun_path)) +#endif + /** * @addtogroup DBusInternalsUtils * @{ @@ -78,7 +85,28 @@ _dbus_abort (void) dbus_bool_t _dbus_setenv (const char *varname, const char *value) { +#ifdef HAVE_SETENV return (setenv (varname, value, TRUE) == 0); +#else + DBusString str; + char *putenv_value; + + if (!_dbus_string_init (&str, _DBUS_INT_MAX)) + return FALSE; + + if (!_dbus_string_append (&str, varname) || + !_dbus_string_append (&str, "=") || + !_dbus_string_append (&str, value) || + !_dbus_string_steal_data (&str, &putenv_value)) + { + _dbus_string_free (&str); + return FALSE; + } + + _dbus_string_free (&str); + + return (putenv (putenv_value) == 0); +#endif } /** @@ -295,7 +323,7 @@ _dbus_connect_unix_socket (const char *path, int fd; struct sockaddr_un addr; - fd = socket (AF_LOCAL, SOCK_STREAM, 0); + fd = socket (PF_UNIX, SOCK_STREAM, 0); if (fd < 0) { @@ -309,7 +337,7 @@ _dbus_connect_unix_socket (const char *path, } _DBUS_ZERO (addr); - addr.sun_family = AF_LOCAL; + addr.sun_family = AF_UNIX; strncpy (addr.sun_path, path, _DBUS_MAX_SUN_PATH_LENGTH); addr.sun_path[_DBUS_MAX_SUN_PATH_LENGTH] = '\0'; @@ -354,7 +382,7 @@ _dbus_listen_unix_socket (const char *path, int listen_fd; struct sockaddr_un addr; - listen_fd = socket (AF_LOCAL, SOCK_STREAM, 0); + listen_fd = socket (PF_UNIX, SOCK_STREAM, 0); if (listen_fd < 0) { @@ -365,7 +393,7 @@ _dbus_listen_unix_socket (const char *path, } _DBUS_ZERO (addr); - addr.sun_family = AF_LOCAL; + addr.sun_family = AF_UNIX; strncpy (addr.sun_path, path, _DBUS_MAX_SUN_PATH_LENGTH); addr.sun_path[_DBUS_MAX_SUN_PATH_LENGTH] = '\0'; @@ -973,7 +1001,7 @@ _dbus_credentials_from_username (const DBusString *username, _dbus_string_get_const_data (username, &username_c_str); -#ifdef HAVE_GETPWNAM_R +#if defined (HAVE_POSIX_GETPWNAME_R) || defined (HAVE_NONPOSIX_GETPWNAME_R) { struct passwd *p; int result; @@ -981,9 +1009,13 @@ _dbus_credentials_from_username (const DBusString *username, struct passwd p_str; p = NULL; +#ifdef HAVE_POSIX_GETPWNAME_R result = getpwnam_r (username_c_str, &p_str, buf, sizeof (buf), &p); - +#else + p = getpwnam_r (username_c_str, &p_str, buf, sizeof (buf)); + result = 0; +#endif if (result == 0 && p == &p_str) { credentials->uid = p->pw_uid; diff --git a/test/data/valid-messages/simplest-manual.message b/test/data/valid-messages/simplest-manual.message index 11dce5cc..3f002ed1 100644 --- a/test/data/valid-messages/simplest-manual.message +++ b/test/data/valid-messages/simplest-manual.message @@ -1,6 +1,7 @@ ## like simplest.message, but doesn't use VALID_HEADER ## convenience command. mostly to test the test framework. +LITTLE_ENDIAN BYTE 'l' BYTE 0 BYTE 0 -- cgit