glib r7409 - in trunk: . glib glib/tests tests



Author: hadess
Date: Thu Aug 28 12:53:59 2008
New Revision: 7409
URL: http://svn.gnome.org/viewvc/glib?rev=7409&view=rev

Log:
2008-08-28  Bastien Nocera  <hadess hadess net>

	Bug 548612 â g_strstr_len() should use memmem when available

	* glib/tests/strfuncs.c (test_strstr):
	* tests/string-test.c (main): Patch by Paolo Borelli
	<pborelli katamail com> to move the tests to the right place,
	and add more tests

	* glib/gstrfuncs.c (g_strstr_len): Fix problem with memmem ignoring
	nul-terminators in strings, and using the haystack_len instead



Modified:
   trunk/ChangeLog
   trunk/glib/gstrfuncs.c
   trunk/glib/tests/strfuncs.c
   trunk/tests/string-test.c

Modified: trunk/glib/gstrfuncs.c
==============================================================================
--- trunk/glib/gstrfuncs.c	(original)
+++ trunk/glib/gstrfuncs.c	Thu Aug 28 12:53:59 2008
@@ -2603,7 +2603,10 @@
   else
     {
 #ifdef HAVE_MEMMEM
-      return memmem (haystack, haystack_len, needle, strlen (needle));
+      size_t len;
+
+      len = MIN(haystack_len, strlen (haystack));
+      return memmem (haystack, len, needle, strlen (needle));
 #else
       const gchar *p = haystack;
       gsize needle_len = strlen (needle);

Modified: trunk/glib/tests/strfuncs.c
==============================================================================
--- trunk/glib/tests/strfuncs.c	(original)
+++ trunk/glib/tests/strfuncs.c	Thu Aug 28 12:53:59 2008
@@ -556,10 +556,19 @@
   res = g_strstr_len (haystack, 6, "FooBarFooBarFooBar");
   g_assert (res == NULL);
 
+  res = g_strstr_len (haystack, 3, "Bar");
+  g_assert (res == NULL);
+
   res = g_strstr_len (haystack, 6, "");
   g_assert (res == haystack);
+  g_assert_cmpstr (res, ==, "FooBarFooBarFoo");
 
   res = g_strstr_len (haystack, 6, "Bar");
+  g_assert (res == haystack + 3);
+  g_assert_cmpstr (res, ==, "BarFooBarFoo");
+
+  res = g_strstr_len (haystack, -1, "Bar");
+  g_assert (res == haystack + 3);
   g_assert_cmpstr (res, ==, "BarFooBarFoo");
 
   /* strrstr */
@@ -571,8 +580,10 @@
 
   res = g_strrstr (haystack, "");
   g_assert (res == haystack);
+  g_assert_cmpstr (res, ==, "FooBarFooBarFoo");
 
   res = g_strrstr (haystack, "Bar");
+  g_assert (res == haystack + 9);
   g_assert_cmpstr (res, ==, "BarFoo");
 
   /* strrstr_len */
@@ -582,9 +593,26 @@
   res = g_strrstr_len (haystack, 14, "FooBarFooBarFooBar");
   g_assert (res == NULL);
 
+  res = g_strrstr_len (haystack, 3, "Bar");
+  g_assert (res == NULL);
+
   res = g_strrstr_len (haystack, 14, "BarFoo");
+  g_assert (res == haystack + 3);
   g_assert_cmpstr (res, ==, "BarFooBarFoo");
 
+  res = g_strrstr_len (haystack, 15, "BarFoo");
+  g_assert (res == haystack + 9);
+  g_assert_cmpstr (res, ==, "BarFoo");
+
+  res = g_strrstr_len (haystack, -1, "BarFoo");
+  g_assert (res == haystack + 9);
+  g_assert_cmpstr (res, ==, "BarFoo");
+
+  /* test case for strings with \0 in the middle */
+  *(haystack + 7) = '\0';
+  res = g_strstr_len (haystack, 15, "BarFoo");
+  g_assert (res == NULL);
+
   g_free (haystack);
 }
 

Modified: trunk/tests/string-test.c
==============================================================================
--- trunk/tests/string-test.c	(original)
+++ trunk/tests/string-test.c	Thu Aug 28 12:53:59 2008
@@ -307,11 +307,6 @@
   g_assert (strcmp (tmp_string, "b a") == 0);
   g_free (tmp_string);
 
-  tmp_string = g_strdup (GLIB_TEST_STRING);
-  g_assert (g_strstr_len (tmp_string, 4, "rado") == NULL);
-  g_assert (g_strstr_len (tmp_string, -1, "rado") == tmp_string + 5);
-  g_free (tmp_string);
-
   return 0;
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]