diff options
author | Havoc Pennington <hp@redhat.com> | 2004-12-31 21:01:56 +0000 |
---|---|---|
committer | Havoc Pennington <hp@redhat.com> | 2004-12-31 21:01:56 +0000 |
commit | c2a98e1103544277e8d36be53f8a24a32c2c6bea (patch) | |
tree | 99aaf7b9d9781718ad4056d7434f10fdda5c6827 /dbus/dbus-string.c | |
parent | b16ad22d870bd05a5cb04a127c3507edd9cd01fa (diff) |
2004-12-31 Havoc Pennington <hp@redhat.com>
* dbus/dbus-string.c (_dbus_string_equal_substrings): new function
I keep wishing I had
Diffstat (limited to 'dbus/dbus-string.c')
-rw-r--r-- | dbus/dbus-string.c | 60 |
1 files changed, 59 insertions, 1 deletions
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 |