mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-05-01 12:38:07 +02:00
* dbus/dbus-string.[ch] (_dbus_string_find_eol): new function.
* dbus/dbus-string-util.c (_dbus_string_test): added testcases for _dbus_string_find_eol(). Approved by: Havoc Pennington.
This commit is contained in:
parent
60bf955868
commit
cb39e60e16
4 changed files with 117 additions and 0 deletions
|
|
@ -1,3 +1,10 @@
|
|||
2006-12-12 Ralf Habacker <ralf.habacker@freenet.de>
|
||||
|
||||
* dbus/dbus-string.[ch] (_dbus_string_find_eol): new function.
|
||||
* dbus/dbus-string-util.c (_dbus_string_test): added testcases for
|
||||
_dbus_string_find_eol().
|
||||
Approved by: Havoc Pennington.
|
||||
|
||||
2006-12-12 Tim Dijkstra <tim@famdijkstra.org>
|
||||
|
||||
* configure.in: Added switch to disable user_database caching.
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
/* dbus-string-util.c Would be in dbus-string.c, but not used in libdbus
|
||||
*
|
||||
* Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc.
|
||||
* Copyright (C) 2006 Ralf Habacker <ralf.habacker@freenet.de>
|
||||
*
|
||||
* Licensed under the Academic Free License version 2.1
|
||||
*
|
||||
|
|
@ -702,8 +703,45 @@ _dbus_string_test (void)
|
|||
test_roundtrips (test_hex_roundtrip);
|
||||
|
||||
_dbus_string_free (&str);
|
||||
|
||||
{
|
||||
int found,found_len;
|
||||
_dbus_string_init_const (&str, "012\r\n567\n90");
|
||||
|
||||
if (!_dbus_string_find_eol(&str, 0, &found, &found_len) || found != 3 || found_len != 2)
|
||||
_dbus_assert_not_reached ("Did not find '\\r\\n'");
|
||||
if (found != 3 || found_len != 2)
|
||||
_dbus_assert_not_reached ("invalid return values");
|
||||
|
||||
if (!_dbus_string_find_eol(&str, 5, &found, &found_len))
|
||||
_dbus_assert_not_reached ("Did not find '\\n'");
|
||||
if (found != 8 || found_len != 1)
|
||||
_dbus_assert_not_reached ("invalid return values");
|
||||
|
||||
if (_dbus_string_find_eol(&str, 9, &found, &found_len))
|
||||
_dbus_assert_not_reached ("Found not expected '\\n'");
|
||||
else if (found != 11 || found_len != 0)
|
||||
_dbus_assert_not_reached ("invalid return values '\\n'");
|
||||
|
||||
_dbus_string_free (&str);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#endif /* DBUS_BUILD_TESTS */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
/* dbus-string.c String utility class (internal to D-Bus implementation)
|
||||
*
|
||||
* Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc.
|
||||
* Copyright (C) 2006 Ralf Habacker <ralf.habacker@freenet.de>
|
||||
*
|
||||
* Licensed under the Academic Free License version 2.1
|
||||
*
|
||||
|
|
@ -1789,6 +1790,72 @@ _dbus_string_find (const DBusString *str,
|
|||
substr, found);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds end of line ("\r\n" or "\n") in the string,
|
||||
* returning #TRUE and filling in the byte index
|
||||
* where the eol string was found, if it was found.
|
||||
* Returns #FALSE if eol wasn't found.
|
||||
*
|
||||
* @param str the string
|
||||
* @param start where to start looking
|
||||
* @param found return location for where eol was found or string length otherwise
|
||||
* @param found_len return length of found eol string or zero otherwise
|
||||
* @returns #TRUE if found
|
||||
*/
|
||||
dbus_bool_t
|
||||
_dbus_string_find_eol (const DBusString *str,
|
||||
int start,
|
||||
int *found,
|
||||
int *found_len)
|
||||
{
|
||||
int i;
|
||||
|
||||
DBUS_CONST_STRING_PREAMBLE (str);
|
||||
_dbus_assert (start <= real->len);
|
||||
_dbus_assert (start >= 0);
|
||||
|
||||
i = start;
|
||||
while (i < real->len)
|
||||
{
|
||||
if (real->str[i] == '\r')
|
||||
{
|
||||
if ((i+1) < real->len && real->str[i+1] == '\n') /* "\r\n" */
|
||||
{
|
||||
if (found)
|
||||
*found = i;
|
||||
if (found_len)
|
||||
*found_len = 2;
|
||||
return TRUE;
|
||||
}
|
||||
else /* only "\r" */
|
||||
{
|
||||
if (found)
|
||||
*found = i;
|
||||
if (found_len)
|
||||
*found_len = 1;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
else if (real->str[i] == '\n') /* only "\n" */
|
||||
{
|
||||
if (found)
|
||||
*found = i;
|
||||
if (found_len)
|
||||
*found_len = 1;
|
||||
return TRUE;
|
||||
}
|
||||
++i;
|
||||
}
|
||||
|
||||
if (found)
|
||||
*found = real->len;
|
||||
|
||||
if (found_len)
|
||||
*found_len = 0;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the given substring in the string,
|
||||
* up to a certain position,
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
/* dbus-string.h String utility class (internal to D-Bus implementation)
|
||||
*
|
||||
* Copyright (C) 2002, 2003 Red Hat, Inc.
|
||||
* Copyright (C) 2006 Ralf Habacker <ralf.habacker@freenet.de>
|
||||
*
|
||||
* Licensed under the Academic Free License version 2.1
|
||||
*
|
||||
|
|
@ -215,6 +216,10 @@ dbus_bool_t _dbus_string_find (const DBusString *str,
|
|||
int start,
|
||||
const char *substr,
|
||||
int *found);
|
||||
dbus_bool_t _dbus_string_find_eol (const DBusString *str,
|
||||
int start,
|
||||
int *found,
|
||||
int *found_len);
|
||||
dbus_bool_t _dbus_string_find_to (const DBusString *str,
|
||||
int start,
|
||||
int end,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue