function 'strfind' now has two optional parameters, to specify where

to start and stop the search.
This commit is contained in:
Roberto Ierusalimschy
1995-01-06 18:31:10 -02:00
parent ad97e9ccbc
commit 53c0a0f43c

View File

@@ -3,7 +3,7 @@
** String library to LUA ** String library to LUA
*/ */
char *rcs_strlib="$Id: strlib.c,v 1.6 1994/12/13 15:54:21 roberto Exp roberto $"; char *rcs_strlib="$Id: strlib.c,v 1.7 1994/12/16 15:53:57 roberto Exp roberto $";
#include <string.h> #include <string.h>
#include <ctype.h> #include <ctype.h>
@@ -15,20 +15,42 @@ char *rcs_strlib="$Id: strlib.c,v 1.6 1994/12/13 15:54:21 roberto Exp roberto $"
/* /*
** Return the position of the first caracter of a substring into a string ** Return the position of the first caracter of a substring into a string
** LUA interface: ** LUA interface:
** n = strfind (string, substring) ** n = strfind (string, substring, init, end)
*/ */
static void str_find (void) static void str_find (void)
{ {
char *s1, *s2, *f; char *s1, *s2, *f;
int init;
lua_Object o1 = lua_getparam (1); lua_Object o1 = lua_getparam (1);
lua_Object o2 = lua_getparam (2); lua_Object o2 = lua_getparam (2);
lua_Object o3 = lua_getparam (3);
lua_Object o4 = lua_getparam (4);
if (!lua_isstring(o1) || !lua_isstring(o2)) if (!lua_isstring(o1) || !lua_isstring(o2))
lua_error ("incorrect arguments to function `strfind'"); lua_error ("incorrect arguments to function `strfind'");
if (o3 == LUA_NOOBJECT)
init = 0;
else if (lua_isnumber(o3))
init = lua_getnumber(o3)-1;
else
{
lua_error ("incorrect arguments to function `strfind'");
return; /* to avoid warnings */
}
s1 = lua_getstring(o1); s1 = lua_getstring(o1);
s2 = lua_getstring(o2); s2 = lua_getstring(o2);
f = strstr(s1,s2); f = strstr(s1+init,s2);
if (f != NULL) if (f != NULL)
lua_pushnumber (f-s1+1); {
int pos = f-s1+1;
if (o4 == LUA_NOOBJECT)
lua_pushnumber (pos);
else if (!lua_isnumber(o4))
lua_error ("incorrect arguments to function `strfind'");
else if ((int)lua_getnumber(o4) >= pos+strlen(s2)-1)
lua_pushnumber (pos);
else
lua_pushnil();
}
else else
lua_pushnil(); lua_pushnil();
} }