-/* -*- mode: C; c-file-style: "gnu" -*- */
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/* dbus-string-util.c Would be in dbus-string.c, but not used in libdbus
*
* Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc.
+ * Copyright (C) 2006 Ralf Habacker <ralf.habacker@freenet.de>
*
* Licensed under the Academic Free License version 2.1
*
return i >= 0;
}
-/**
- * Skips whitespace from start, storing the first non-whitespace in *end.
- * (whitespace is space, tab, newline, CR).
- *
- * @param str the string
- * @param start where to start
- * @param end where to store the first non-whitespace byte index
- */
-void
-_dbus_string_skip_white (const DBusString *str,
- int start,
- int *end)
-{
- 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] == ' ' ||
- real->str[i] == '\n' ||
- real->str[i] == '\r' ||
- real->str[i] == '\t'))
- break;
-
- ++i;
- }
-
- _dbus_assert (i == real->len || !(real->str[i] == ' ' ||
- real->str[i] == '\t'));
-
- if (end)
- *end = i;
-}
-
/** @} */
#ifdef DBUS_BUILD_TESTS
test_roundtrips (test_hex_roundtrip);
_dbus_string_free (&str);
+
+ {
+ int found, found_len;
+
+ _dbus_string_init_const (&str, "012\r\n567\n90");
+
+ if (!_dbus_string_find_eol (&str, 0, &found, &found_len) || found != 3 || found_len != 2)
+ _dbus_assert_not_reached ("Did not find '\\r\\n'");
+ if (found != 3 || found_len != 2)
+ _dbus_assert_not_reached ("invalid return values");
+
+ if (!_dbus_string_find_eol (&str, 5, &found, &found_len))
+ _dbus_assert_not_reached ("Did not find '\\n'");
+ if (found != 8 || found_len != 1)
+ _dbus_assert_not_reached ("invalid return values");
+
+ if (_dbus_string_find_eol (&str, 9, &found, &found_len))
+ _dbus_assert_not_reached ("Found not expected '\\n'");
+ else if (found != 11 || found_len != 0)
+ _dbus_assert_not_reached ("invalid return values '\\n'");
+
+ found = -1;
+ found_len = -1;
+ _dbus_string_init_const (&str, "");
+ if (_dbus_string_find_eol (&str, 0, &found, &found_len))
+ _dbus_assert_not_reached ("found an eol in an empty string");
+ _dbus_assert (found == 0);
+ _dbus_assert (found_len == 0);
+
+ found = -1;
+ found_len = -1;
+ _dbus_string_init_const (&str, "foobar");
+ if (_dbus_string_find_eol (&str, 0, &found, &found_len))
+ _dbus_assert_not_reached ("found eol in string that lacks one");
+ _dbus_assert (found == 6);
+ _dbus_assert (found_len == 0);
+
+ found = -1;
+ found_len = -1;
+ _dbus_string_init_const (&str, "foobar\n");
+ if (!_dbus_string_find_eol (&str, 0, &found, &found_len))
+ _dbus_assert_not_reached ("did not find eol in string that has one at end");
+ _dbus_assert (found == 6);
+ _dbus_assert (found_len == 1);
+ }
+
+ {
+ DBusString line;
+
+#define FIRST_LINE "this is a line"
+#define SECOND_LINE "this is a second line"
+ /* third line is empty */
+#define THIRD_LINE ""
+#define FOURTH_LINE "this is a fourth line"
+
+ if (!_dbus_string_init (&str))
+ _dbus_assert_not_reached ("no memory");
+
+ if (!_dbus_string_append (&str, FIRST_LINE "\n" SECOND_LINE "\r\n" THIRD_LINE "\n" FOURTH_LINE))
+ _dbus_assert_not_reached ("no memory");
+
+ if (!_dbus_string_init (&line))
+ _dbus_assert_not_reached ("no memory");
+
+ if (!_dbus_string_pop_line (&str, &line))
+ _dbus_assert_not_reached ("failed to pop first line");
+
+ _dbus_assert (_dbus_string_equal_c_str (&line, FIRST_LINE));
+
+ if (!_dbus_string_pop_line (&str, &line))
+ _dbus_assert_not_reached ("failed to pop second line");
+
+ _dbus_assert (_dbus_string_equal_c_str (&line, SECOND_LINE));
+
+ if (!_dbus_string_pop_line (&str, &line))
+ _dbus_assert_not_reached ("failed to pop third line");
+
+ _dbus_assert (_dbus_string_equal_c_str (&line, THIRD_LINE));
+
+ if (!_dbus_string_pop_line (&str, &line))
+ _dbus_assert_not_reached ("failed to pop fourth line");
+
+ _dbus_assert (_dbus_string_equal_c_str (&line, FOURTH_LINE));
+
+ _dbus_string_free (&str);
+ _dbus_string_free (&line);
+ }
return TRUE;
}