dbus-string-util.c revision a789b7b38cb4f4540a41444cbd64bf7ada2d60d2
17bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/* -*- mode: C; c-file-style: "gnu" -*- */ 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 217bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 227bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 237bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 247bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 257bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include "dbus-internals.h" 267bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include "dbus-string.h" 277bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#define DBUS_CAN_USE_DBUS_STRING_PRIVATE 1 287bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include "dbus-string-private.h" 297bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 307bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** 317bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @addtogroup DBusString 327bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @{ 337bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 347bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 357bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** 367bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Returns whether a string ends with the given suffix 377bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 387bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @todo memcmp might make this faster. 397bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 407bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @param a the string 417bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @param c_str the C-style string 427bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @returns #TRUE if the string ends with the suffix 437bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 447bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtondbus_bool_t 457bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington_dbus_string_ends_with_c_str (const DBusString *a, 467bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington const char *c_str) 477bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 487bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington const unsigned char *ap; 497bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington const unsigned char *bp; 507bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington const unsigned char *a_end; 517bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington unsigned long c_str_len; 527bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington const DBusRealString *real_a = (const DBusRealString*) a; 537bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBUS_GENERIC_STRING_PREAMBLE (real_a); 547bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (c_str != NULL); 557bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 567bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington c_str_len = strlen (c_str); 577bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (((unsigned long)real_a->len) < c_str_len) 587bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington return FALSE; 597bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 607bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ap = real_a->str + (real_a->len - c_str_len); 617bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington bp = (const unsigned char*) c_str; 627bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington a_end = real_a->str + real_a->len; 637bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington while (ap != a_end) 647bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 657bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (*ap != *bp) 667bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington return FALSE; 677bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 687bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ++ap; 697bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ++bp; 707bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 717bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 727bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (*ap == '\0'); 737bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (*bp == '\0'); 747bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 757bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington return TRUE; 767bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington} 777bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 787bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** 797bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Find the given byte scanning backward from the given start. 807bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Sets *found to -1 if the byte is not found. 817bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 827bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @param str the string 837bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @param start the place to start scanning (will not find the byte at this point) 847bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @param byte the byte to find 857bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @param found return location for where it was found 867bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @returns #TRUE if found 877bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 887bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtondbus_bool_t 897bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington_dbus_string_find_byte_backward (const DBusString *str, 907bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int start, 917bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington unsigned char byte, 927bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int *found) 937bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 947bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int i; 957bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBUS_CONST_STRING_PREAMBLE (str); 967bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (start <= real->len); 977bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (start >= 0); 987bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (found != NULL); 997bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1007bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = start - 1; 1017bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington while (i >= 0) 1027bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 1037bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (real->str[i] == byte) 1047bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington break; 1057bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1067bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington --i; 1077bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 1087bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1097bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (found) 1107bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington *found = i; 1117bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1127bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington return i >= 0; 1137bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington} 1147bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1157bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** @} */ 1167bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1177bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#ifdef DBUS_BUILD_TESTS 1187bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include "dbus-test.h" 1197bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include <stdio.h> 1207bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1217bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtonstatic void 1227bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtontest_max_len (DBusString *str, 1237bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int max_len) 1247bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 1257bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (max_len > 0) 1267bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 1277bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_set_length (str, max_len - 1)) 1287bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("setting len to one less than max should have worked"); 1297bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 1307bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1317bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_set_length (str, max_len)) 1327bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("setting len to max len should have worked"); 1337bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1347bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_set_length (str, max_len + 1)) 1357bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("setting len to one more than max len should not have worked"); 1367bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1377bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_set_length (str, 0)) 1387bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("setting len to zero should have worked"); 1397bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington} 1407bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1417bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtonstatic void 1427bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtontest_hex_roundtrip (const unsigned char *data, 1437bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int len) 1447bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 1457bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusString orig; 1467bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusString encoded; 1477bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusString decoded; 1487bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int end; 1497bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1507bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (len < 0) 1517bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington len = strlen (data); 1527bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1537bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&orig)) 1547bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not init string"); 1557bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1567bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&encoded)) 1577bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not init string"); 1587bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1597bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&decoded)) 1607bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not init string"); 1617bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1627bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append_len (&orig, data, len)) 1637bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("couldn't append orig data"); 1647bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1657bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_hex_encode (&orig, 0, &encoded, 0)) 1667bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not encode"); 1677bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1687bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_hex_decode (&encoded, 0, &end, &decoded, 0)) 1697bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not decode"); 1707bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1717bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&encoded) == end); 1727bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1737bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_equal (&orig, &decoded)) 1747bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 1757bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington const char *s; 1767bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1777bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington printf ("Original string %d bytes encoded %d bytes decoded %d bytes\n", 1787bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_get_length (&orig), 1797bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_get_length (&encoded), 1807bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_get_length (&decoded)); 1817bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington printf ("Original: %s\n", data); 1827bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington s = _dbus_string_get_const_data (&decoded); 1837bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington printf ("Decoded: %s\n", s); 1847bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("original string not the same as string decoded from hex"); 1857bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 1867bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1877bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&orig); 1887bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&encoded); 1897bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&decoded); 1907bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington} 1917bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1927bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtontypedef void (* TestRoundtripFunc) (const unsigned char *data, 1937bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int len); 1947bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtonstatic void 1957bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtontest_roundtrips (TestRoundtripFunc func) 1967bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 1977bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("Hello this is a string\n", -1); 1987bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("Hello this is a string\n1", -1); 1997bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("Hello this is a string\n12", -1); 2007bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("Hello this is a string\n123", -1); 2017bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("Hello this is a string\n1234", -1); 2027bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("Hello this is a string\n12345", -1); 2037bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("", 0); 2047bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("1", 1); 2057bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("12", 2); 2067bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("123", 3); 2077bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("1234", 4); 2087bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("12345", 5); 2097bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("", 1); 2107bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("1", 2); 2117bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("12", 3); 2127bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("123", 4); 2137bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("1234", 5); 2147bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) ("12345", 6); 2157bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 2167bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington unsigned char buf[512]; 2177bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int i; 2187bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2197bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = 0; 2207bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington while (i < _DBUS_N_ELEMENTS (buf)) 2217bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 2227bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington buf[i] = i; 2237bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ++i; 2247bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 2257bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = 0; 2267bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington while (i < _DBUS_N_ELEMENTS (buf)) 2277bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 2287bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington (* func) (buf, i); 2297bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ++i; 2307bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 2317bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 2327bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington} 2337bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2347bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#ifdef DBUS_BUILD_TESTS 2357bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/* The max length thing is sort of a historical artifact 2367bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * from a feature that turned out to be dumb; perhaps 2377bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * we should purge it entirely. The problem with 2387bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * the feature is that it looks like memory allocation 2397bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * failure, but is not a transient or resolvable failure. 2407bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 2417bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtonstatic void 2427bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtonset_max_length (DBusString *str, 2437bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int max_length) 2447bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 2457bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusRealString *real; 2467bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2477bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington real = (DBusRealString*) str; 2487bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2497bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington real->max_length = max_length; 2507bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington} 2517bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#endif /* DBUS_BUILD_TESTS */ 2527bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2537bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** 2547bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @ingroup DBusStringInternals 2557bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Unit test for DBusString. 2567bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 2577bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @todo Need to write tests for _dbus_string_copy() and 2587bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * _dbus_string_move() moving to/from each of start/middle/end of a 2597bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * string. Also need tests for _dbus_string_move_len () 2607bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 2617bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @returns #TRUE on success. 2627bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 2637bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtondbus_bool_t 2647bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington_dbus_string_test (void) 2657bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 2667bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusString str; 2677bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusString other; 2687bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int i, end; 2697bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington long v; 2707bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington double d; 2717bf62e31a3c820852271768fafc04ba95c31a19fHavoc 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 }; 2727bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington char *s; 2737bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington dbus_unichar_t ch; 2747bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2757bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = 0; 2767bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington while (i < _DBUS_N_ELEMENTS (lens)) 2777bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 2787bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 2797bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 2807bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2817bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington set_max_length (&str, lens[i]); 2827bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2837bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington test_max_len (&str, lens[i]); 2847bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 2857bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2867bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ++i; 2877bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 2887bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2897bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Test shortening and setting length */ 2907bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = 0; 2917bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington while (i < _DBUS_N_ELEMENTS (lens)) 2927bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 2937bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int j; 2947bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2957bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 2967bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 2977bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 2987bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington set_max_length (&str, lens[i]); 2997bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3007bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_set_length (&str, lens[i])) 3017bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to set string length"); 3027bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3037bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington j = lens[i]; 3047bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington while (j > 0) 3057bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 3067bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == j); 3077bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (j > 0) 3087bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 3097bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_shorten (&str, 1); 3107bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == (j - 1)); 3117bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 3127bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington --j; 3137bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 3147bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3157bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 3167bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3177bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ++i; 3187bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 3197bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3208f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington /* Test equality */ 3218f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington if (!_dbus_string_init (&str)) 3228f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert_not_reached ("oom"); 3238f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington 3248f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington if (!_dbus_string_append (&str, "Hello World")) 3258f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert_not_reached ("oom"); 3268f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington 3278f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_string_init_const (&other, "H"); 3288f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 0, 1, &other, 0)); 3298f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 1, 0, &other, 1)); 3308f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_string_init_const (&other, "Hello"); 3318f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 0, 5, &other, 0)); 3328f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 1, 4, &other, 1)); 3338f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 2, 3, &other, 2)); 3348f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 3, 2, &other, 3)); 3358f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 4, 1, &other, 4)); 3368f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 5, 0, &other, 5)); 3378f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington 3388f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 0, 5, &str, 0)); 3398f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 1, 4, &str, 1)); 3408f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 2, 3, &str, 2)); 3418f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 3, 2, &str, 3)); 3428f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 4, 1, &str, 4)); 3438f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 5, 0, &str, 5)); 3448f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington 3458f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington 3468f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_string_init_const (&other, "World"); 3478f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 6, 5, &other, 0)); 3488f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 7, 4, &other, 1)); 3498f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 8, 3, &other, 2)); 3508f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 9, 2, &other, 3)); 3518f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 10, 1, &other, 4)); 3528f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&str, 11, 0, &other, 5)); 3538f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington 3548f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 0, 5, &str, 6)); 3558f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 1, 4, &str, 7)); 3568f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 2, 3, &str, 8)); 3578f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 3, 2, &str, 9)); 3588f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 4, 1, &str, 10)); 3598f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_assert (_dbus_string_equal_substring (&other, 5, 0, &str, 11)); 3608f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington 3618f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington _dbus_string_free (&str); 3628f04e1e01f51fa9bef564dbaf29be59694407d21Havoc Pennington 3637bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Test appending data */ 3647bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 3657bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 3667bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3677bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = 0; 3687bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington while (i < 10) 3697bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington { 3707bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "a")) 3717bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to append string to string\n"); 3727bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3737bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == i * 2 + 1); 3747bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3757bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append_byte (&str, 'b')) 3767bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to append byte to string\n"); 3777bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3787bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == i * 2 + 2); 3797bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3807bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ++i; 3817bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington } 3827bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3837bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 3847bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3857bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Check steal_data */ 3867bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3877bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 3887bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 3897bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3907bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "Hello World")) 3917bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not append to string"); 3927bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3937bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = _dbus_string_get_length (&str); 3947bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3957bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_steal_data (&str, &s)) 3967bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to steal data"); 3977bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 3987bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == 0); 3997bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (((int)strlen (s)) == i); 4007bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4017bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington dbus_free (s); 4027bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4037bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Check move */ 4047bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4057bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "Hello World")) 4067bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not append to string"); 4077bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4087bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = _dbus_string_get_length (&str); 4097bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4107bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&other)) 4117bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not init string"); 4127bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4137bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_move (&str, 0, &other, 0)) 4147bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not move"); 4157bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4167bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == 0); 4177bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i); 4187bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4197bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "Hello World")) 4207bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not append to string"); 4217bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4227bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_move (&str, 0, &other, _dbus_string_get_length (&other))) 4237bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not move"); 4247bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4257bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == 0); 4267bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i * 2); 4277bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4287bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "Hello World")) 4297bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not append to string"); 4307bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4317bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_move (&str, 0, &other, _dbus_string_get_length (&other) / 2)) 4327bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not move"); 4337bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4347bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == 0); 4357bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i * 3); 4367bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4377bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&other); 4387bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4397bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Check copy */ 4407bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4417bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "Hello World")) 4427bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not append to string"); 4437bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4447bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = _dbus_string_get_length (&str); 4457bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4467bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&other)) 4477bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not init string"); 4487bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4497bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_copy (&str, 0, &other, 0)) 4507bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not copy"); 4517bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4527bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == i); 4537bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i); 4547bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4557bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_copy (&str, 0, &other, _dbus_string_get_length (&other))) 4567bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not copy"); 4577bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4587bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == i); 4597bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i * 2); 4607bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_equal_c_str (&other, 4617bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington "Hello WorldHello World")); 4627bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4637bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_copy (&str, 0, &other, _dbus_string_get_length (&other) / 2)) 4647bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not copy"); 4657bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4667bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == i); 4677bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i * 3); 4687bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_equal_c_str (&other, 4697bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington "Hello WorldHello WorldHello World")); 4707bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4717bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 4727bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&other); 4737bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4747bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Check replace */ 4757bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4767bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 4777bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 4787bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4797bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "Hello World")) 4807bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not append to string"); 4817bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4827bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = _dbus_string_get_length (&str); 4837bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4847bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&other)) 4857bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not init string"); 4867bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4877bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_replace_len (&str, 0, _dbus_string_get_length (&str), 4887bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington &other, 0, _dbus_string_get_length (&other))) 4897bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not replace"); 4907bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4917bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == i); 4927bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i); 4937bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_equal_c_str (&other, "Hello World")); 4947bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4957bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_replace_len (&str, 0, _dbus_string_get_length (&str), 4967bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington &other, 5, 1)) 4977bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not replace center space"); 4987bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 4997bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == i); 5007bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i * 2 - 1); 5017bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_equal_c_str (&other, 5027bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington "HelloHello WorldWorld")); 5037bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5047bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5057bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_replace_len (&str, 1, 1, 5067bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington &other, 5077bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_get_length (&other) - 1, 5087bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1)) 5097bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not replace end character"); 5107bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5117bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&str) == i); 5127bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_length (&other) == i * 2 - 1); 5137bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_equal_c_str (&other, 5147bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington "HelloHello WorldWorle")); 5157bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5167bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 5177bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&other); 5187bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5197bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Check append/get unichar */ 5207bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5217bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 5227bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 5237bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5247bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington ch = 0; 5257bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append_unichar (&str, 0xfffc)) 5267bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to append unichar"); 5277bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5287bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_get_unichar (&str, 0, &ch, &i); 5297bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5307bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (ch == 0xfffc); 5317bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == _dbus_string_get_length (&str)); 5327bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5337bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 5347bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5357bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Check insert/set/get byte */ 5367bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5377bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 5387bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 5397bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5407bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "Hello")) 5417bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to append Hello"); 5427bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5437bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 0) == 'H'); 5447bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 1) == 'e'); 5457bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 2) == 'l'); 5467bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 3) == 'l'); 5477bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 4) == 'o'); 5487bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5497bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_set_byte (&str, 1, 'q'); 5507bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 1) == 'q'); 5517bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5527bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_insert_bytes (&str, 0, 1, 255)) 5537bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("can't insert byte"); 5547bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5557bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_insert_bytes (&str, 2, 4, 'Z')) 5567bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("can't insert byte"); 5577bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5587bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_insert_bytes (&str, _dbus_string_get_length (&str), 1, 'W')) 5597bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("can't insert byte"); 5607bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5617bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 0) == 255); 5627bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 1) == 'H'); 5637bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 2) == 'Z'); 5647bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 3) == 'Z'); 5657bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 4) == 'Z'); 5667bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 5) == 'Z'); 5677bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 6) == 'q'); 5687bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 7) == 'l'); 5697bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 8) == 'l'); 5707bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 9) == 'o'); 5717bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (_dbus_string_get_byte (&str, 10) == 'W'); 5727bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5737bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 5747bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5757bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Check append/parse int/double */ 5767bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5777bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 5787bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 5797bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5807bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append_int (&str, 27)) 5817bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to append int"); 5827bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5837bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = _dbus_string_get_length (&str); 5847bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5857bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_parse_int (&str, 0, &v, &end)) 5867bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to parse int"); 5877bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5887bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (v == 27); 5897bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (end == i); 5907bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5917bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 5927bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5937bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 5947bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 5957bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5967bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append_double (&str, 50.3)) 5977bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to append float"); 5987bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 5997bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington i = _dbus_string_get_length (&str); 6007bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6017bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_parse_double (&str, 0, &d, &end)) 6027bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to parse float"); 6037bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6047bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (d > (50.3 - 1e-6) && d < (50.3 + 1e-6)); 6057bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (end == i); 6067bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6077bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 6087bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6097bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Test find */ 6107bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&str)) 6117bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("failed to init string"); 6127bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6137bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_append (&str, "Hello")) 6147bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("couldn't append to string"); 6157bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6167bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find (&str, 0, "He", &i)) 6177bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("didn't find 'He'"); 6187bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 0); 6197bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6207bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find (&str, 0, "Hello", &i)) 6217bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("didn't find 'Hello'"); 6227bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 0); 6237bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6247bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find (&str, 0, "ello", &i)) 6257bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("didn't find 'ello'"); 6267bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 1); 6277bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6287bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find (&str, 0, "lo", &i)) 6297bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("didn't find 'lo'"); 6307bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 3); 6317bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6327bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find (&str, 2, "lo", &i)) 6337bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("didn't find 'lo'"); 6347bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 3); 6357bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6367bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_find (&str, 4, "lo", &i)) 6377bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("did find 'lo'"); 6387bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6397bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find (&str, 0, "l", &i)) 6407bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("didn't find 'l'"); 6417bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 2); 6427bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6437bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find (&str, 0, "H", &i)) 6447bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("didn't find 'H'"); 6457bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 0); 6467bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6477bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find (&str, 0, "", &i)) 6487bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("didn't find ''"); 6497bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 0); 6507bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6517bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_find (&str, 0, "Hello!", NULL)) 6527bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did find 'Hello!'"); 6537bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6547bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_find (&str, 0, "Oh, Hello", NULL)) 6557bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did find 'Oh, Hello'"); 6567bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6577bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_find (&str, 0, "ill", NULL)) 6587bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did find 'ill'"); 6597bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6607bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_find (&str, 0, "q", NULL)) 6617bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did find 'q'"); 6627bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6637bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find_to (&str, 0, 2, "He", NULL)) 6647bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Didn't find 'He'"); 6657bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6667bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_find_to (&str, 0, 2, "Hello", NULL)) 6677bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did find 'Hello'"); 6687bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6697bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find_byte_backward (&str, _dbus_string_get_length (&str), 'H', &i)) 6707bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did not find 'H'"); 6717bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 0); 6727bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6737bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find_byte_backward (&str, _dbus_string_get_length (&str), 'o', &i)) 6747bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did not find 'o'"); 6757bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == _dbus_string_get_length (&str) - 1); 6767bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6777bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_find_byte_backward (&str, _dbus_string_get_length (&str) - 1, 'o', &i)) 6787bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did find 'o'"); 6797bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == -1); 6807bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6817bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (_dbus_string_find_byte_backward (&str, 1, 'e', &i)) 6827bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Did find 'e'"); 6837bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == -1); 6847bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6857bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_find_byte_backward (&str, 2, 'e', &i)) 6867bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("Didn't find 'e'"); 6877bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (i == 1); 6887bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6897bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 6907bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6917bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington /* Hex encoding */ 6927bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_init_const (&str, "cafebabe, this is a bogus hex string"); 6937bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_init (&other)) 6947bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("could not init string"); 6957bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6967bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington if (!_dbus_string_hex_decode (&str, 0, &end, &other, 0)) 6977bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert_not_reached ("deccoded bogus hex string with no error"); 6987bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 6997bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_assert (end == 8); 7007bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 7017bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&other); 7027bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 7037bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington test_roundtrips (test_hex_roundtrip); 7047bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 7057bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington _dbus_string_free (&str); 706cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 707cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker { 708a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington int found, found_len; 709cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 710a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_string_init_const (&str, "012\r\n567\n90"); 711a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 712a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_find_eol (&str, 0, &found, &found_len) || found != 3 || found_len != 2) 713a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("Did not find '\\r\\n'"); 714a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (found != 3 || found_len != 2) 715a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("invalid return values"); 716a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 717a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_find_eol (&str, 5, &found, &found_len)) 718a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("Did not find '\\n'"); 719a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (found != 8 || found_len != 1) 720a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("invalid return values"); 721a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 722a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (_dbus_string_find_eol (&str, 9, &found, &found_len)) 723a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("Found not expected '\\n'"); 724a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington else if (found != 11 || found_len != 0) 725a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("invalid return values '\\n'"); 726a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 727a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington found = -1; 728a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington found_len = -1; 729a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_string_init_const (&str, ""); 730a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (_dbus_string_find_eol (&str, 0, &found, &found_len)) 731a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("found an eol in an empty string"); 732a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (found == 0); 733a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (found_len == 0); 734a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 735a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington found = -1; 736a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington found_len = -1; 737a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_string_init_const (&str, "foobar"); 738a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (_dbus_string_find_eol (&str, 0, &found, &found_len)) 739a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("found eol in string that lacks one"); 740a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (found == 6); 741a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (found_len == 0); 742a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 743a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington found = -1; 744a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington found_len = -1; 745a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_string_init_const (&str, "foobar\n"); 746a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_find_eol (&str, 0, &found, &found_len)) 747a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("did not find eol in string that has one at end"); 748a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (found == 6); 749a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (found_len == 1); 750a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington } 751cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 752a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington { 753a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington DBusString line; 754cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 755a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington#define FIRST_LINE "this is a line" 756a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington#define SECOND_LINE "this is a second line" 757a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington /* third line is empty */ 758a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington#define THIRD_LINE "" 759a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington#define FOURTH_LINE "this is a fourth line" 760a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 761a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_init (&str)) 762a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("no memory"); 763cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 764a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_append (&str, FIRST_LINE "\n" SECOND_LINE "\r\n" THIRD_LINE "\n" FOURTH_LINE)) 765a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("no memory"); 766a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 767a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_init (&line)) 768a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("no memory"); 769a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 770a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_pop_line (&str, &line)) 771a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("failed to pop first line"); 772cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 773a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (_dbus_string_equal_c_str (&line, FIRST_LINE)); 774a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 775a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_pop_line (&str, &line)) 776a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("failed to pop second line"); 777cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 778a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (_dbus_string_equal_c_str (&line, SECOND_LINE)); 779a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 780a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_pop_line (&str, &line)) 781a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("failed to pop third line"); 782cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 783a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (_dbus_string_equal_c_str (&line, THIRD_LINE)); 784a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 785a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington if (!_dbus_string_pop_line (&str, &line)) 786a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert_not_reached ("failed to pop fourth line"); 787cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 788a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_assert (_dbus_string_equal_c_str (&line, FOURTH_LINE)); 789a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 790a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_string_free (&str); 791a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington _dbus_string_free (&line); 792a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington } 793a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington 794a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington return TRUE; 795a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington} 796cb39e60e1639fb982a46aa1625e3adec2bf0df46Ralf Habacker 797a789b7b38cb4f4540a41444cbd64bf7ada2d60d2Havoc Pennington#endif /* DBUS_BUILD_TESTS */ 798