switch to cargs

This commit is contained in:
2025-08-31 10:24:53 -04:00
parent fbd9e00c71
commit 18500e163c
4 changed files with 56 additions and 11 deletions

3
.gitmodules vendored
View File

@@ -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

Submodule lib/cargs added at 0698c3f903

View File

@@ -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
) )

View File

@@ -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);