Lua fix strip_extension and create_numbered_filename

Both of these functions modified the string in the lua stack

per lua manual:
'When a C function receives a string argument from Lua,
there are only two rules that it must observe: Not to pop the string
from the stack while accessing it and never to modify the string'

strip_extension will still work with old parameters
and is thus backwards compatible
strip_extension("filename")

create_numbered_filename has changed slightly and IS NOT backwards compatible

create_numbered_filename(path, prefix, suffix, [number])
(number defaults to -1)

Change-Id: I34cf7e2f6f691f33d5ac2b2e995855a171fb99b3
This commit is contained in:
William Wilgus 2018-10-23 00:11:34 -04:00
parent 948984309a
commit df4cb9bafc
2 changed files with 38 additions and 0 deletions

View file

@ -363,6 +363,39 @@ RB_WRAP(get_plugin_action)
return 1;
}
RB_WRAP(strip_extension)
{
const char* filename = luaL_checkstring(L, -1);
const char* pos = rb->strrchr(filename, '.');
if(pos != NULL)
lua_pushlstring (L, filename, pos - filename);
return 1;
}
RB_WRAP(create_numbered_filename)
{
luaL_Buffer b;
luaL_buffinit(L, &b);
char *buffer = luaL_prepbuffer(&b);
buffer[0] = '\0';
const char * path = luaL_checkstring(L, 1);
const char * prefix = luaL_checkstring(L, 2);
const char * suffix = luaL_checkstring(L, 3);
int numberlen = luaL_optint(L, 4, -1);
if(rb->create_numbered_filename(buffer, path, prefix, suffix, numberlen))
{
luaL_addstring(&b, buffer);
luaL_pushresult(&b);
}
else
return 0;
return 1;
}
#define RB_FUNC(func) {#func, rock_##func}
static const luaL_Reg rocklib[] =
{
@ -410,6 +443,9 @@ static const luaL_Reg rocklib[] =
RB_FUNC(get_plugin_action),
RB_FUNC(strip_extension),
RB_FUNC(create_numbered_filename),
{NULL, NULL}
};
#undef RB_FUNC