lua optimize current_path function
frees up around 500 bytes by using the builtin string functionality Change-Id: Icd4ec921d3fec339b8a4b7f80c9c63d51d4c101c
This commit is contained in:
parent
0b7a8d5afd
commit
07fed9053a
4 changed files with 13 additions and 24 deletions
|
@ -54,7 +54,10 @@ static const char *pushnexttemplate (lua_State *L, const char *path) {
|
||||||
|
|
||||||
static const char *findfile (lua_State *L, const char *name,
|
static const char *findfile (lua_State *L, const char *name,
|
||||||
const char *pname) {
|
const char *pname) {
|
||||||
const char *path, *current_path = get_current_path(L, 2);
|
get_current_path(L, 2);
|
||||||
|
const char *current_path = lua_tostring(L, -1);
|
||||||
|
const char *path;
|
||||||
|
|
||||||
name = luaL_gsub(L, name, ".", LUA_DIRSEP);
|
name = luaL_gsub(L, name, ".", LUA_DIRSEP);
|
||||||
lua_getfield(L, LUA_ENVIRONINDEX, pname);
|
lua_getfield(L, LUA_ENVIRONINDEX, pname);
|
||||||
path = lua_tostring(L, -1);
|
path = lua_tostring(L, -1);
|
||||||
|
|
|
@ -73,9 +73,8 @@ int strcoll(const char * str1, const char * str2)
|
||||||
return rb->strcmp(str1, str2);
|
return rb->strcmp(str1, str2);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* get_current_path(lua_State *L, int level)
|
int get_current_path(lua_State *L, int level)
|
||||||
{
|
{
|
||||||
static char buffer[MAX_PATH];
|
|
||||||
lua_Debug ar;
|
lua_Debug ar;
|
||||||
|
|
||||||
if(lua_getstack(L, level, &ar))
|
if(lua_getstack(L, level, &ar))
|
||||||
|
@ -84,22 +83,15 @@ const char* get_current_path(lua_State *L, int level)
|
||||||
and write it to dest. */
|
and write it to dest. */
|
||||||
lua_getinfo(L, "S", &ar);
|
lua_getinfo(L, "S", &ar);
|
||||||
|
|
||||||
char* curfile = (char*) &ar.source[1];
|
const char* curfile = &ar.source[1];
|
||||||
char* pos = rb->strrchr(curfile, '/');
|
const char* pos = rb->strrchr(curfile, '/');
|
||||||
if(pos != NULL)
|
if(pos != NULL)
|
||||||
{
|
{
|
||||||
unsigned int len = (unsigned int)(pos - curfile);
|
lua_pushlstring (L, curfile, pos - curfile + 1);
|
||||||
len = len + 1 > sizeof(buffer) ? sizeof(buffer) - 1 : len;
|
return 1;
|
||||||
|
|
||||||
if(len > 0)
|
|
||||||
memcpy(buffer, curfile, len);
|
|
||||||
|
|
||||||
buffer[len] = '/';
|
|
||||||
buffer[len+1] = '\0';
|
|
||||||
|
|
||||||
return buffer;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
lua_pushnil(L);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -194,13 +194,7 @@ RB_WRAP(font_getstringsize)
|
||||||
|
|
||||||
RB_WRAP(current_path)
|
RB_WRAP(current_path)
|
||||||
{
|
{
|
||||||
const char *current_path = get_current_path(L, 1);
|
return get_current_path(L, 1);
|
||||||
if(current_path != NULL)
|
|
||||||
lua_pushstring(L, current_path);
|
|
||||||
else
|
|
||||||
lua_pushnil(L);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fill_text_message(lua_State *L, struct text_message * message,
|
static void fill_text_message(lua_State *L, struct text_message * message,
|
||||||
|
|
|
@ -46,7 +46,7 @@ struct lua_str_reg {
|
||||||
};
|
};
|
||||||
|
|
||||||
LUALIB_API int (luaopen_rock) (lua_State *L);
|
LUALIB_API int (luaopen_rock) (lua_State *L);
|
||||||
const char* get_current_path(lua_State *L, int level);
|
int get_current_path(lua_State *L, int level);
|
||||||
|
|
||||||
#endif /* _ROCKLIB_H_ */
|
#endif /* _ROCKLIB_H_ */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue