dbus/dbus dbus-string.c,1.57,1.58 dbus-string.h,1.32,1.33

Havoc Pennington hp at freedesktop.org
Fri Dec 31 13:01:58 PST 2004


Update of /cvs/dbus/dbus/dbus
In directory gabe:/tmp/cvs-serv13953/dbus

Modified Files:
	dbus-string.c dbus-string.h 
Log Message:
2004-12-31  Havoc Pennington  <hp at redhat.com>

	* dbus/dbus-string.c (_dbus_string_equal_substrings): new function
	I keep wishing I had



Index: dbus-string.c
===================================================================
RCS file: /cvs/dbus/dbus/dbus/dbus-string.c,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -d -r1.57 -r1.58
--- dbus-string.c	19 Dec 2004 16:23:09 -0000	1.57
+++ dbus-string.c	31 Dec 2004 21:01:56 -0000	1.58
@@ -2125,6 +2125,7 @@
 
 /**
  * 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 @@
  *
  * @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 @@
 }
 
 /**
+ * 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

Index: dbus-string.h
===================================================================
RCS file: /cvs/dbus/dbus/dbus/dbus-string.h,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -d -r1.32 -r1.33
--- dbus-string.h	19 Dec 2004 16:23:09 -0000	1.32
+++ dbus-string.h	31 Dec 2004 21:01:56 -0000	1.33
@@ -230,6 +230,11 @@
 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,



More information about the dbus-commit mailing list