1d012387afef0ba02185ebe27bc6bb15551912e92Havoc Pennington/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 27bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/* dbus-string-util.c Would be in dbus-string.c, but not used in libdbus 37bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 47bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc. 5cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker * Copyright (C) 2006 Ralf Habacker <ralf.habacker@freenet.de> 67bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 77bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Licensed under the Academic Free License version 2.1 87bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 97bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * This program is free software; you can redistribute it and/or modify 107bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * it under the terms of the GNU General Public License as published by 117bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * the Free Software Foundation; either version 2 of the License, or 127bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * (at your option) any later version. 137bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 147bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * This program is distributed in the hope that it will be useful, 157bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * but WITHOUT ANY WARRANTY; without even the implied warranty of 167bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 177bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * GNU General Public License for more details. 187bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 197bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * You should have received a copy of the GNU General Public License 207bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * along with this program; if not, write to the Free Software 215baf2f856a9c6625993234855b07680da1c8916fTobias Mueller * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 227bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 237bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 247bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 25dbecdeabb20e0ce11121819c63373f0afba57c58Marcus Brinkmann#include <config.h> 267bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include "dbus-internals.h" 277bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include "dbus-string.h" 287bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#define DBUS_CAN_USE_DBUS_STRING_PRIVATE 1 297bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include "dbus-string-private.h" 307bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 317bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** 327bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @addtogroup DBusString 337bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @{ 347bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 357bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 367bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** 377bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Returns whether a string ends with the given suffix 387bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 397bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @todo memcmp might make this faster. 407bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 417bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @param a the string 427bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @param c_str the C-style string 437bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @returns #TRUE if the string ends with the suffix 447bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 457bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtondbus_bool_t 467bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington_dbus_string_ends_with_c_str (const DBusString *a, 477bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington const char *c_str) 487bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 497bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington const unsigned char *ap; 507bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington const unsigned char *bp; 517bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington const unsigned char *a_end; 527bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington unsigned long c_str_len; 537bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington const DBusRealString *real_a = (const DBusRealString*) a; 547bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBUS_GENERIC_STRING_PREAMBLE (real_a); 557bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (c_str != NULL); 567bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 577bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington c_str_len = strlen (c_str); 587bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (((unsigned long)real_a->len) < c_str_len) 597bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington return FALSE; 607bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 617bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ap = real_a->str + (real_a->len - c_str_len); 627bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington bp = (const unsigned char*) c_str; 637bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington a_end = real_a->str + real_a->len; 647bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington while (ap != a_end) 657bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 667bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (*ap != *bp) 677bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington return FALSE; 687bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 697bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ++ap; 707bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ++bp; 717bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 727bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 737bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (*ap == '\0'); 747bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (*bp == '\0'); 757bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 767bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington return TRUE; 777bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington} 787bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 797bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** 807bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Find the given byte scanning backward from the given start. 817bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Sets *found to -1 if the byte is not found. 827bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 837bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @param str the string 847bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @param start the place to start scanning (will not find the byte at this point) 857bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @param byte the byte to find 867bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @param found return location for where it was found 877bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @returns #TRUE if found 887bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 897bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtondbus_bool_t 907bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington_dbus_string_find_byte_backward (const DBusString *str, 917bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int start, 927bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington unsigned char byte, 937bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int *found) 947bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 957bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int i; 967bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBUS_CONST_STRING_PREAMBLE (str); 977bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (start <= real->len); 987bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (start >= 0); 997bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (found != NULL); 1007bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1017bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = start - 1; 1027bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington while (i >= 0) 1037bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 1047bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (real->str[i] == byte) 1057bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington break; 1067bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1077bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington --i; 1087bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 1097bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1107bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (found) 1117bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington *found = i; 1127bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1137bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington return i >= 0; 1147bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington} 1157bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1167bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** @} */ 1177bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1187bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#ifdef DBUS_BUILD_TESTS 1197bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include "dbus-test.h" 1207bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include <stdio.h> 1217bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1227bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtonstatic void 1237bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtontest_max_len (DBusString *str, 1247bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int max_len) 1257bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 1267bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (max_len > 0) 1277bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 1287bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_set_length (str, max_len - 1)) 1297bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("setting len to one less than max should have worked"); 1307bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 1317bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1327bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_set_length (str, max_len)) 1337bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("setting len to max len should have worked"); 1347bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1357bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_set_length (str, max_len + 1)) 1367bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("setting len to one more than max len should not have worked"); 1377bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1387bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_set_length (str, 0)) 1397bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("setting len to zero should have worked"); 1407bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington} 1417bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1427bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtonstatic void 1437bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtontest_hex_roundtrip (const unsigned char *data, 1447bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int len) 1457bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 1467bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusString orig; 1477bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusString encoded; 1487bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusString decoded; 1497bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int end; 1507bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1517bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (len < 0) 1527bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington len = strlen (data); 1537bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1547bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&orig)) 1557bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not init string"); 1567bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1577bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&encoded)) 1587bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not init string"); 1597bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1607bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&decoded)) 1617bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not init string"); 1627bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1637bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append_len (&orig, data, len)) 1647bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("couldn't append orig data"); 1657bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1667bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_hex_encode (&orig, 0, &encoded, 0)) 1677bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not encode"); 1687bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1697bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_hex_decode (&encoded, 0, &end, &decoded, 0)) 1707bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not decode"); 1717bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1727bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&encoded) == end); 1737bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1747bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_equal (&orig, &decoded)) 1757bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 1767bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington const char *s; 1777bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1787bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington printf ("Original string %d bytes encoded %d bytes decoded %d bytes\n", 1797bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_get_length (&orig), 1807bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_get_length (&encoded), 1817bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_get_length (&decoded)); 1827bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington printf ("Original: %s\n", data); 1837bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington s = _dbus_string_get_const_data (&decoded); 1847bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington printf ("Decoded: %s\n", s); 1857bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("original string not the same as string decoded from hex"); 1867bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 1877bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1887bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&orig); 1897bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&encoded); 1907bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&decoded); 1917bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington} 1927bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1937bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtontypedef void (* TestRoundtripFunc) (const unsigned char *data, 1947bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int len); 1957bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtonstatic void 1967bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtontest_roundtrips (TestRoundtripFunc func) 1977bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 1987bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("Hello this is a string\n", -1); 1997bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("Hello this is a string\n1", -1); 2007bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("Hello this is a string\n12", -1); 2017bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("Hello this is a string\n123", -1); 2027bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("Hello this is a string\n1234", -1); 2037bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("Hello this is a string\n12345", -1); 2047bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("", 0); 2057bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("1", 1); 2067bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("12", 2); 2077bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("123", 3); 2087bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("1234", 4); 2097bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("12345", 5); 2107bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("", 1); 2117bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("1", 2); 2127bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("12", 3); 2137bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("123", 4); 2147bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("1234", 5); 2157bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("12345", 6); 2167bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 2177bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington unsigned char buf[512]; 2187bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int i; 2197bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2207bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = 0; 2217bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington while (i < _DBUS_N_ELEMENTS (buf)) 2227bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 2237bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington buf[i] = i; 2247bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ++i; 2257bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 2267bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = 0; 2277bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington while (i < _DBUS_N_ELEMENTS (buf)) 2287bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 2297bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) (buf, i); 2307bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ++i; 2317bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 2327bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 2337bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington} 2347bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2357bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#ifdef DBUS_BUILD_TESTS 2367bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/* The max length thing is sort of a historical artifact 2377bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * from a feature that turned out to be dumb; perhaps 2387bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * we should purge it entirely. The problem with 2397bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * the feature is that it looks like memory allocation 2407bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * failure, but is not a transient or resolvable failure. 2417bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 2427bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtonstatic void 2437bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtonset_max_length (DBusString *str, 2447bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int max_length) 2457bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 2467bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusRealString *real; 2477bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2487bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington real = (DBusRealString*) str; 2497bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2507bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington real->max_length = max_length; 2517bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington} 2527bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#endif /* DBUS_BUILD_TESTS */ 2537bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2547bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** 2557bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @ingroup DBusStringInternals 2567bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Unit test for DBusString. 2577bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 2587bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @todo Need to write tests for _dbus_string_copy() and 2597bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * _dbus_string_move() moving to/from each of start/middle/end of a 2607bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * string. Also need tests for _dbus_string_move_len () 2617bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 2627bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @returns #TRUE on success. 2637bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 2647bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtondbus_bool_t 2657bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington_dbus_string_test (void) 2667bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 2677bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusString str; 2687bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusString other; 2697bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int i, end; 2707bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington long v; 2717bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington double d; 2727bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 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 }; 2737bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington char *s; 2747bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington dbus_unichar_t ch; 2757bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2767bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = 0; 2777bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington while (i < _DBUS_N_ELEMENTS (lens)) 2787bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 2797bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 2807bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 2817bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2827bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington set_max_length (&str, lens[i]); 2837bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2847bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington test_max_len (&str, lens[i]); 2857bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 2867bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2877bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ++i; 2887bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 2897bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2907bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Test shortening and setting length */ 2917bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = 0; 2927bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington while (i < _DBUS_N_ELEMENTS (lens)) 2937bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 2947bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int j; 2957bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2967bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 2977bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 2987bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2997bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington set_max_length (&str, lens[i]); 3007bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3017bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_set_length (&str, lens[i])) 3027bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to set string length"); 3037bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3047bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington j = lens[i]; 3057bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington while (j > 0) 3067bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 3077bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == j); 3087bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (j > 0) 3097bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 3107bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_shorten (&str, 1); 3117bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == (j - 1)); 3127bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 3137bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington --j; 3147bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 3157bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3167bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 3177bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3187bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ++i; 3197bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 3207bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3218f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington /* Test equality */ 3228f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington if (!_dbus_string_init (&str)) 3238f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert_not_reached ("oom"); 3248f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington 3258f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington if (!_dbus_string_append (&str, "Hello World")) 3268f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert_not_reached ("oom"); 3278f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington 3288f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_string_init_const (&other, "H"); 3298f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 0, 1, &other, 0)); 3308f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 1, 0, &other, 1)); 3318f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_string_init_const (&other, "Hello"); 3328f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 0, 5, &other, 0)); 3338f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 1, 4, &other, 1)); 3348f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 2, 3, &other, 2)); 3358f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 3, 2, &other, 3)); 3368f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 4, 1, &other, 4)); 3378f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 5, 0, &other, 5)); 3388f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington 3398f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 0, 5, &str, 0)); 3408f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 1, 4, &str, 1)); 3418f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 2, 3, &str, 2)); 3428f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 3, 2, &str, 3)); 3438f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 4, 1, &str, 4)); 3448f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 5, 0, &str, 5)); 3458f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington 3468f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington 3478f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_string_init_const (&other, "World"); 3488f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 6, 5, &other, 0)); 3498f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 7, 4, &other, 1)); 3508f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 8, 3, &other, 2)); 3518f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 9, 2, &other, 3)); 3528f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 10, 1, &other, 4)); 3538f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 11, 0, &other, 5)); 3548f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington 3558f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 0, 5, &str, 6)); 3568f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 1, 4, &str, 7)); 3578f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 2, 3, &str, 8)); 3588f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 3, 2, &str, 9)); 3598f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 4, 1, &str, 10)); 3608f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 5, 0, &str, 11)); 3618f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington 3628f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_string_free (&str); 3638f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington 3647bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Test appending data */ 3657bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 3667bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 3677bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3687bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = 0; 3697bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington while (i < 10) 3707bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 3717bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "a")) 3727bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to append string to string\n"); 3737bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3747bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == i * 2 + 1); 3757bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3767bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append_byte (&str, 'b')) 3777bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to append byte to string\n"); 3787bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3797bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == i * 2 + 2); 3807bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3817bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ++i; 3827bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 3837bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3847bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 3857bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3867bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Check steal_data */ 3877bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3887bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 3897bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 3907bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3917bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "Hello World")) 3927bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not append to string"); 3937bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3947bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = _dbus_string_get_length (&str); 3957bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3967bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_steal_data (&str, &s)) 3977bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to steal data"); 3987bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3997bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == 0); 4007bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (((int)strlen (s)) == i); 4017bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4027bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington dbus_free (s); 4037bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4047bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Check move */ 4057bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4067bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "Hello World")) 4077bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not append to string"); 4087bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4097bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = _dbus_string_get_length (&str); 4107bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4117bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&other)) 4127bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not init string"); 4137bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4147bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_move (&str, 0, &other, 0)) 4157bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not move"); 4167bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4177bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == 0); 4187bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i); 4197bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4207bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "Hello World")) 4217bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not append to string"); 4227bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4237bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_move (&str, 0, &other, _dbus_string_get_length (&other))) 4247bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not move"); 4257bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4267bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == 0); 4277bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i * 2); 4287bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4297bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "Hello World")) 4307bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not append to string"); 4317bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4327bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_move (&str, 0, &other, _dbus_string_get_length (&other) / 2)) 4337bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not move"); 4347bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4357bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == 0); 4367bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i * 3); 4377bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4387bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&other); 4397bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4407bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Check copy */ 4417bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4427bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "Hello World")) 4437bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not append to string"); 4447bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4457bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = _dbus_string_get_length (&str); 4467bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4477bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&other)) 4487bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not init string"); 4497bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4507bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_copy (&str, 0, &other, 0)) 4517bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not copy"); 4527bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4537bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == i); 4547bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i); 4557bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4567bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_copy (&str, 0, &other, _dbus_string_get_length (&other))) 4577bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not copy"); 4587bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4597bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == i); 4607bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i * 2); 4617bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_equal_c_str (&other, 4627bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington "Hello WorldHello World")); 4637bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4647bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_copy (&str, 0, &other, _dbus_string_get_length (&other) / 2)) 4657bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not copy"); 4667bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4677bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == i); 4687bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i * 3); 4697bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_equal_c_str (&other, 4707bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington "Hello WorldHello WorldHello World")); 4717bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4727bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 4737bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&other); 4747bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4757bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Check replace */ 4767bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4777bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 4787bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 4797bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4807bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "Hello World")) 4817bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not append to string"); 4827bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4837bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = _dbus_string_get_length (&str); 4847bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4857bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&other)) 4867bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not init string"); 4877bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4887bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_replace_len (&str, 0, _dbus_string_get_length (&str), 4897bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington &other, 0, _dbus_string_get_length (&other))) 4907bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not replace"); 4917bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4927bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == i); 4937bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i); 4947bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_equal_c_str (&other, "Hello World")); 4957bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4967bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_replace_len (&str, 0, _dbus_string_get_length (&str), 4977bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington &other, 5, 1)) 4987bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not replace center space"); 4997bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5007bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == i); 5017bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i * 2 - 1); 5027bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_equal_c_str (&other, 5037bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington "HelloHello WorldWorld")); 5047bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5057bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5067bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_replace_len (&str, 1, 1, 5077bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington &other, 5087bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_get_length (&other) - 1, 5097bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1)) 5107bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not replace end character"); 5117bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5127bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == i); 5137bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i * 2 - 1); 5147bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_equal_c_str (&other, 5157bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington "HelloHello WorldWorle")); 5167bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5177bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 5187bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&other); 5197bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5207bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Check append/get unichar */ 5217bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5227bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 5237bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 5247bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5257bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ch = 0; 5267bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append_unichar (&str, 0xfffc)) 5277bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to append unichar"); 5287bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5297bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_get_unichar (&str, 0, &ch, &i); 5307bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5317bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (ch == 0xfffc); 5327bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == _dbus_string_get_length (&str)); 5337bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5347bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 5357bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5367bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Check insert/set/get byte */ 5377bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5387bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 5397bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 5407bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5417bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "Hello")) 5427bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to append Hello"); 5437bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5447bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 0) == 'H'); 5457bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 1) == 'e'); 5467bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 2) == 'l'); 5477bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 3) == 'l'); 5487bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 4) == 'o'); 5497bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5507bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_set_byte (&str, 1, 'q'); 5517bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 1) == 'q'); 5527bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5537bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_insert_bytes (&str, 0, 1, 255)) 5547bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("can't insert byte"); 5557bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5567bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_insert_bytes (&str, 2, 4, 'Z')) 5577bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("can't insert byte"); 5587bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5597bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_insert_bytes (&str, _dbus_string_get_length (&str), 1, 'W')) 5607bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("can't insert byte"); 5617bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5627bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 0) == 255); 5637bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 1) == 'H'); 5647bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 2) == 'Z'); 5657bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 3) == 'Z'); 5667bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 4) == 'Z'); 5677bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 5) == 'Z'); 5687bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 6) == 'q'); 5697bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 7) == 'l'); 5707bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 8) == 'l'); 5717bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 9) == 'o'); 5727bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 10) == 'W'); 5737bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5747bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 5757bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5767bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Check append/parse int/double */ 5777bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5787bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 5797bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 5807bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5817bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append_int (&str, 27)) 5827bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to append int"); 5837bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5847bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = _dbus_string_get_length (&str); 5857bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5867bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_parse_int (&str, 0, &v, &end)) 5877bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to parse int"); 5887bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5897bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (v == 27); 5907bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (end == i); 5917bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5927bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 5937bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5947bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 5957bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 5967bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5977bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append_double (&str, 50.3)) 5987bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to append float"); 5997bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6007bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = _dbus_string_get_length (&str); 6017bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6027bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_parse_double (&str, 0, &d, &end)) 6037bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to parse float"); 6047bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6057bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (d > (50.3 - 1e-6) && d < (50.3 + 1e-6)); 6067bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (end == i); 6077bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6087bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 6097bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6107bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Test find */ 6117bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 6127bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 6137bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6147bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "Hello")) 6157bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("couldn't append to string"); 6167bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6177bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find (&str, 0, "He", &i)) 6187bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("didn't find 'He'"); 6197bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 0); 6207bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6217bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find (&str, 0, "Hello", &i)) 6227bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("didn't find 'Hello'"); 6237bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 0); 6247bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6257bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find (&str, 0, "ello", &i)) 6267bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("didn't find 'ello'"); 6277bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 1); 6287bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6297bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find (&str, 0, "lo", &i)) 6307bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("didn't find 'lo'"); 6317bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 3); 6327bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6337bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find (&str, 2, "lo", &i)) 6347bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("didn't find 'lo'"); 6357bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 3); 6367bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6377bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_find (&str, 4, "lo", &i)) 6387bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("did find 'lo'"); 6397bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6407bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find (&str, 0, "l", &i)) 6417bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("didn't find 'l'"); 6427bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 2); 6437bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6447bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find (&str, 0, "H", &i)) 6457bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("didn't find 'H'"); 6467bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 0); 6477bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6487bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find (&str, 0, "", &i)) 6497bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("didn't find ''"); 6507bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 0); 6517bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6527bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_find (&str, 0, "Hello!", NULL)) 6537bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did find 'Hello!'"); 6547bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6557bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_find (&str, 0, "Oh, Hello", NULL)) 6567bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did find 'Oh, Hello'"); 6577bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6587bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_find (&str, 0, "ill", NULL)) 6597bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did find 'ill'"); 6607bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6617bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_find (&str, 0, "q", NULL)) 6627bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did find 'q'"); 6637bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6647bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find_to (&str, 0, 2, "He", NULL)) 6657bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Didn't find 'He'"); 6667bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6677bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_find_to (&str, 0, 2, "Hello", NULL)) 6687bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did find 'Hello'"); 6697bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6707bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find_byte_backward (&str, _dbus_string_get_length (&str), 'H', &i)) 6717bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did not find 'H'"); 6727bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 0); 6737bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6747bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find_byte_backward (&str, _dbus_string_get_length (&str), 'o', &i)) 6757bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did not find 'o'"); 6767bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == _dbus_string_get_length (&str) - 1); 6777bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6787bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_find_byte_backward (&str, _dbus_string_get_length (&str) - 1, 'o', &i)) 6797bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did find 'o'"); 6807bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == -1); 6817bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6827bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_find_byte_backward (&str, 1, 'e', &i)) 6837bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did find 'e'"); 6847bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == -1); 6857bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6867bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find_byte_backward (&str, 2, 'e', &i)) 6877bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Didn't find 'e'"); 6887bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 1); 6897bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6907bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 6917bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6927bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Hex encoding */ 6937bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_init_const (&str, "cafebabe, this is a bogus hex string"); 6947bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&other)) 6957bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not init string"); 6967bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6977bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_hex_decode (&str, 0, &end, &other, 0)) 6987bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("deccoded bogus hex string with no error"); 6997bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 7007bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (end == 8); 7017bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 7027bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&other); 7037bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 7047bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington test_roundtrips (test_hex_roundtrip); 7057bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 7067bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 707cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 708cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker { 709a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington int found, found_len; 710cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 711a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_string_init_const (&str, "012\r\n567\n90"); 712a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 713a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_find_eol (&str, 0, &found, &found_len) || found != 3 || found_len != 2) 714a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("Did not find '\\r\\n'"); 715a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (found != 3 || found_len != 2) 716a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("invalid return values"); 717a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 718a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_find_eol (&str, 5, &found, &found_len)) 719a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("Did not find '\\n'"); 720a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (found != 8 || found_len != 1) 721a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("invalid return values"); 722a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 723a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (_dbus_string_find_eol (&str, 9, &found, &found_len)) 724a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("Found not expected '\\n'"); 725a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington else if (found != 11 || found_len != 0) 726a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("invalid return values '\\n'"); 727a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 728a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington found = -1; 729a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington found_len = -1; 730a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_string_init_const (&str, ""); 731a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (_dbus_string_find_eol (&str, 0, &found, &found_len)) 732a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("found an eol in an empty string"); 733a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (found == 0); 734a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (found_len == 0); 735a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 736a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington found = -1; 737a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington found_len = -1; 738a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_string_init_const (&str, "foobar"); 739a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (_dbus_string_find_eol (&str, 0, &found, &found_len)) 740a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("found eol in string that lacks one"); 741a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (found == 6); 742a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (found_len == 0); 743a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 744a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington found = -1; 745a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington found_len = -1; 746a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_string_init_const (&str, "foobar\n"); 747a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_find_eol (&str, 0, &found, &found_len)) 748a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("did not find eol in string that has one at end"); 749a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (found == 6); 750a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (found_len == 1); 751a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington } 752cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 753a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington { 754a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington DBusString line; 755cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 756a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington#define FIRST_LINE "this is a line" 757a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington#define SECOND_LINE "this is a second line" 758a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington /* third line is empty */ 759a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington#define THIRD_LINE "" 760a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington#define FOURTH_LINE "this is a fourth line" 761a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 762a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_init (&str)) 763a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("no memory"); 764cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 765a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_append (&str, FIRST_LINE "\n" SECOND_LINE "\r\n" THIRD_LINE "\n" FOURTH_LINE)) 766a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("no memory"); 767a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 768a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_init (&line)) 769a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("no memory"); 770a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 771a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_pop_line (&str, &line)) 772a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("failed to pop first line"); 773cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 774a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (_dbus_string_equal_c_str (&line, FIRST_LINE)); 775a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 776a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_pop_line (&str, &line)) 777a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("failed to pop second line"); 778cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 779a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (_dbus_string_equal_c_str (&line, SECOND_LINE)); 780a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 781a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_pop_line (&str, &line)) 782a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("failed to pop third line"); 783cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 784a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (_dbus_string_equal_c_str (&line, THIRD_LINE)); 785a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 786a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_pop_line (&str, &line)) 787a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("failed to pop fourth line"); 788cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 789a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (_dbus_string_equal_c_str (&line, FOURTH_LINE)); 790a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 791a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_string_free (&str); 792a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_string_free (&line); 793a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington } 7948c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie 7958c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie { 7968c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie if (!_dbus_string_init (&str)) 7978c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie _dbus_assert_not_reached ("no memory"); 7988c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie 7998c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie for (i = 0; i < 10000; i++) 8008c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie if (!_dbus_string_append (&str, "abcdefghijklmnopqrstuvwxyz")) 8018c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie _dbus_assert_not_reached ("no memory"); 8028c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie 8038c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie if (!_dbus_string_set_length (&str, 10)) 8048c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie _dbus_assert_not_reached ("failed to set length"); 8058c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie 8068c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie /* actually compact */ 8078c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie if (!_dbus_string_compact (&str, 2048)) 8088c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie _dbus_assert_not_reached ("failed to compact after set_length"); 8098c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie 8108c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie /* peek inside to make sure it worked */ 8118c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie if (((DBusRealString *)&str)->allocated > 30) 8128c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie _dbus_assert_not_reached ("compacting string didn't do anything"); 8138c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie 8148c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie if (!_dbus_string_equal_c_str (&str, "abcdefghij")) 8158c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie _dbus_assert_not_reached ("unexpected content after compact"); 8168c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie 8178c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie /* compact nothing */ 8188c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie if (!_dbus_string_compact (&str, 2048)) 8198c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie _dbus_assert_not_reached ("failed to compact 2nd time"); 8208c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie 8218c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie if (!_dbus_string_equal_c_str (&str, "abcdefghij")) 8228c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie _dbus_assert_not_reached ("unexpected content after 2nd compact"); 8238c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie 8248c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie /* and make sure it still works...*/ 8258c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie if (!_dbus_string_append (&str, "123456")) 8268c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie _dbus_assert_not_reached ("failed to append after compact"); 8278c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie 8288c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie if (!_dbus_string_equal_c_str (&str, "abcdefghij123456")) 8298c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie _dbus_assert_not_reached ("unexpected content after append"); 8308c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie 8318c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie /* after growing automatically, this should do nothing */ 8328c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie if (!_dbus_string_compact (&str, 20000)) 8338c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie _dbus_assert_not_reached ("failed to compact after grow"); 8348c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie 8358c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie /* but this one will do something */ 8368c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie if (!_dbus_string_compact (&str, 0)) 8378c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie _dbus_assert_not_reached ("failed to compact after grow"); 8388c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie 8398c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie if (!_dbus_string_equal_c_str (&str, "abcdefghij123456")) 8408c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie _dbus_assert_not_reached ("unexpected content"); 8418c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie 8428c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie if (!_dbus_string_append (&str, "!@#$%")) 8438c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie _dbus_assert_not_reached ("failed to append after compact"); 8448c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie 8458c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie if (!_dbus_string_equal_c_str (&str, "abcdefghij123456!@#$%")) 8468c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie _dbus_assert_not_reached ("unexpected content"); 8478c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie 8488c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie _dbus_string_free (&str); 8498c6b0ab3f7e437362112eeaf83a566475b85d27cRyan Lortie } 8500e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode 8510e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode { 8520e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode const char two_strings[] = "one\ttwo"; 8530e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode 8540e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode if (!_dbus_string_init (&str)) 8550e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode _dbus_assert_not_reached ("no memory"); 8560e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode 8570e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode if (!_dbus_string_init (&other)) 8580e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode _dbus_assert_not_reached ("no memory"); 8590e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode 8600e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode if (!_dbus_string_append (&str, two_strings)) 8610e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode _dbus_assert_not_reached ("no memory"); 8620e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode 8630e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode if (!_dbus_string_split_on_byte (&str, '\t', &other)) 8640e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode _dbus_assert_not_reached ("no memory or delimiter not found"); 8650e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode 8660e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode if (strcmp (_dbus_string_get_data (&str), "one") != 0) 8670e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode _dbus_assert_not_reached ("left side after split on tab is wrong"); 8680e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode 8690e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode if (strcmp (_dbus_string_get_data (&other), "two") != 0) 8700e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode _dbus_assert_not_reached ("right side after split on tab is wrong"); 8710e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode 8720e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode _dbus_string_free (&str); 8730e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode _dbus_string_free (&other); 8740e3ec9cec0f6740acd39d6e6983f419e20461282Ray Strode } 875a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker 876a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker { 877a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker const char upper_string[] = "TOUPPERSTRING"; 878a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker const char lower_string[] = "toupperstring"; 879a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker const char lower2_string[] = "toupperSTRING"; 880a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker 881a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker if (!_dbus_string_init (&str)) 882a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker _dbus_assert_not_reached ("no memory"); 883a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker 884a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker if (!_dbus_string_append (&str, upper_string)) 885a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker _dbus_assert_not_reached ("no memory"); 886a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker 887a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker _dbus_string_tolower_ascii (&str, 0, _dbus_string_get_length(&str)); 888a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker 889a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker if (!_dbus_string_equal_c_str (&str, lower_string)) 890a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker _dbus_assert_not_reached ("_dbus_string_tolower_ascii failed"); 891a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker 892a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker _dbus_string_free (&str); 893a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker 894a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker if (!_dbus_string_init (&str)) 895a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker _dbus_assert_not_reached ("no memory"); 896a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker 897a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker if (!_dbus_string_append (&str, upper_string)) 898a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker _dbus_assert_not_reached ("no memory"); 899a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker 900a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker _dbus_string_tolower_ascii (&str, 0, 7); 901a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker 902a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker if (!_dbus_string_equal_c_str (&str, lower2_string)) 903a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker _dbus_assert_not_reached ("_dbus_string_tolower_ascii failed in partial conversion"); 904a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker 905a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker _dbus_string_free (&str); 906a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker } 907a06c771d2b931f0e5ae600d22a3e07208f16b0a3Ralf Habacker 90847e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker { 90947e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker const char lower_string[] = "toupperstring"; 91047e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker const char upper_string[] = "TOUPPERSTRING"; 91147e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker const char upper2_string[] = "TOUPPERstring"; 91247e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker 91347e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker if (!_dbus_string_init (&str)) 91447e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker _dbus_assert_not_reached ("no memory"); 91547e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker 91647e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker if (!_dbus_string_append (&str, lower_string)) 91747e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker _dbus_assert_not_reached ("no memory"); 91847e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker 91947e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker _dbus_string_toupper_ascii (&str, 0, _dbus_string_get_length(&str)); 92047e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker 92147e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker if (!_dbus_string_equal_c_str (&str, upper_string)) 92247e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker _dbus_assert_not_reached ("_dbus_string_toupper_ascii failed"); 92347e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker 92447e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker _dbus_string_free (&str); 92547e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker 92647e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker if (!_dbus_string_init (&str)) 92747e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker _dbus_assert_not_reached ("no memory"); 92847e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker 92947e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker if (!_dbus_string_append (&str, lower_string)) 93047e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker _dbus_assert_not_reached ("no memory"); 93147e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker 93247e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker _dbus_string_toupper_ascii (&str, 0, 7); 93347e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker 93447e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker if (!_dbus_string_equal_c_str (&str, upper2_string)) 93547e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker _dbus_assert_not_reached ("_dbus_string_toupper_ascii failed in partial conversion"); 93647e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker 93747e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker _dbus_string_free (&str); 93847e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker } 93947e37899a3daf33ab799f674c2dc8ce869cdd5faRalf Habacker 940a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington return TRUE; 941a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington} 942cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 943a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington#endif /* DBUS_BUILD_TESTS */ 944