[Top][All Lists]
[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);
}
- Changes to m4/modules/m4.c,v,
Eric Blake <=