Use 4-space indentation consistently.
svn path=/trunk/; revision=51345
This commit is contained in:
parent
e8f42c6b48
commit
14fe8951b7
|
@ -33,17 +33,17 @@
|
|||
#include <epan/stat_cmd_args.h>
|
||||
|
||||
WSLUA_API gboolean wslua_optbool(lua_State* L, int n, gboolean def) {
|
||||
gboolean val = FALSE;
|
||||
gboolean val = FALSE;
|
||||
|
||||
if ( lua_isboolean(L,n) ) {
|
||||
val = lua_toboolean(L,n);
|
||||
} else if ( lua_isnil(L,n) || lua_gettop(L) < n ){
|
||||
val = def;
|
||||
} else {
|
||||
luaL_argerror(L,n,"must be a boolean");
|
||||
}
|
||||
if ( lua_isboolean(L,n) ) {
|
||||
val = lua_toboolean(L,n);
|
||||
} else if ( lua_isnil(L,n) || lua_gettop(L) < n ){
|
||||
val = def;
|
||||
} else {
|
||||
luaL_argerror(L,n,"must be a boolean");
|
||||
}
|
||||
|
||||
return val;
|
||||
return val;
|
||||
}
|
||||
|
||||
|
||||
|
@ -79,37 +79,37 @@ WSLUA_FUNCTION wslua_get_version(lua_State* L) { /* Get Wireshark version */
|
|||
|
||||
WSLUA_FUNCTION wslua_format_date(lua_State* LS) { /* Formats an absolute timestamp into a human readable date */
|
||||
#define WSLUA_ARG_format_date_TIMESTAMP 1 /* A timestamp value to convert. */
|
||||
lua_Number timestamp = luaL_checknumber(LS,WSLUA_ARG_format_date_TIMESTAMP);
|
||||
nstime_t then;
|
||||
gchar* str;
|
||||
lua_Number timestamp = luaL_checknumber(LS,WSLUA_ARG_format_date_TIMESTAMP);
|
||||
nstime_t then;
|
||||
gchar* str;
|
||||
|
||||
then.secs = (guint32)floor(timestamp);
|
||||
then.nsecs = (guint32) ( (timestamp-(double)(then.secs))*1000000000);
|
||||
str = abs_time_to_str(&then, ABSOLUTE_TIME_LOCAL, TRUE);
|
||||
lua_pushstring(LS,str);
|
||||
then.secs = (guint32)floor(timestamp);
|
||||
then.nsecs = (guint32) ( (timestamp-(double)(then.secs))*1000000000);
|
||||
str = abs_time_to_str(&then, ABSOLUTE_TIME_LOCAL, TRUE);
|
||||
lua_pushstring(LS,str);
|
||||
|
||||
WSLUA_RETURN(1); /* A string with the formated date */
|
||||
WSLUA_RETURN(1); /* A string with the formated date */
|
||||
}
|
||||
|
||||
WSLUA_FUNCTION wslua_format_time(lua_State* LS) { /* Formats a relative timestamp in a human readable form */
|
||||
#define WSLUA_ARG_format_time_TIMESTAMP 1 /* A timestamp value to convert */
|
||||
lua_Number timestamp = luaL_checknumber(LS,WSLUA_ARG_format_time_TIMESTAMP);
|
||||
nstime_t then;
|
||||
gchar* str;
|
||||
lua_Number timestamp = luaL_checknumber(LS,WSLUA_ARG_format_time_TIMESTAMP);
|
||||
nstime_t then;
|
||||
gchar* str;
|
||||
|
||||
then.secs = (guint32)floor(timestamp);
|
||||
then.nsecs = (guint32) ( (timestamp-(double)(then.secs))*1000000000);
|
||||
str = rel_time_to_str(&then);
|
||||
lua_pushstring(LS,str);
|
||||
then.secs = (guint32)floor(timestamp);
|
||||
then.nsecs = (guint32) ( (timestamp-(double)(then.secs))*1000000000);
|
||||
str = rel_time_to_str(&then);
|
||||
lua_pushstring(LS,str);
|
||||
|
||||
WSLUA_RETURN(1); /* A string with the formated time */
|
||||
WSLUA_RETURN(1); /* A string with the formated time */
|
||||
}
|
||||
|
||||
WSLUA_FUNCTION wslua_report_failure(lua_State* LS) { /* Reports a failure to the user */
|
||||
#define WSLUA_ARG_report_failure_TEXT 1 /* Message */
|
||||
const gchar* s = luaL_checkstring(LS,WSLUA_ARG_report_failure_TEXT);
|
||||
report_failure("%s",s);
|
||||
return 0;
|
||||
const gchar* s = luaL_checkstring(LS,WSLUA_ARG_report_failure_TEXT);
|
||||
report_failure("%s",s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int wslua_log(lua_State* L, GLogLevelFlags log_level) {
|
||||
|
@ -140,249 +140,249 @@ static int wslua_log(lua_State* L, GLogLevelFlags log_level) {
|
|||
}
|
||||
|
||||
WSLUA_FUNCTION wslua_critical( lua_State* L ) { /* Will add a log entry with critical severity*/
|
||||
/* WSLUA_MOREARGS critical objects to be printed */
|
||||
wslua_log(L,G_LOG_LEVEL_CRITICAL);
|
||||
return 0;
|
||||
/* WSLUA_MOREARGS critical objects to be printed */
|
||||
wslua_log(L,G_LOG_LEVEL_CRITICAL);
|
||||
return 0;
|
||||
}
|
||||
WSLUA_FUNCTION wslua_warn( lua_State* L ) { /* Will add a log entry with warn severity */
|
||||
/* WSLUA_MOREARGS warn objects to be printed */
|
||||
wslua_log(L,G_LOG_LEVEL_WARNING);
|
||||
return 0;
|
||||
/* WSLUA_MOREARGS warn objects to be printed */
|
||||
wslua_log(L,G_LOG_LEVEL_WARNING);
|
||||
return 0;
|
||||
}
|
||||
WSLUA_FUNCTION wslua_message( lua_State* L ) { /* Will add a log entry with message severity */
|
||||
/* WSLUA_MOREARGS message objects to be printed */
|
||||
wslua_log(L,G_LOG_LEVEL_MESSAGE);
|
||||
return 0;
|
||||
/* WSLUA_MOREARGS message objects to be printed */
|
||||
wslua_log(L,G_LOG_LEVEL_MESSAGE);
|
||||
return 0;
|
||||
}
|
||||
WSLUA_FUNCTION wslua_info( lua_State* L ) { /* Will add a log entry with info severity */
|
||||
/* WSLUA_MOREARGS info objects to be printed */
|
||||
wslua_log(L,G_LOG_LEVEL_INFO);
|
||||
return 0;
|
||||
/* WSLUA_MOREARGS info objects to be printed */
|
||||
wslua_log(L,G_LOG_LEVEL_INFO);
|
||||
return 0;
|
||||
}
|
||||
WSLUA_FUNCTION wslua_debug( lua_State* L ) { /* Will add a log entry with debug severity */
|
||||
/* WSLUA_MOREARGS debug objects to be printed */
|
||||
wslua_log(L,G_LOG_LEVEL_DEBUG);
|
||||
return 0;
|
||||
/* WSLUA_MOREARGS debug objects to be printed */
|
||||
wslua_log(L,G_LOG_LEVEL_DEBUG);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* The returned filename is g_malloc()'d so the caller must free it */
|
||||
/* except when NULL is returned if file doesn't exist */
|
||||
static char* wslua_get_actual_filename(const char* fname) {
|
||||
char fname_clean[256];
|
||||
char* f;
|
||||
char* filename;
|
||||
char fname_clean[256];
|
||||
char* f;
|
||||
char* filename;
|
||||
|
||||
g_strlcpy(fname_clean,fname,255);
|
||||
fname_clean[255] = '\0';
|
||||
g_strlcpy(fname_clean,fname,255);
|
||||
fname_clean[255] = '\0';
|
||||
|
||||
for(f = fname_clean; *f; f++) {
|
||||
switch(*f) {
|
||||
case '/': case '\\':
|
||||
*f = *(G_DIR_SEPARATOR_S);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
for(f = fname_clean; *f; f++) {
|
||||
switch(*f) {
|
||||
case '/': case '\\':
|
||||
*f = *(G_DIR_SEPARATOR_S);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( file_exists(fname_clean) ) {
|
||||
return g_strdup(fname_clean);
|
||||
}
|
||||
if ( file_exists(fname_clean) ) {
|
||||
return g_strdup(fname_clean);
|
||||
}
|
||||
|
||||
filename = get_persconffile_path(fname_clean,FALSE);
|
||||
filename = get_persconffile_path(fname_clean,FALSE);
|
||||
|
||||
if ( file_exists(filename) ) {
|
||||
return filename;
|
||||
}
|
||||
g_free(filename);
|
||||
if ( file_exists(filename) ) {
|
||||
return filename;
|
||||
}
|
||||
g_free(filename);
|
||||
|
||||
filename = get_datafile_path(fname_clean);
|
||||
if ( file_exists(filename) ) {
|
||||
return filename;
|
||||
}
|
||||
g_free(filename);
|
||||
filename = get_datafile_path(fname_clean);
|
||||
if ( file_exists(filename) ) {
|
||||
return filename;
|
||||
}
|
||||
g_free(filename);
|
||||
|
||||
return NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
WSLUA_FUNCTION wslua_loadfile(lua_State* L) {
|
||||
/* Lua's loadfile() has been modified so that if a file does not exist
|
||||
in the current directory it will look for it in wireshark's user and system directories */
|
||||
/* Lua's loadfile() has been modified so that if a file does not exist
|
||||
in the current directory it will look for it in wireshark's user and system directories */
|
||||
#define WSLUA_ARG_loadfile_FILENAME 1 /* Name of the file to be loaded */
|
||||
const char *given_fname = luaL_checkstring(L, WSLUA_ARG_loadfile_FILENAME);
|
||||
char* filename;
|
||||
const char *given_fname = luaL_checkstring(L, WSLUA_ARG_loadfile_FILENAME);
|
||||
char* filename;
|
||||
|
||||
filename = wslua_get_actual_filename(given_fname);
|
||||
filename = wslua_get_actual_filename(given_fname);
|
||||
|
||||
if (!filename) WSLUA_ARG_ERROR(loadfile,FILENAME,"file does not exist");
|
||||
if (!filename) WSLUA_ARG_ERROR(loadfile,FILENAME,"file does not exist");
|
||||
|
||||
if (luaL_loadfile(L, filename) == 0) {
|
||||
g_free(filename);
|
||||
return 1;
|
||||
} else {
|
||||
g_free(filename);
|
||||
lua_pushnil(L);
|
||||
lua_insert(L, -2);
|
||||
return 2;
|
||||
}
|
||||
if (luaL_loadfile(L, filename) == 0) {
|
||||
g_free(filename);
|
||||
return 1;
|
||||
} else {
|
||||
g_free(filename);
|
||||
lua_pushnil(L);
|
||||
lua_insert(L, -2);
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
WSLUA_FUNCTION wslua_dofile(lua_State* L) {
|
||||
/* Lua's dofile() has been modified so that if a file does not exist
|
||||
in the current directory it will look for it in wireshark's user and system directories */
|
||||
/* Lua's dofile() has been modified so that if a file does not exist
|
||||
in the current directory it will look for it in wireshark's user and system directories */
|
||||
#define WSLUA_ARG_dofile_FILENAME 1 /* Name of the file to be run */
|
||||
const char *given_fname = luaL_checkstring(L, WSLUA_ARG_dofile_FILENAME);
|
||||
char* filename;
|
||||
int n;
|
||||
const char *given_fname = luaL_checkstring(L, WSLUA_ARG_dofile_FILENAME);
|
||||
char* filename;
|
||||
int n;
|
||||
|
||||
if (!given_fname) WSLUA_ARG_ERROR(dofile,FILENAME,"must be a string");
|
||||
if (!given_fname) WSLUA_ARG_ERROR(dofile,FILENAME,"must be a string");
|
||||
|
||||
filename = wslua_get_actual_filename(given_fname);
|
||||
filename = wslua_get_actual_filename(given_fname);
|
||||
|
||||
if (!filename) WSLUA_ARG_ERROR(dofile,FILENAME,"file does not exist");
|
||||
if (!filename) WSLUA_ARG_ERROR(dofile,FILENAME,"file does not exist");
|
||||
|
||||
n = lua_gettop(L);
|
||||
if (luaL_loadfile(L, filename) != 0) lua_error(L);
|
||||
g_free(filename);
|
||||
lua_call(L, 0, LUA_MULTRET);
|
||||
return lua_gettop(L) - n;
|
||||
n = lua_gettop(L);
|
||||
if (luaL_loadfile(L, filename) != 0) lua_error(L);
|
||||
g_free(filename);
|
||||
lua_call(L, 0, LUA_MULTRET);
|
||||
return lua_gettop(L) - n;
|
||||
}
|
||||
|
||||
|
||||
WSLUA_FUNCTION wslua_persconffile_path(lua_State* L) {
|
||||
#define WSLUA_OPTARG_persconffile_path_FILENAME 1 /* A filename */
|
||||
const char *fname = luaL_optstring(L, WSLUA_OPTARG_persconffile_path_FILENAME,"");
|
||||
char* filename = get_persconffile_path(fname,FALSE);
|
||||
const char *fname = luaL_optstring(L, WSLUA_OPTARG_persconffile_path_FILENAME,"");
|
||||
char* filename = get_persconffile_path(fname,FALSE);
|
||||
|
||||
lua_pushstring(L,filename);
|
||||
g_free(filename);
|
||||
WSLUA_RETURN(1); /* The full pathname for a file in the personal configuration directory */
|
||||
lua_pushstring(L,filename);
|
||||
g_free(filename);
|
||||
WSLUA_RETURN(1); /* The full pathname for a file in the personal configuration directory */
|
||||
}
|
||||
|
||||
WSLUA_FUNCTION wslua_datafile_path(lua_State* L) {
|
||||
#define WSLUA_OPTARG_datafile_path_FILENAME 1 /* A filename */
|
||||
const char *fname = luaL_optstring(L, WSLUA_OPTARG_datafile_path_FILENAME,"");
|
||||
char* filename = get_datafile_path(fname);
|
||||
const char *fname = luaL_optstring(L, WSLUA_OPTARG_datafile_path_FILENAME,"");
|
||||
char* filename = get_datafile_path(fname);
|
||||
|
||||
lua_pushstring(L,filename);
|
||||
g_free(filename);
|
||||
WSLUA_RETURN(1); /* The full pathname for a file in wireshark's configuration directory */
|
||||
lua_pushstring(L,filename);
|
||||
g_free(filename);
|
||||
WSLUA_RETURN(1); /* The full pathname for a file in wireshark's configuration directory */
|
||||
}
|
||||
|
||||
|
||||
WSLUA_CLASS_DEFINE(Dir,NOP,NOP); /* A Directory */
|
||||
|
||||
WSLUA_CONSTRUCTOR Dir_open(lua_State* L) {
|
||||
/* Usage: for filename in Dir.open(path) do ... end */
|
||||
/* Usage: for filename in Dir.open(path) do ... end */
|
||||
#define WSLUA_ARG_Dir_open_PATHNAME 1 /* The pathname of the directory */
|
||||
#define WSLUA_OPTARG_Dir_open_EXTENSION 2 /* If given, only file with this extension will be returned */
|
||||
|
||||
const char* dirname = luaL_checkstring(L,WSLUA_ARG_Dir_open_PATHNAME);
|
||||
const char* extension = luaL_optstring(L,WSLUA_OPTARG_Dir_open_EXTENSION,NULL);
|
||||
Dir dir;
|
||||
char* dirname_clean;
|
||||
const char* dirname = luaL_checkstring(L,WSLUA_ARG_Dir_open_PATHNAME);
|
||||
const char* extension = luaL_optstring(L,WSLUA_OPTARG_Dir_open_EXTENSION,NULL);
|
||||
Dir dir;
|
||||
char* dirname_clean;
|
||||
|
||||
if (!dirname) WSLUA_ARG_ERROR(Dir_open,PATHNAME,"must be a string");
|
||||
if (!dirname) WSLUA_ARG_ERROR(Dir_open,PATHNAME,"must be a string");
|
||||
|
||||
dirname_clean = wslua_get_actual_filename(dirname);
|
||||
if (!dirname_clean) WSLUA_ARG_ERROR(Dir_open,PATHNAME,"directory does not exist");
|
||||
dirname_clean = wslua_get_actual_filename(dirname);
|
||||
if (!dirname_clean) WSLUA_ARG_ERROR(Dir_open,PATHNAME,"directory does not exist");
|
||||
|
||||
if (!test_for_directory(dirname_clean)) {
|
||||
g_free(dirname_clean);
|
||||
WSLUA_ARG_ERROR(Dir_open,PATHNAME, "must be a directory");
|
||||
}
|
||||
if (!test_for_directory(dirname_clean)) {
|
||||
g_free(dirname_clean);
|
||||
WSLUA_ARG_ERROR(Dir_open,PATHNAME, "must be a directory");
|
||||
}
|
||||
|
||||
dir = (Dir)g_malloc(sizeof(struct _wslua_dir));
|
||||
dir->dir = OPENDIR_OP(dirname_clean);
|
||||
g_free(dirname_clean);
|
||||
dir->ext = extension ? g_strdup(extension) : NULL;
|
||||
dir->dummy = (GError **)g_malloc(sizeof(GError *));
|
||||
*(dir->dummy) = NULL;
|
||||
dir = (Dir)g_malloc(sizeof(struct _wslua_dir));
|
||||
dir->dir = OPENDIR_OP(dirname_clean);
|
||||
g_free(dirname_clean);
|
||||
dir->ext = extension ? g_strdup(extension) : NULL;
|
||||
dir->dummy = (GError **)g_malloc(sizeof(GError *));
|
||||
*(dir->dummy) = NULL;
|
||||
|
||||
if (dir->dir == NULL) {
|
||||
g_free(dir->dummy);
|
||||
g_free(dir);
|
||||
if (dir->dir == NULL) {
|
||||
g_free(dir->dummy);
|
||||
g_free(dir);
|
||||
|
||||
WSLUA_ARG_ERROR(Dir_open,PATHNAME,"could not open directory");
|
||||
}
|
||||
WSLUA_ARG_ERROR(Dir_open,PATHNAME,"could not open directory");
|
||||
}
|
||||
|
||||
pushDir(L,dir);
|
||||
WSLUA_RETURN(1); /* the Dir object */
|
||||
pushDir(L,dir);
|
||||
WSLUA_RETURN(1); /* the Dir object */
|
||||
}
|
||||
|
||||
WSLUA_METAMETHOD Dir__call(lua_State* L) {
|
||||
/* At every invocation will return one file (nil when done) */
|
||||
/* At every invocation will return one file (nil when done) */
|
||||
|
||||
Dir dir = checkDir(L,1);
|
||||
const FILE_T* file;
|
||||
const gchar* filename;
|
||||
const char* ext;
|
||||
Dir dir = checkDir(L,1);
|
||||
const FILE_T* file;
|
||||
const gchar* filename;
|
||||
const char* ext;
|
||||
|
||||
if (!dir) {
|
||||
luaL_argerror(L,1,"must be a Dir");
|
||||
return 0;
|
||||
}
|
||||
if (!dir) {
|
||||
luaL_argerror(L,1,"must be a Dir");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!dir->dir) {
|
||||
return 0;
|
||||
}
|
||||
if (!dir->dir) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ( ! ( file = DIRGETNEXT_OP(dir->dir ) )) {
|
||||
CLOSEDIR_OP(dir->dir);
|
||||
dir->dir = NULL;
|
||||
return 0;
|
||||
}
|
||||
if ( ! ( file = DIRGETNEXT_OP(dir->dir ) )) {
|
||||
CLOSEDIR_OP(dir->dir);
|
||||
dir->dir = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
if ( ! dir->ext ) {
|
||||
filename = GETFNAME_OP(file);
|
||||
lua_pushstring(L,filename);
|
||||
return 1;
|
||||
}
|
||||
if ( ! dir->ext ) {
|
||||
filename = GETFNAME_OP(file);
|
||||
lua_pushstring(L,filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
do {
|
||||
filename = GETFNAME_OP(file);
|
||||
do {
|
||||
filename = GETFNAME_OP(file);
|
||||
|
||||
/* XXX strstr returns ptr to first match,
|
||||
this fails ext=".xxx" filename="aaa.xxxz.xxx" */
|
||||
if ( ( ext = strstr(filename,dir->ext)) && g_str_equal(ext,dir->ext) ) {
|
||||
lua_pushstring(L,filename);
|
||||
return 1;
|
||||
}
|
||||
} while(( file = DIRGETNEXT_OP(dir->dir) ));
|
||||
/* XXX strstr returns ptr to first match,
|
||||
this fails ext=".xxx" filename="aaa.xxxz.xxx" */
|
||||
if ( ( ext = strstr(filename,dir->ext)) && g_str_equal(ext,dir->ext) ) {
|
||||
lua_pushstring(L,filename);
|
||||
return 1;
|
||||
}
|
||||
} while(( file = DIRGETNEXT_OP(dir->dir) ));
|
||||
|
||||
CLOSEDIR_OP(dir->dir);
|
||||
dir->dir = NULL;
|
||||
return 0;
|
||||
CLOSEDIR_OP(dir->dir);
|
||||
dir->dir = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
WSLUA_METHOD Dir_close(lua_State* L) {
|
||||
/* Closes the directory */
|
||||
Dir dir = checkDir(L,1);
|
||||
/* Closes the directory */
|
||||
Dir dir = checkDir(L,1);
|
||||
|
||||
if (dir->dir) {
|
||||
CLOSEDIR_OP(dir->dir);
|
||||
dir->dir = NULL;
|
||||
}
|
||||
if (dir->dir) {
|
||||
CLOSEDIR_OP(dir->dir);
|
||||
dir->dir = NULL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Gets registered as metamethod automatically by WSLUA_REGISTER_CLASS/META */
|
||||
static int Dir__gc(lua_State* L) {
|
||||
Dir dir = checkDir(L,1);
|
||||
Dir dir = checkDir(L,1);
|
||||
|
||||
if (dir->dir) {
|
||||
CLOSEDIR_OP(dir->dir);
|
||||
}
|
||||
if (dir->dir) {
|
||||
CLOSEDIR_OP(dir->dir);
|
||||
}
|
||||
|
||||
g_free(dir->dummy);
|
||||
g_free(dir->dummy);
|
||||
|
||||
if (dir->ext) g_free(dir->ext);
|
||||
if (dir->ext) g_free(dir->ext);
|
||||
|
||||
g_free(dir);
|
||||
g_free(dir);
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const luaL_Reg Dir_methods[] = {
|
||||
|
@ -405,12 +405,12 @@ int Dir_register(lua_State* L) {
|
|||
|
||||
|
||||
typedef struct _statcmd_t {
|
||||
lua_State* L;
|
||||
int func_ref;
|
||||
lua_State* L;
|
||||
int func_ref;
|
||||
} statcmd_t;
|
||||
|
||||
static int statcmd_init_cb_error_handler(lua_State* L _U_) {
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void statcmd_init(const char *optarg, void* userdata) {
|
||||
|
@ -421,7 +421,7 @@ static void statcmd_init(const char *optarg, void* userdata) {
|
|||
lua_pushcfunction(L,statcmd_init_cb_error_handler);
|
||||
lua_rawgeti(L, LUA_REGISTRYINDEX, sc->func_ref);
|
||||
|
||||
lua_pushstring(L,optarg);
|
||||
lua_pushstring(L,optarg);
|
||||
|
||||
switch ( lua_pcall(L,1,0,1) ) {
|
||||
case 0:
|
||||
|
@ -440,17 +440,17 @@ static void statcmd_init(const char *optarg, void* userdata) {
|
|||
}
|
||||
|
||||
WSLUA_FUNCTION wslua_register_stat_cmd_arg(lua_State* L) {
|
||||
/* Register a function to handle a -z option */
|
||||
/* Register a function to handle a -z option */
|
||||
#define WSLUA_ARG_register_stat_cmd_arg_ARGUMENT 1 /* Argument */
|
||||
#define WSLUA_OPTARG_register_stat_cmd_arg_ACTION 2 /* Action */
|
||||
const char* arg = luaL_checkstring(L,WSLUA_ARG_register_stat_cmd_arg_ARGUMENT);
|
||||
statcmd_t* sc = (statcmd_t *)g_malloc0(sizeof(statcmd_t)); /* XXX leaked */
|
||||
const char* arg = luaL_checkstring(L,WSLUA_ARG_register_stat_cmd_arg_ARGUMENT);
|
||||
statcmd_t* sc = (statcmd_t *)g_malloc0(sizeof(statcmd_t)); /* XXX leaked */
|
||||
|
||||
sc->L = L;
|
||||
lua_pushvalue(L, WSLUA_OPTARG_register_stat_cmd_arg_ACTION);
|
||||
sc->func_ref = luaL_ref(L, LUA_REGISTRYINDEX);
|
||||
sc->L = L;
|
||||
lua_pushvalue(L, WSLUA_OPTARG_register_stat_cmd_arg_ACTION);
|
||||
sc->func_ref = luaL_ref(L, LUA_REGISTRYINDEX);
|
||||
lua_remove(L,1);
|
||||
|
||||
register_stat_cmd_arg(arg, statcmd_init, sc);
|
||||
return 0;
|
||||
register_stat_cmd_arg(arg, statcmd_init, sc);
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue