From: Ralf Habacker Date: Sun, 28 Feb 2010 19:56:42 +0000 (+0100) Subject: _dbus_string_tolower_ascii(): new function, reviewed by Colin Walters. X-Git-Tag: dbus-1.3.1~108 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a06c771d2b931f0e5ae600d22a3e07208f16b0a3;p=thirdparty%2Fdbus.git _dbus_string_tolower_ascii(): new function, reviewed by Colin Walters. --- diff --git a/dbus/dbus-1-symbols.def.in b/dbus/dbus-1-symbols.def.in index febfd422f..e943357d6 100644 --- a/dbus/dbus-1-symbols.def.in +++ b/dbus/dbus-1-symbols.def.in @@ -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 diff --git a/dbus/dbus-string-util.c b/dbus/dbus-string-util.c index a3e5213ee..9ca5d6c02 100644 --- a/dbus/dbus-string-util.c +++ b/dbus/dbus-string-util.c @@ -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; } diff --git a/dbus/dbus-string.c b/dbus/dbus-string.c index 62a646098..6a307b82b 100644 --- a/dbus/dbus-string.c +++ b/dbus/dbus-string.c @@ -2759,6 +2759,37 @@ _dbus_string_validate_ascii (const DBusString *str, return TRUE; } +/** + * 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 diff --git a/dbus/dbus-string.h b/dbus/dbus-string.h index 7c3011191..1962ddf14 100644 --- a/dbus/dbus-string.h +++ b/dbus/dbus-string.h @@ -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);