From 9c3e679d188ec6c117a33ef280d81943a8e37bc8 Mon Sep 17 00:00:00 2001 From: Maurus Cuelenaere Date: Mon, 1 Jun 2009 22:31:32 +0000 Subject: Lua: add touchscreen_set_mode & current_path (+ some constants) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21165 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/lua/lauxlib.c | 48 ++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 21 deletions(-) (limited to 'apps/plugins/lua/lauxlib.c') diff --git a/apps/plugins/lua/lauxlib.c b/apps/plugins/lua/lauxlib.c index fd71e07..3f6d8e6 100644 --- a/apps/plugins/lua/lauxlib.c +++ b/apps/plugins/lua/lauxlib.c @@ -560,24 +560,35 @@ static int errfile (lua_State *L, const char *what, int fnameindex) { return LUA_ERRFILE; } -static void make_path(char* dest, size_t dest_size, char* curfile, char* newfile) +bool get_cur_path(lua_State *L, char* dest, size_t dest_size) { - char* pos = rb->strrchr(curfile, '/'); - if(pos != NULL) + lua_Debug ar; + if(lua_getstack(L, 1, &ar)) { - unsigned int len = (unsigned int)(pos - curfile); - len = len + 1 > dest_size ? dest_size - 1 : len; - - if(len > 0) - memcpy(dest, curfile, len); - - dest[len] = '/'; - dest[len+1] = '\0'; + /* Try determining the base path of the current Lua chunk + and write it to dest. */ + lua_getinfo(L, "S", &ar); + + char* curfile = (char*) &ar.source[1]; + char* pos = rb->strrchr(curfile, '/'); + if(pos != NULL) + { + unsigned int len = (unsigned int)(pos - curfile); + len = len + 1 > dest_size ? dest_size - 1 : len; + + if(len > 0) + memcpy(dest, curfile, len); + + dest[len] = '/'; + dest[len+1] = '\0'; + + return true; + } + else + return false; } else - dest[0] = '\0'; - - strncat(dest, newfile, dest_size - strlen(dest)); + return false; } LUALIB_API int luaL_loadfile (lua_State *L, const char *filename) { @@ -590,13 +601,8 @@ LUALIB_API int luaL_loadfile (lua_State *L, const char *filename) { if(lf.f < 0) { /* Fallback */ - lua_Debug ar; - if(lua_getstack(L, 1, &ar)) { - lua_getinfo(L, "S", &ar); - - /* Try determining the base path of the current Lua chunk - and prepend it to filename in buffer. */ - make_path(buffer, sizeof(buffer), (char*)&ar.source[1], (char*)filename); + if(get_cur_path(L, buffer, sizeof(buffer))) { + strncat(buffer, filename, sizeof(buffer) - strlen(buffer)); lf.f = rb->open(buffer, O_RDONLY); } -- cgit v1.1