diff options
Diffstat (limited to 'src/3rd_party/dbus-1.7.8/dbus/dbus-string-util.c')
-rw-r--r-- | src/3rd_party/dbus-1.7.8/dbus/dbus-string-util.c | 938 |
1 files changed, 0 insertions, 938 deletions
diff --git a/src/3rd_party/dbus-1.7.8/dbus/dbus-string-util.c b/src/3rd_party/dbus-1.7.8/dbus/dbus-string-util.c deleted file mode 100644 index 3babc0534d..0000000000 --- a/src/3rd_party/dbus-1.7.8/dbus/dbus-string-util.c +++ /dev/null @@ -1,938 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ -/* dbus-string-util.c Would be in dbus-string.c, but not used in libdbus - * - * Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc. - * Copyright (C) 2006 Ralf Habacker <ralf.habacker@freenet.de> - * - * Licensed under the Academic Free License version 2.1 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#include <config.h> -#include "dbus-internals.h" -#include "dbus-string.h" -#define DBUS_CAN_USE_DBUS_STRING_PRIVATE 1 -#include "dbus-string-private.h" - -/** - * @addtogroup DBusString - * @{ - */ - -/** - * Returns whether a string ends with the given suffix - * - * @todo memcmp might make this faster. - * - * @param a the string - * @param c_str the C-style string - * @returns #TRUE if the string ends with the suffix - */ -dbus_bool_t -_dbus_string_ends_with_c_str (const DBusString *a, - const char *c_str) -{ - const unsigned char *ap; - const unsigned char *bp; - const unsigned char *a_end; - unsigned long c_str_len; - const DBusRealString *real_a = (const DBusRealString*) a; - DBUS_GENERIC_STRING_PREAMBLE (real_a); - _dbus_assert (c_str != NULL); - - c_str_len = strlen (c_str); - if (((unsigned long)real_a->len) < c_str_len) - return FALSE; - - ap = real_a->str + (real_a->len - c_str_len); - bp = (const unsigned char*) c_str; - a_end = real_a->str + real_a->len; - while (ap != a_end) - { - if (*ap != *bp) - return FALSE; - - ++ap; - ++bp; - } - - _dbus_assert (*ap == '\0'); - _dbus_assert (*bp == '\0'); - - return TRUE; -} - -/** - * Find the given byte scanning backward from the given start. - * Sets *found to -1 if the byte is not found. - * - * @param str the string - * @param start the place to start scanning (will not find the byte at this point) - * @param byte the byte to find - * @param found return location for where it was found - * @returns #TRUE if found - */ -dbus_bool_t -_dbus_string_find_byte_backward (const DBusString *str, - int start, - unsigned char byte, - int *found) -{ - int i; - DBUS_CONST_STRING_PREAMBLE (str); - _dbus_assert (start <= real->len); - _dbus_assert (start >= 0); - _dbus_assert (found != NULL); - - i = start - 1; - while (i >= 0) - { - if (real->str[i] == byte) - break; - - --i; - } - - if (found) - *found = i; - - return i >= 0; -} - -/** @} */ - -#ifdef DBUS_ENABLE_EMBEDDED_TESTS -#include "dbus-test.h" -#include <stdio.h> - -static void -test_hex_roundtrip (const unsigned char *data, - int len) -{ - DBusString orig; - DBusString encoded; - DBusString decoded; - int end; - - if (len < 0) - len = strlen (data); - - if (!_dbus_string_init (&orig)) - _dbus_assert_not_reached ("could not init string"); - - if (!_dbus_string_init (&encoded)) - _dbus_assert_not_reached ("could not init string"); - - if (!_dbus_string_init (&decoded)) - _dbus_assert_not_reached ("could not init string"); - - if (!_dbus_string_append_len (&orig, data, len)) - _dbus_assert_not_reached ("couldn't append orig data"); - - if (!_dbus_string_hex_encode (&orig, 0, &encoded, 0)) - _dbus_assert_not_reached ("could not encode"); - - if (!_dbus_string_hex_decode (&encoded, 0, &end, &decoded, 0)) - _dbus_assert_not_reached ("could not decode"); - - _dbus_assert (_dbus_string_get_length (&encoded) == end); - - if (!_dbus_string_equal (&orig, &decoded)) - { - const char *s; - - printf ("Original string %d bytes encoded %d bytes decoded %d bytes\n", - _dbus_string_get_length (&orig), - _dbus_string_get_length (&encoded), - _dbus_string_get_length (&decoded)); - printf ("Original: %s\n", data); - s = _dbus_string_get_const_data (&decoded); - printf ("Decoded: %s\n", s); - _dbus_assert_not_reached ("original string not the same as string decoded from hex"); - } - - _dbus_string_free (&orig); - _dbus_string_free (&encoded); - _dbus_string_free (&decoded); -} - -typedef void (* TestRoundtripFunc) (const unsigned char *data, - int len); -static void -test_roundtrips (TestRoundtripFunc func) -{ - (* func) ("Hello this is a string\n", -1); - (* func) ("Hello this is a string\n1", -1); - (* func) ("Hello this is a string\n12", -1); - (* func) ("Hello this is a string\n123", -1); - (* func) ("Hello this is a string\n1234", -1); - (* func) ("Hello this is a string\n12345", -1); - (* func) ("", 0); - (* func) ("1", 1); - (* func) ("12", 2); - (* func) ("123", 3); - (* func) ("1234", 4); - (* func) ("12345", 5); - (* func) ("", 1); - (* func) ("1", 2); - (* func) ("12", 3); - (* func) ("123", 4); - (* func) ("1234", 5); - (* func) ("12345", 6); - { - unsigned char buf[512]; - int i; - - i = 0; - while (i < _DBUS_N_ELEMENTS (buf)) - { - buf[i] = i; - ++i; - } - i = 0; - while (i < _DBUS_N_ELEMENTS (buf)) - { - (* func) (buf, i); - ++i; - } - } -} - -/** - * @ingroup DBusStringInternals - * Unit test for DBusString. - * - * @todo Need to write tests for _dbus_string_copy() and - * _dbus_string_move() moving to/from each of start/middle/end of a - * string. Also need tests for _dbus_string_move_len () - * - * @returns #TRUE on success. - */ -dbus_bool_t -_dbus_string_test (void) -{ - DBusString str; - DBusString other; - int i, a, end; - long v; - int lens[] = { 0, 1, 2, 3, 4, 5, 10, 16, 17, 18, 25, 31, 32, 33, 34, 35, 63, 64, 65, 66, 67, 68, 69, 70, 71, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136 }; - char *s; - - /* Test shortening and setting length */ - i = 0; - while (i < _DBUS_N_ELEMENTS (lens)) - { - int j; - - if (!_dbus_string_init (&str)) - _dbus_assert_not_reached ("failed to init string"); - - if (!_dbus_string_set_length (&str, lens[i])) - _dbus_assert_not_reached ("failed to set string length"); - - j = lens[i]; - while (j > 0) - { - _dbus_assert (_dbus_string_get_length (&str) == j); - if (j > 0) - { - _dbus_string_shorten (&str, 1); - _dbus_assert (_dbus_string_get_length (&str) == (j - 1)); - } - --j; - } - - _dbus_string_free (&str); - - ++i; - } - - /* Test equality */ - if (!_dbus_string_init (&str)) - _dbus_assert_not_reached ("oom"); - - if (!_dbus_string_append (&str, "Hello World")) - _dbus_assert_not_reached ("oom"); - - _dbus_string_init_const (&other, "H"); - _dbus_assert (_dbus_string_equal_substring (&str, 0, 1, &other, 0)); - _dbus_assert (_dbus_string_equal_substring (&str, 1, 0, &other, 1)); - _dbus_string_init_const (&other, "Hello"); - _dbus_assert (_dbus_string_equal_substring (&str, 0, 5, &other, 0)); - _dbus_assert (_dbus_string_equal_substring (&str, 1, 4, &other, 1)); - _dbus_assert (_dbus_string_equal_substring (&str, 2, 3, &other, 2)); - _dbus_assert (_dbus_string_equal_substring (&str, 3, 2, &other, 3)); - _dbus_assert (_dbus_string_equal_substring (&str, 4, 1, &other, 4)); - _dbus_assert (_dbus_string_equal_substring (&str, 5, 0, &other, 5)); - - _dbus_assert (_dbus_string_equal_substring (&other, 0, 5, &str, 0)); - _dbus_assert (_dbus_string_equal_substring (&other, 1, 4, &str, 1)); - _dbus_assert (_dbus_string_equal_substring (&other, 2, 3, &str, 2)); - _dbus_assert (_dbus_string_equal_substring (&other, 3, 2, &str, 3)); - _dbus_assert (_dbus_string_equal_substring (&other, 4, 1, &str, 4)); - _dbus_assert (_dbus_string_equal_substring (&other, 5, 0, &str, 5)); - - - _dbus_string_init_const (&other, "World"); - _dbus_assert (_dbus_string_equal_substring (&str, 6, 5, &other, 0)); - _dbus_assert (_dbus_string_equal_substring (&str, 7, 4, &other, 1)); - _dbus_assert (_dbus_string_equal_substring (&str, 8, 3, &other, 2)); - _dbus_assert (_dbus_string_equal_substring (&str, 9, 2, &other, 3)); - _dbus_assert (_dbus_string_equal_substring (&str, 10, 1, &other, 4)); - _dbus_assert (_dbus_string_equal_substring (&str, 11, 0, &other, 5)); - - _dbus_assert (_dbus_string_equal_substring (&other, 0, 5, &str, 6)); - _dbus_assert (_dbus_string_equal_substring (&other, 1, 4, &str, 7)); - _dbus_assert (_dbus_string_equal_substring (&other, 2, 3, &str, 8)); - _dbus_assert (_dbus_string_equal_substring (&other, 3, 2, &str, 9)); - _dbus_assert (_dbus_string_equal_substring (&other, 4, 1, &str, 10)); - _dbus_assert (_dbus_string_equal_substring (&other, 5, 0, &str, 11)); - - _dbus_string_free (&str); - - /* Test appending data */ - if (!_dbus_string_init (&str)) - _dbus_assert_not_reached ("failed to init string"); - - i = 0; - while (i < 10) - { - if (!_dbus_string_append (&str, "a")) - _dbus_assert_not_reached ("failed to append string to string\n"); - - _dbus_assert (_dbus_string_get_length (&str) == i * 2 + 1); - - if (!_dbus_string_append_byte (&str, 'b')) - _dbus_assert_not_reached ("failed to append byte to string\n"); - - _dbus_assert (_dbus_string_get_length (&str) == i * 2 + 2); - - ++i; - } - - _dbus_string_free (&str); - - /* Check steal_data */ - - if (!_dbus_string_init (&str)) - _dbus_assert_not_reached ("failed to init string"); - - if (!_dbus_string_append (&str, "Hello World")) - _dbus_assert_not_reached ("could not append to string"); - - i = _dbus_string_get_length (&str); - - if (!_dbus_string_steal_data (&str, &s)) - _dbus_assert_not_reached ("failed to steal data"); - - _dbus_assert (_dbus_string_get_length (&str) == 0); - _dbus_assert (((int)strlen (s)) == i); - - dbus_free (s); - - /* Check move */ - - if (!_dbus_string_append (&str, "Hello World")) - _dbus_assert_not_reached ("could not append to string"); - - i = _dbus_string_get_length (&str); - - if (!_dbus_string_init (&other)) - _dbus_assert_not_reached ("could not init string"); - - if (!_dbus_string_move (&str, 0, &other, 0)) - _dbus_assert_not_reached ("could not move"); - - _dbus_assert (_dbus_string_get_length (&str) == 0); - _dbus_assert (_dbus_string_get_length (&other) == i); - - if (!_dbus_string_append (&str, "Hello World")) - _dbus_assert_not_reached ("could not append to string"); - - if (!_dbus_string_move (&str, 0, &other, _dbus_string_get_length (&other))) - _dbus_assert_not_reached ("could not move"); - - _dbus_assert (_dbus_string_get_length (&str) == 0); - _dbus_assert (_dbus_string_get_length (&other) == i * 2); - - if (!_dbus_string_append (&str, "Hello World")) - _dbus_assert_not_reached ("could not append to string"); - - if (!_dbus_string_move (&str, 0, &other, _dbus_string_get_length (&other) / 2)) - _dbus_assert_not_reached ("could not move"); - - _dbus_assert (_dbus_string_get_length (&str) == 0); - _dbus_assert (_dbus_string_get_length (&other) == i * 3); - - _dbus_string_free (&other); - - /* Check copy */ - - if (!_dbus_string_append (&str, "Hello World")) - _dbus_assert_not_reached ("could not append to string"); - - i = _dbus_string_get_length (&str); - - if (!_dbus_string_init (&other)) - _dbus_assert_not_reached ("could not init string"); - - if (!_dbus_string_copy (&str, 0, &other, 0)) - _dbus_assert_not_reached ("could not copy"); - - _dbus_assert (_dbus_string_get_length (&str) == i); - _dbus_assert (_dbus_string_get_length (&other) == i); - - if (!_dbus_string_copy (&str, 0, &other, _dbus_string_get_length (&other))) - _dbus_assert_not_reached ("could not copy"); - - _dbus_assert (_dbus_string_get_length (&str) == i); - _dbus_assert (_dbus_string_get_length (&other) == i * 2); - _dbus_assert (_dbus_string_equal_c_str (&other, - "Hello WorldHello World")); - - if (!_dbus_string_copy (&str, 0, &other, _dbus_string_get_length (&other) / 2)) - _dbus_assert_not_reached ("could not copy"); - - _dbus_assert (_dbus_string_get_length (&str) == i); - _dbus_assert (_dbus_string_get_length (&other) == i * 3); - _dbus_assert (_dbus_string_equal_c_str (&other, - "Hello WorldHello WorldHello World")); - - _dbus_string_free (&str); - _dbus_string_free (&other); - - /* Check replace */ - - if (!_dbus_string_init (&str)) - _dbus_assert_not_reached ("failed to init string"); - - if (!_dbus_string_append (&str, "Hello World")) - _dbus_assert_not_reached ("could not append to string"); - - i = _dbus_string_get_length (&str); - - if (!_dbus_string_init (&other)) - _dbus_assert_not_reached ("could not init string"); - - if (!_dbus_string_replace_len (&str, 0, _dbus_string_get_length (&str), - &other, 0, _dbus_string_get_length (&other))) - _dbus_assert_not_reached ("could not replace"); - - _dbus_assert (_dbus_string_get_length (&str) == i); - _dbus_assert (_dbus_string_get_length (&other) == i); - _dbus_assert (_dbus_string_equal_c_str (&other, "Hello World")); - - if (!_dbus_string_replace_len (&str, 0, _dbus_string_get_length (&str), - &other, 5, 1)) - _dbus_assert_not_reached ("could not replace center space"); - - _dbus_assert (_dbus_string_get_length (&str) == i); - _dbus_assert (_dbus_string_get_length (&other) == i * 2 - 1); - _dbus_assert (_dbus_string_equal_c_str (&other, - "HelloHello WorldWorld")); - - - if (!_dbus_string_replace_len (&str, 1, 1, - &other, - _dbus_string_get_length (&other) - 1, - 1)) - _dbus_assert_not_reached ("could not replace end character"); - - _dbus_assert (_dbus_string_get_length (&str) == i); - _dbus_assert (_dbus_string_get_length (&other) == i * 2 - 1); - _dbus_assert (_dbus_string_equal_c_str (&other, - "HelloHello WorldWorle")); - - _dbus_string_free (&str); - _dbus_string_free (&other); - - /* Different tests are provided because different behaviours are - * implemented in _dbus_string_replace_len() in function of replacing and - * replaced lengths - */ - - if (!_dbus_string_init (&str)) - _dbus_assert_not_reached ("failed to init string"); - - if (!_dbus_string_append (&str, "Hello World")) - _dbus_assert_not_reached ("could not append to string"); - - i = _dbus_string_get_length (&str); - - if (!_dbus_string_init (&other)) - _dbus_assert_not_reached ("could not init string"); - - if (!_dbus_string_append (&other, "Foo String")) - _dbus_assert_not_reached ("could not append to string"); - - a = _dbus_string_get_length (&other); - - if (!_dbus_string_replace_len (&str, 0, 6, - &other, 4, 0)) - _dbus_assert_not_reached ("could not replace 0 length"); - - _dbus_assert (_dbus_string_get_length (&str) == i); - _dbus_assert (_dbus_string_get_length (&other) == a + 6); - _dbus_assert (_dbus_string_equal_c_str (&other, - "Foo Hello String")); - - if (!_dbus_string_replace_len (&str, 5, 6, - &other, - _dbus_string_get_length (&other), - 0)) - _dbus_assert_not_reached ("could not replace at the end"); - - _dbus_assert (_dbus_string_get_length (&str) == i); - _dbus_assert (_dbus_string_get_length (&other) == a + 6 + 6); - _dbus_assert (_dbus_string_equal_c_str (&other, - "Foo Hello String World")); - - if (!_dbus_string_replace_len (&str, 0, 5, - &other, - _dbus_string_get_length (&other) - 5, - 5)) - _dbus_assert_not_reached ("could not replace same length"); - - _dbus_assert (_dbus_string_get_length (&str) == i); - _dbus_assert (_dbus_string_get_length (&other) == a + 6 + 6); - _dbus_assert (_dbus_string_equal_c_str (&other, - "Foo Hello String Hello")); - - if (!_dbus_string_replace_len (&str, 6, 5, - &other, 4, 12)) - _dbus_assert_not_reached ("could not replace with shorter string"); - - _dbus_assert (_dbus_string_get_length (&str) == i); - _dbus_assert (_dbus_string_get_length (&other) == a + 5); - _dbus_assert (_dbus_string_equal_c_str (&other, - "Foo World Hello")); - - if (!_dbus_string_replace_len (&str, 0, 1, - &other, 0, 3)) - _dbus_assert_not_reached ("could not replace at the beginning"); - - _dbus_assert (_dbus_string_get_length (&str) == i); - _dbus_assert (_dbus_string_get_length (&other) == a + 3); - _dbus_assert (_dbus_string_equal_c_str (&other, - "H World Hello")); - - if (!_dbus_string_replace_len (&str, 6, 5, - &other, - _dbus_string_get_length (&other) - 5, - 5)) - _dbus_assert_not_reached ("could not replace same length"); - - _dbus_assert (_dbus_string_get_length (&str) == i); - _dbus_assert (_dbus_string_get_length (&other) == a + 3); - _dbus_assert (_dbus_string_equal_c_str (&other, - "H World World")); - - _dbus_string_free (&str); - _dbus_string_free (&other); - - /* Check insert/set/get byte */ - - if (!_dbus_string_init (&str)) - _dbus_assert_not_reached ("failed to init string"); - - if (!_dbus_string_append (&str, "Hello")) - _dbus_assert_not_reached ("failed to append Hello"); - - _dbus_assert (_dbus_string_get_byte (&str, 0) == 'H'); - _dbus_assert (_dbus_string_get_byte (&str, 1) == 'e'); - _dbus_assert (_dbus_string_get_byte (&str, 2) == 'l'); - _dbus_assert (_dbus_string_get_byte (&str, 3) == 'l'); - _dbus_assert (_dbus_string_get_byte (&str, 4) == 'o'); - - _dbus_string_set_byte (&str, 1, 'q'); - _dbus_assert (_dbus_string_get_byte (&str, 1) == 'q'); - - if (!_dbus_string_insert_bytes (&str, 0, 1, 255)) - _dbus_assert_not_reached ("can't insert byte"); - - if (!_dbus_string_insert_bytes (&str, 2, 4, 'Z')) - _dbus_assert_not_reached ("can't insert byte"); - - if (!_dbus_string_insert_bytes (&str, _dbus_string_get_length (&str), 1, 'W')) - _dbus_assert_not_reached ("can't insert byte"); - - _dbus_assert (_dbus_string_get_byte (&str, 0) == 255); - _dbus_assert (_dbus_string_get_byte (&str, 1) == 'H'); - _dbus_assert (_dbus_string_get_byte (&str, 2) == 'Z'); - _dbus_assert (_dbus_string_get_byte (&str, 3) == 'Z'); - _dbus_assert (_dbus_string_get_byte (&str, 4) == 'Z'); - _dbus_assert (_dbus_string_get_byte (&str, 5) == 'Z'); - _dbus_assert (_dbus_string_get_byte (&str, 6) == 'q'); - _dbus_assert (_dbus_string_get_byte (&str, 7) == 'l'); - _dbus_assert (_dbus_string_get_byte (&str, 8) == 'l'); - _dbus_assert (_dbus_string_get_byte (&str, 9) == 'o'); - _dbus_assert (_dbus_string_get_byte (&str, 10) == 'W'); - - _dbus_string_free (&str); - - /* Check append/parse int/double */ - - if (!_dbus_string_init (&str)) - _dbus_assert_not_reached ("failed to init string"); - - if (!_dbus_string_append_int (&str, 27)) - _dbus_assert_not_reached ("failed to append int"); - - i = _dbus_string_get_length (&str); - - if (!_dbus_string_parse_int (&str, 0, &v, &end)) - _dbus_assert_not_reached ("failed to parse int"); - - _dbus_assert (v == 27); - _dbus_assert (end == i); - - _dbus_string_free (&str); - - /* Test find */ - if (!_dbus_string_init (&str)) - _dbus_assert_not_reached ("failed to init string"); - - if (!_dbus_string_append (&str, "Hello")) - _dbus_assert_not_reached ("couldn't append to string"); - - if (!_dbus_string_find (&str, 0, "He", &i)) - _dbus_assert_not_reached ("didn't find 'He'"); - _dbus_assert (i == 0); - - if (!_dbus_string_find (&str, 0, "Hello", &i)) - _dbus_assert_not_reached ("didn't find 'Hello'"); - _dbus_assert (i == 0); - - if (!_dbus_string_find (&str, 0, "ello", &i)) - _dbus_assert_not_reached ("didn't find 'ello'"); - _dbus_assert (i == 1); - - if (!_dbus_string_find (&str, 0, "lo", &i)) - _dbus_assert_not_reached ("didn't find 'lo'"); - _dbus_assert (i == 3); - - if (!_dbus_string_find (&str, 2, "lo", &i)) - _dbus_assert_not_reached ("didn't find 'lo'"); - _dbus_assert (i == 3); - - if (_dbus_string_find (&str, 4, "lo", &i)) - _dbus_assert_not_reached ("did find 'lo'"); - - if (!_dbus_string_find (&str, 0, "l", &i)) - _dbus_assert_not_reached ("didn't find 'l'"); - _dbus_assert (i == 2); - - if (!_dbus_string_find (&str, 0, "H", &i)) - _dbus_assert_not_reached ("didn't find 'H'"); - _dbus_assert (i == 0); - - if (!_dbus_string_find (&str, 0, "", &i)) - _dbus_assert_not_reached ("didn't find ''"); - _dbus_assert (i == 0); - - if (_dbus_string_find (&str, 0, "Hello!", NULL)) - _dbus_assert_not_reached ("Did find 'Hello!'"); - - if (_dbus_string_find (&str, 0, "Oh, Hello", NULL)) - _dbus_assert_not_reached ("Did find 'Oh, Hello'"); - - if (_dbus_string_find (&str, 0, "ill", NULL)) - _dbus_assert_not_reached ("Did find 'ill'"); - - if (_dbus_string_find (&str, 0, "q", NULL)) - _dbus_assert_not_reached ("Did find 'q'"); - - if (!_dbus_string_find_to (&str, 0, 2, "He", NULL)) - _dbus_assert_not_reached ("Didn't find 'He'"); - - if (_dbus_string_find_to (&str, 0, 2, "Hello", NULL)) - _dbus_assert_not_reached ("Did find 'Hello'"); - - if (!_dbus_string_find_byte_backward (&str, _dbus_string_get_length (&str), 'H', &i)) - _dbus_assert_not_reached ("Did not find 'H'"); - _dbus_assert (i == 0); - - if (!_dbus_string_find_byte_backward (&str, _dbus_string_get_length (&str), 'o', &i)) - _dbus_assert_not_reached ("Did not find 'o'"); - _dbus_assert (i == _dbus_string_get_length (&str) - 1); - - if (_dbus_string_find_byte_backward (&str, _dbus_string_get_length (&str) - 1, 'o', &i)) - _dbus_assert_not_reached ("Did find 'o'"); - _dbus_assert (i == -1); - - if (_dbus_string_find_byte_backward (&str, 1, 'e', &i)) - _dbus_assert_not_reached ("Did find 'e'"); - _dbus_assert (i == -1); - - if (!_dbus_string_find_byte_backward (&str, 2, 'e', &i)) - _dbus_assert_not_reached ("Didn't find 'e'"); - _dbus_assert (i == 1); - - _dbus_string_free (&str); - - /* Hex encoding */ - _dbus_string_init_const (&str, "cafebabe, this is a bogus hex string"); - if (!_dbus_string_init (&other)) - _dbus_assert_not_reached ("could not init string"); - - if (!_dbus_string_hex_decode (&str, 0, &end, &other, 0)) - _dbus_assert_not_reached ("deccoded bogus hex string with no error"); - - _dbus_assert (end == 8); - - _dbus_string_free (&other); - - test_roundtrips (test_hex_roundtrip); - - _dbus_string_free (&str); - - { - int found, found_len; - - _dbus_string_init_const (&str, "012\r\n567\n90"); - - if (!_dbus_string_find_eol (&str, 0, &found, &found_len) || found != 3 || found_len != 2) - _dbus_assert_not_reached ("Did not find '\\r\\n'"); - if (found != 3 || found_len != 2) - _dbus_assert_not_reached ("invalid return values"); - - if (!_dbus_string_find_eol (&str, 5, &found, &found_len)) - _dbus_assert_not_reached ("Did not find '\\n'"); - if (found != 8 || found_len != 1) - _dbus_assert_not_reached ("invalid return values"); - - if (_dbus_string_find_eol (&str, 9, &found, &found_len)) - _dbus_assert_not_reached ("Found not expected '\\n'"); - else if (found != 11 || found_len != 0) - _dbus_assert_not_reached ("invalid return values '\\n'"); - - found = -1; - found_len = -1; - _dbus_string_init_const (&str, ""); - if (_dbus_string_find_eol (&str, 0, &found, &found_len)) - _dbus_assert_not_reached ("found an eol in an empty string"); - _dbus_assert (found == 0); - _dbus_assert (found_len == 0); - - found = -1; - found_len = -1; - _dbus_string_init_const (&str, "foobar"); - if (_dbus_string_find_eol (&str, 0, &found, &found_len)) - _dbus_assert_not_reached ("found eol in string that lacks one"); - _dbus_assert (found == 6); - _dbus_assert (found_len == 0); - - found = -1; - found_len = -1; - _dbus_string_init_const (&str, "foobar\n"); - if (!_dbus_string_find_eol (&str, 0, &found, &found_len)) - _dbus_assert_not_reached ("did not find eol in string that has one at end"); - _dbus_assert (found == 6); - _dbus_assert (found_len == 1); - } - - { - DBusString line; - -#define FIRST_LINE "this is a line" -#define SECOND_LINE "this is a second line" - /* third line is empty */ -#define THIRD_LINE "" -#define FOURTH_LINE "this is a fourth line" - - if (!_dbus_string_init (&str)) - _dbus_assert_not_reached ("no memory"); - - if (!_dbus_string_append (&str, FIRST_LINE "\n" SECOND_LINE "\r\n" THIRD_LINE "\n" FOURTH_LINE)) - _dbus_assert_not_reached ("no memory"); - - if (!_dbus_string_init (&line)) - _dbus_assert_not_reached ("no memory"); - - if (!_dbus_string_pop_line (&str, &line)) - _dbus_assert_not_reached ("failed to pop first line"); - - _dbus_assert (_dbus_string_equal_c_str (&line, FIRST_LINE)); - - if (!_dbus_string_pop_line (&str, &line)) - _dbus_assert_not_reached ("failed to pop second line"); - - _dbus_assert (_dbus_string_equal_c_str (&line, SECOND_LINE)); - - if (!_dbus_string_pop_line (&str, &line)) - _dbus_assert_not_reached ("failed to pop third line"); - - _dbus_assert (_dbus_string_equal_c_str (&line, THIRD_LINE)); - - if (!_dbus_string_pop_line (&str, &line)) - _dbus_assert_not_reached ("failed to pop fourth line"); - - _dbus_assert (_dbus_string_equal_c_str (&line, FOURTH_LINE)); - - _dbus_string_free (&str); - _dbus_string_free (&line); - } - - { - if (!_dbus_string_init (&str)) - _dbus_assert_not_reached ("no memory"); - - for (i = 0; i < 10000; i++) - if (!_dbus_string_append (&str, "abcdefghijklmnopqrstuvwxyz")) - _dbus_assert_not_reached ("no memory"); - - if (!_dbus_string_set_length (&str, 10)) - _dbus_assert_not_reached ("failed to set length"); - - /* actually compact */ - if (!_dbus_string_compact (&str, 2048)) - _dbus_assert_not_reached ("failed to compact after set_length"); - - /* peek inside to make sure it worked */ - if (((DBusRealString *)&str)->allocated > 30) - _dbus_assert_not_reached ("compacting string didn't do anything"); - - if (!_dbus_string_equal_c_str (&str, "abcdefghij")) - _dbus_assert_not_reached ("unexpected content after compact"); - - /* compact nothing */ - if (!_dbus_string_compact (&str, 2048)) - _dbus_assert_not_reached ("failed to compact 2nd time"); - - if (!_dbus_string_equal_c_str (&str, "abcdefghij")) - _dbus_assert_not_reached ("unexpected content after 2nd compact"); - - /* and make sure it still works...*/ - if (!_dbus_string_append (&str, "123456")) - _dbus_assert_not_reached ("failed to append after compact"); - - if (!_dbus_string_equal_c_str (&str, "abcdefghij123456")) - _dbus_assert_not_reached ("unexpected content after append"); - - /* after growing automatically, this should do nothing */ - if (!_dbus_string_compact (&str, 20000)) - _dbus_assert_not_reached ("failed to compact after grow"); - - /* but this one will do something */ - if (!_dbus_string_compact (&str, 0)) - _dbus_assert_not_reached ("failed to compact after grow"); - - if (!_dbus_string_equal_c_str (&str, "abcdefghij123456")) - _dbus_assert_not_reached ("unexpected content"); - - if (!_dbus_string_append (&str, "!@#$%")) - _dbus_assert_not_reached ("failed to append after compact"); - - if (!_dbus_string_equal_c_str (&str, "abcdefghij123456!@#$%")) - _dbus_assert_not_reached ("unexpected content"); - - _dbus_string_free (&str); - } - - { - const char two_strings[] = "one\ttwo"; - - if (!_dbus_string_init (&str)) - _dbus_assert_not_reached ("no memory"); - - if (!_dbus_string_init (&other)) - _dbus_assert_not_reached ("no memory"); - - if (!_dbus_string_append (&str, two_strings)) - _dbus_assert_not_reached ("no memory"); - - if (!_dbus_string_split_on_byte (&str, '\t', &other)) - _dbus_assert_not_reached ("no memory or delimiter not found"); - - if (strcmp (_dbus_string_get_data (&str), "one") != 0) - _dbus_assert_not_reached ("left side after split on tab is wrong"); - - if (strcmp (_dbus_string_get_data (&other), "two") != 0) - _dbus_assert_not_reached ("right side after split on tab is wrong"); - - _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); - } - - { - const char lower_string[] = "toupperstring"; - const char upper_string[] = "TOUPPERSTRING"; - const char upper2_string[] = "TOUPPERstring"; - - if (!_dbus_string_init (&str)) - _dbus_assert_not_reached ("no memory"); - - if (!_dbus_string_append (&str, lower_string)) - _dbus_assert_not_reached ("no memory"); - - _dbus_string_toupper_ascii (&str, 0, _dbus_string_get_length(&str)); - - if (!_dbus_string_equal_c_str (&str, upper_string)) - _dbus_assert_not_reached ("_dbus_string_toupper_ascii failed"); - - _dbus_string_free (&str); - - if (!_dbus_string_init (&str)) - _dbus_assert_not_reached ("no memory"); - - if (!_dbus_string_append (&str, lower_string)) - _dbus_assert_not_reached ("no memory"); - - _dbus_string_toupper_ascii (&str, 0, 7); - - if (!_dbus_string_equal_c_str (&str, upper2_string)) - _dbus_assert_not_reached ("_dbus_string_toupper_ascii failed in partial conversion"); - - _dbus_string_free (&str); - } - - return TRUE; -} - -#endif /* DBUS_ENABLE_EMBEDDED_TESTS */ |