mirror of
https://github.com/lua/lua.git
synced 2024-11-27 20:23:55 +08:00
function 'strfind' now has two optional parameters, to specify where
to start and stop the search.
This commit is contained in:
parent
ad97e9ccbc
commit
53c0a0f43c
30
strlib.c
30
strlib.c
@ -3,7 +3,7 @@
|
||||
** 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 <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
|
||||
** LUA interface:
|
||||
** n = strfind (string, substring)
|
||||
** n = strfind (string, substring, init, end)
|
||||
*/
|
||||
static void str_find (void)
|
||||
{
|
||||
char *s1, *s2, *f;
|
||||
int init;
|
||||
lua_Object o1 = lua_getparam (1);
|
||||
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))
|
||||
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);
|
||||
s2 = lua_getstring(o2);
|
||||
f = strstr(s1,s2);
|
||||
f = strstr(s1+init,s2);
|
||||
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
|
||||
lua_pushnil();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user