switch to cargs
This commit is contained in:
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -4,3 +4,6 @@
|
|||||||
[submodule "lib/ds"]
|
[submodule "lib/ds"]
|
||||||
path = lib/ds
|
path = lib/ds
|
||||||
url = https://git.squi.bid/squibid/ds
|
url = https://git.squi.bid/squibid/ds
|
||||||
|
[submodule "lib/cargs"]
|
||||||
|
path = lib/cargs
|
||||||
|
url = https://github.com/likle/cargs
|
||||||
|
1
lib/cargs
Submodule
1
lib/cargs
Submodule
Submodule lib/cargs added at 0698c3f903
@@ -37,6 +37,7 @@ executable('wom', srcfiles,
|
|||||||
|
|
||||||
include_directories('lib/log.c/src'),
|
include_directories('lib/log.c/src'),
|
||||||
include_directories('lib/ds'),
|
include_directories('lib/ds'),
|
||||||
|
include_directories('lib/cargs/include'),
|
||||||
],
|
],
|
||||||
link_with: [
|
link_with: [
|
||||||
static_library('ds', 'lib/ds/ds.c',
|
static_library('ds', 'lib/ds/ds.c',
|
||||||
@@ -44,6 +45,9 @@ executable('wom', srcfiles,
|
|||||||
|
|
||||||
static_library('log.c', 'lib/log.c/src/log.c',
|
static_library('log.c', 'lib/log.c/src/log.c',
|
||||||
include_directories: 'lib/log.c/src'),
|
include_directories: 'lib/log.c/src'),
|
||||||
|
|
||||||
|
static_library('cargs', 'lib/cargs/src/cargs.c',
|
||||||
|
include_directories: 'lib/cargs/include'),
|
||||||
],
|
],
|
||||||
install: true
|
install: true
|
||||||
)
|
)
|
||||||
|
59
src/main.c
59
src/main.c
@@ -6,12 +6,36 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <cargs.h>
|
||||||
|
|
||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
#include "lua/wom.h"
|
#include "lua/wom.h"
|
||||||
#include "lua/wom_fs.h"
|
#include "lua/wom_fs.h"
|
||||||
#include "subcmds.h"
|
#include "subcmds.h"
|
||||||
#include "api.h"
|
#include "api.h"
|
||||||
|
|
||||||
|
static struct cag_option options[] = {
|
||||||
|
{
|
||||||
|
.identifier = 'v',
|
||||||
|
.access_letters = "v",
|
||||||
|
.access_name = "version",
|
||||||
|
.description = "get the version of womblic",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.identifier = 'c',
|
||||||
|
.access_letters = "c",
|
||||||
|
.access_name = "config",
|
||||||
|
.value_name = "PATH",
|
||||||
|
.description = "load an alternative config file"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.identifier = 'h',
|
||||||
|
.access_letters = "h",
|
||||||
|
.access_name = "help",
|
||||||
|
.description = "Shows the command help",
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
static lua_State
|
static lua_State
|
||||||
*load_wom_lua_lib(lua_State *L)
|
*load_wom_lua_lib(lua_State *L)
|
||||||
{
|
{
|
||||||
@@ -42,24 +66,31 @@ static lua_State
|
|||||||
int
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int c, l;
|
int l;
|
||||||
/* FIXME: config path can't be freed after being passed to lualib which causes
|
|
||||||
* a minor memory leak */
|
|
||||||
char *config_path = { 0 };
|
|
||||||
lua_State *L;
|
lua_State *L;
|
||||||
|
const char *cag_path;
|
||||||
|
char *config_path;
|
||||||
|
bool show_help = false;
|
||||||
|
cag_option_context context;
|
||||||
|
|
||||||
/* general options for womblic */
|
/* general options for womblic */
|
||||||
while ((c = getopt(argc, argv, "hvc:")) != -1) {
|
cag_option_init(&context, options, CAG_ARRAY_SIZE(options), argc, argv);
|
||||||
switch (c) {
|
while (cag_option_fetch(&context)) {
|
||||||
|
switch (cag_option_get_identifier(&context)) {
|
||||||
case 'c':
|
case 'c':
|
||||||
l = strlen(optarg);
|
cag_path = cag_option_get_value(&context);
|
||||||
|
l = strlen(cag_path);
|
||||||
config_path = calloc(l + 1, sizeof(char));
|
config_path = calloc(l + 1, sizeof(char));
|
||||||
strncpy(config_path, optarg, l);
|
strncpy(config_path, cag_path, l);
|
||||||
break;
|
break;
|
||||||
case 'v': printf("%s-%s\n", argv[0], VERSION); break;
|
case 'v': printf("%s-%s\n", argv[0], VERSION); break;
|
||||||
case 'h':
|
case 'h':
|
||||||
default:
|
printf("Usage: wom [OPTION]...\n");
|
||||||
printf("help text\n");
|
cag_option_print(options, CAG_ARRAY_SIZE(options), stdout);
|
||||||
|
show_help = true;
|
||||||
|
break;
|
||||||
|
case '?':
|
||||||
|
cag_option_print_error(&context, stdout);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -86,6 +117,12 @@ main(int argc, char *argv[])
|
|||||||
lua_pop(L, lua_gettop(L));
|
lua_pop(L, lua_gettop(L));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* show help info about which subcmds are available */
|
||||||
|
if (show_help) {
|
||||||
|
subcmds_subcmd(NULL, 0, NULL);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
run_subcmds(argc, argv);
|
run_subcmds(argc, argv);
|
||||||
|
|
||||||
lua_close(L);
|
lua_close(L);
|
||||||
|
Reference in New Issue
Block a user