_dbus_string_tolower_ascii(): new function, reviewed by Colin Walters.
authorRalf Habacker <ralf.habacker@freenet.de>
Sun, 28 Feb 2010 19:56:42 +0000 (20:56 +0100)
committerRalf Habacker <ralf.habacker@freenet.de>
Sun, 28 Feb 2010 20:03:16 +0000 (21:03 +0100)
dbus/dbus-1-symbols.def.in
dbus/dbus-string-util.c
dbus/dbus-string.c
dbus/dbus-string.h

index febfd42..e943357 100644 (file)
@@ -387,6 +387,7 @@ _dbus_string_skip_white
 _dbus_string_skip_white_reverse
 _dbus_string_split_on_byte
 _dbus_string_steal_data
+_dbus_string_tolower_ascii
 _dbus_string_validate_ascii
 _dbus_string_validate_nul
 _dbus_string_validate_utf8
index a3e5213..9ca5d6c 100644 (file)
@@ -871,7 +871,39 @@ _dbus_string_test (void)
     _dbus_string_free (&str);
     _dbus_string_free (&other);
   }
-  
+
+  {
+    const char upper_string[] = "TOUPPERSTRING";
+    const char lower_string[] = "toupperstring";
+    const char lower2_string[] = "toupperSTRING";
+
+    if (!_dbus_string_init (&str))
+      _dbus_assert_not_reached ("no memory");
+
+    if (!_dbus_string_append (&str, upper_string))
+      _dbus_assert_not_reached ("no memory");
+
+    _dbus_string_tolower_ascii (&str, 0, _dbus_string_get_length(&str));
+
+    if (!_dbus_string_equal_c_str (&str, lower_string))
+      _dbus_assert_not_reached ("_dbus_string_tolower_ascii failed");
+
+    _dbus_string_free (&str);
+
+    if (!_dbus_string_init (&str))
+      _dbus_assert_not_reached ("no memory");
+
+    if (!_dbus_string_append (&str, upper_string))
+      _dbus_assert_not_reached ("no memory");
+
+    _dbus_string_tolower_ascii (&str, 0, 7);
+
+    if (!_dbus_string_equal_c_str (&str, lower2_string))
+      _dbus_assert_not_reached ("_dbus_string_tolower_ascii failed in partial conversion");
+
+    _dbus_string_free (&str);
+  }
+
   return TRUE;
 }
 
index 62a6460..6a307b8 100644 (file)
@@ -2760,6 +2760,37 @@ _dbus_string_validate_ascii (const DBusString *str,
 }
 
 /**
+ * Converts the given range of the string to lower case.
+ *
+ * @param str the string
+ * @param start first byte index to convert
+ * @param len number of bytes to convert
+ */
+void
+_dbus_string_tolower_ascii (const DBusString *str,
+                            int               start,
+                            int               len)
+{
+  unsigned char *s;
+  unsigned char *end;
+  DBUS_STRING_PREAMBLE (str);
+  _dbus_assert (start >= 0);
+  _dbus_assert (start <= real->len);
+  _dbus_assert (len >= 0);
+  _dbus_assert (len <= real->len - start);
+
+  s = real->str + start;
+  end = s + len;
+
+  while (s != end)
+    {
+      if (*s >= 'A' && *s <= 'Z')
+          *s += 'a' - 'A';
+      ++s;
+    }
+}
+
+/**
  * Checks that the given range of the string is valid UTF-8. If the
  * given range is not entirely contained in the string, returns
  * #FALSE. If the string contains any nul bytes in the given range,
index 7c30111..1962ddf 100644 (file)
@@ -284,6 +284,9 @@ dbus_bool_t   _dbus_string_hex_decode            (const DBusString  *source,
                                                  int               *end_return,
                                                   DBusString        *dest,
                                                   int                insert_at);
+void          _dbus_string_tolower_ascii         (const DBusString  *str,
+                                                  int                start,
+                                                  int                len);
 dbus_bool_t   _dbus_string_validate_ascii        (const DBusString  *str,
                                                   int                start,
                                                   int                len);