/*
* lua file helpers functions
*
* (C) 2016 M. Liebmann (micha-bbg)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "luainstance.h"
#include "lua_filehelpers.h"
CLuaInstFileHelpers* CLuaInstFileHelpers::getInstance()
{
static CLuaInstFileHelpers* LuaInstFileHelpers = NULL;
if (!LuaInstFileHelpers)
LuaInstFileHelpers = new CLuaInstFileHelpers();
return LuaInstFileHelpers;
}
CLuaFileHelpers *CLuaInstFileHelpers::FileHelpersCheckData(lua_State *L, int n)
{
return *(CLuaFileHelpers **) luaL_checkudata(L, n, LUA_FILEHELPER_CLASSNAME);
}
void CLuaInstFileHelpers::LuaFileHelpersRegister(lua_State *L)
{
luaL_Reg meth[] = {
{ "new", CLuaInstFileHelpers::FileHelpersNew },
{ "cp", CLuaInstFileHelpers::FileHelpersCp },
{ "__gc", CLuaInstFileHelpers::FileHelpersDelete },
{ NULL, NULL }
};
luaL_newmetatable(L, LUA_FILEHELPER_CLASSNAME);
luaL_setfuncs(L, meth, 0);
lua_pushvalue(L, -1);
lua_setfield(L, -1, "__index");
lua_setglobal(L, LUA_FILEHELPER_CLASSNAME);
}
int CLuaInstFileHelpers::FileHelpersNew(lua_State *L)
{
CLuaFileHelpers **udata = (CLuaFileHelpers **) lua_newuserdata(L, sizeof(CLuaFileHelpers *));
*udata = new CLuaFileHelpers();
luaL_getmetatable(L, LUA_FILEHELPER_CLASSNAME);
lua_setmetatable(L, -2);
return 1;
}
int CLuaInstFileHelpers::FileHelpersCp(lua_State *L)
{
CLuaFileHelpers *D = FileHelpersCheckData(L, 1);
if (!D) return 0;
int numargs = lua_gettop(L) - 1;
int min_numargs = 2;
if (numargs < min_numargs) {
printf("luascript cp: not enough arguments (%d, expected %d)\n", numargs, min_numargs);
lua_pushboolean(L, false);
return 1;
}
if (!lua_isstring(L, 2)) {
printf("luascript cp: argument 1 is not a string.\n");
lua_pushboolean(L, false);
return 1;
}
const char *from = "";
from = luaL_checkstring(L, 2);
if (!lua_isstring(L, 3)) {
printf("luascript cp: argument 2 is not a string.\n");
lua_pushboolean(L, false);
return 1;
}
const char *to = "";
to = luaL_checkstring(L, 3);
const char *flags = "";
if (numargs > min_numargs)
flags = luaL_checkstring(L, 4);
bool ret = false;
CFileHelpers fh;
ret = fh.cp(from, to, flags);
lua_pushboolean(L, ret);
return 1;
}
int CLuaInstFileHelpers::FileHelpersDelete(lua_State *L)
{
CLuaFileHelpers *D = FileHelpersCheckData(L, 1);
if (!D) return 0;
delete D;
return 0;
}