Commit cb39e60e authored by Ralf Habacker's avatar Ralf Habacker

* 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.
parent 60bf9558
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,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment