m4-commit
[Top][All Lists]
Advanced

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

Changes to m4/modules/m4.c,v


From: Eric Blake
Subject: Changes to m4/modules/m4.c,v
Date: Mon, 01 Oct 2007 22:44:02 +0000

CVSROOT:        /sources/m4
Module name:    m4
Changes by:     Eric Blake <ericb>      07/10/01 22:44:00

Index: modules/m4.c
===================================================================
RCS file: /sources/m4/m4/modules/m4.c,v
retrieving revision 1.114
retrieving revision 1.115
diff -u -b -r1.114 -r1.115
--- modules/m4.c        12 Sep 2007 01:14:49 -0000      1.114
+++ modules/m4.c        1 Oct 2007 22:44:00 -0000       1.115
@@ -913,8 +913,20 @@
 M4BUILTIN_HANDLER (index)
 {
   const char *haystack = M4ARG (1);
-  const char *result = strstr (haystack, M4ARG (2));
-  int retval = result ? result - haystack : -1;
+  const char *needle = M4ARG (2);
+  const char *result = NULL;
+  int retval = -1;
+
+  /* Optimize searching for the empty string (always 0) and one byte
+     (strchr tends to be more efficient than strstr).  */
+  if (!needle[0])
+    retval = 0;
+  else if (!needle[1])
+    result = strchr (haystack, *needle);
+  else
+    result = strstr (haystack, needle);
+  if (result)
+    retval = result - haystack;
 
   m4_shipout_int (obs, retval);
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]