summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2004-12-31 21:01:56 +0000
committerHavoc Pennington <hp@redhat.com>2004-12-31 21:01:56 +0000
commitc2a98e1103544277e8d36be53f8a24a32c2c6bea (patch)
tree99aaf7b9d9781718ad4056d7434f10fdda5c6827
parentb16ad22d870bd05a5cb04a127c3507edd9cd01fa (diff)
2004-12-31 Havoc Pennington <hp@redhat.com>
* dbus/dbus-string.c (_dbus_string_equal_substrings): new function I keep wishing I had
-rw-r--r--ChangeLog5
-rw-r--r--dbus/dbus-string.c60
-rw-r--r--dbus/dbus-string.h5
3 files changed, 69 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index be93fc5a..82dcc33a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-12-31 Havoc Pennington <hp@redhat.com>
+
+ * dbus/dbus-string.c (_dbus_string_equal_substrings): new function
+ I keep wishing I had
+
2004-12-30 John (J5) Palmieri <johnp@redhat.com>
* python/dbus.py: s/ACTIVATION_REPLY_ACTIVE/ACTIVATION_REPLY_ACTIVATED
diff --git a/dbus/dbus-string.c b/dbus/dbus-string.c
index b4e626b5..65797b12 100644
--- a/dbus/dbus-string.c
+++ b/dbus/dbus-string.c
@@ -2125,6 +2125,7 @@ _dbus_string_equal (const DBusString *a,
/**
* Tests two DBusString for equality up to the given length.
+ * The strings may be shorter than the given length.
*
* @todo write a unit test
*
@@ -2132,7 +2133,7 @@ _dbus_string_equal (const DBusString *a,
*
* @param a first string
* @param b second string
- * @param len the lengh
+ * @param len the maximum length to look at
* @returns #TRUE if equal for the given number of bytes
*/
dbus_bool_t
@@ -2168,6 +2169,63 @@ _dbus_string_equal_len (const DBusString *a,
}
/**
+ * Tests two sub-parts of two DBusString for equality. The specified
+ * range of the first string must exist; the specified start position
+ * of the second string must exist.
+ *
+ * @todo write a unit test
+ *
+ * @todo memcmp is probably faster
+ *
+ * @param a first string
+ * @param a_start where to start substring in first string
+ * @param a_len length of substring in first string
+ * @param b second string
+ * @param b_start where to start substring in second string
+ * @returns #TRUE if the two substrings are equal
+ */
+dbus_bool_t
+_dbus_string_equal_substring (const DBusString *a,
+ int a_start,
+ int a_len,
+ const DBusString *b,
+ int b_start)
+{
+ const unsigned char *ap;
+ const unsigned char *bp;
+ const unsigned char *a_end;
+ const DBusRealString *real_a = (const DBusRealString*) a;
+ const DBusRealString *real_b = (const DBusRealString*) b;
+ DBUS_GENERIC_STRING_PREAMBLE (real_a);
+ DBUS_GENERIC_STRING_PREAMBLE (real_b);
+ _dbus_assert (a_start >= 0);
+ _dbus_assert (a_len >= 0);
+ _dbus_assert (a_start <= real_a->len);
+ _dbus_assert (a_len <= real_a->len - a_start);
+ _dbus_assert (b_start >= 0);
+ _dbus_assert (b_start <= real_b->len);
+
+ if (a_len > real_b->len - b_start)
+ return FALSE;
+
+ ap = real_a->str + a_start;
+ bp = real_b->str + b_start;
+ a_end = ap + a_len;
+ while (ap != a_end)
+ {
+ if (*ap != *bp)
+ return FALSE;
+
+ ++ap;
+ ++bp;
+ }
+
+ _dbus_assert (bp <= (real_b->str + real_b->len));
+
+ return TRUE;
+}
+
+/**
* Checks whether a string is equal to a C string.
*
* @param a the string
diff --git a/dbus/dbus-string.h b/dbus/dbus-string.h
index 2b8b09f5..96f3d560 100644
--- a/dbus/dbus-string.h
+++ b/dbus/dbus-string.h
@@ -230,6 +230,11 @@ dbus_bool_t _dbus_string_equal_c_str (const DBusString *a,
dbus_bool_t _dbus_string_equal_len (const DBusString *a,
const DBusString *b,
int len);
+dbus_bool_t _dbus_string_equal_substring (const DBusString *a,
+ int a_start,
+ int a_len,
+ const DBusString *b,
+ int b_start);
dbus_bool_t _dbus_string_starts_with_c_str (const DBusString *a,
const char *c_str);
dbus_bool_t _dbus_string_ends_with_c_str (const DBusString *a,