summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-string.c
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2003-01-18 15:19:01 +0000
committerHavoc Pennington <hp@redhat.com>2003-01-18 15:19:01 +0000
commit650c2745b8e1065b957779e26413a5040fd97f30 (patch)
tree7d41cc1cbcf442c7267a56cc52f294089303ef05 /dbus/dbus-string.c
parent368e150afc8c71fd94f90643f7079d20cdc7f913 (diff)
2003-01-18 Havoc Pennington <hp@pobox.com>
* dbus/dbus-test.c: include config.h so that tests actually run * dbus/dbus-string.c: add assertions that stuff is 8-byte aligned, so the failure mode when that assumption fails will be plenty obvious.
Diffstat (limited to 'dbus/dbus-string.c')
-rw-r--r--dbus/dbus-string.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/dbus/dbus-string.c b/dbus/dbus-string.c
index c2f4150a..5a918617 100644
--- a/dbus/dbus-string.c
+++ b/dbus/dbus-string.c
@@ -124,6 +124,16 @@ typedef struct
* @{
*/
+/** Assert that the string's memory is 8-byte aligned.
+ *
+ * @todo Currently we just hope libc returns 8-byte aligned memory
+ * (which is true for GNU libc), but really we need to ensure it by
+ * allocating 8 extra bytes and keeping an "align_offset : 3" field
+ * in DBusString, or something along those lines.
+ */
+#define ASSERT_8_BYTE_ALIGNED(s) \
+ _dbus_assert (_DBUS_ALIGN_ADDRESS (((const DBusRealString*)s)->str, 8) == ((const DBusRealString*)s)->str)
+
/**
* Initializes a string. The maximum length may be _DBUS_INT_MAX for
* no maximum. The string starts life with zero length.
@@ -156,8 +166,8 @@ _dbus_string_init (DBusString *str,
real->str = dbus_malloc (INITIAL_ALLOC);
if (real->str == NULL)
- return FALSE;
-
+ return FALSE;
+
real->allocated = INITIAL_ALLOC;
real->len = 0;
real->str[real->len] = '\0';
@@ -167,6 +177,8 @@ _dbus_string_init (DBusString *str,
real->locked = FALSE;
real->invalid = FALSE;
+ ASSERT_8_BYTE_ALIGNED (str);
+
return TRUE;
}
@@ -196,6 +208,10 @@ _dbus_string_init_const (DBusString *str,
real->max_length = real->len;
real->constant = TRUE;
real->invalid = FALSE;
+
+ /* We don't require const strings to be 8-byte aligned as the
+ * memory is coming from elsewhere.
+ */
}
/**
@@ -248,6 +264,7 @@ _dbus_string_lock (DBusString *str)
{
real->str = new_str;
real->allocated = new_allocated;
+ ASSERT_8_BYTE_ALIGNED (str);
}
}
}
@@ -454,6 +471,8 @@ set_length (DBusRealString *real,
real->str = new_str;
real->allocated = new_allocated;
+
+ ASSERT_8_BYTE_ALIGNED (real);
}
real->len = new_length;