summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@codefactory.se>2003-02-19 16:23:41 +0000
committerAnders Carlsson <andersca@codefactory.se>2003-02-19 16:23:41 +0000
commit89ee9e6abf40b594c681479dfc4d18d892c93838 (patch)
tree368712eacf6904e71fa0da86674a557120190cac
parent90c4578863d9b42db9e27875dbd4135b9e2cd6c7 (diff)
2003-02-19 Anders Carlsson <andersca@codefactory.se>
* 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.
-rw-r--r--ChangeLog15
-rw-r--r--configure.in40
-rw-r--r--dbus/dbus-mempool.c13
-rw-r--r--dbus/dbus-sysdeps.c44
-rw-r--r--test/data/valid-messages/simplest-manual.message1
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 <andersca@codefactory.se>
+
+ * 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 <micke@codefactory.se>
* 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 <errno.h>
+#include <pwd.h>
+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 <pwd.h>],
+ [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 <sys/types.h>
#include <stdlib.h>
#include <string.h>
+#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
@@ -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