* dbus/dbus-string.[ch] (_dbus_string_find_eol): new function.
authorRalf Habacker <ralf.habacker@freenet.de>
Tue, 12 Dec 2006 23:46:27 +0000 (23:46 +0000)
committerRalf Habacker <ralf.habacker@freenet.de>
Tue, 12 Dec 2006 23:46:27 +0000 (23:46 +0000)
* dbus/dbus-string-util.c (_dbus_string_test): added testcases for
      _dbus_string_find_eol().
Approved by: Havoc Pennington.

ChangeLog
dbus/dbus-string-util.c
dbus/dbus-string.c
dbus/dbus-string.h

index 89e7781..30be985 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
index 260ef87..16a7934 100644 (file)
@@ -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 */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
index a218ed5..5ae8ac3 100644 (file)
@@ -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
  * 
@@ -1790,6 +1791,72 @@ _dbus_string_find (const DBusString *str,
 }
 
 /**
+ * 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,
  * returning #TRUE and filling in the byte index
index 47fd1b4..f81e566 100644 (file)
@@ -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,