aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorforever2k38 <forever2k38@noreply.codeberg.org>2026-08-30 22:38:37 +0200
committerforever2k38 <forever2k38@noreply.codeberg.org>2026-08-30 22:38:37 +0200
commit31d0ca0d7ec41d611eb89759b6bee07a14be50ce (patch)
treea30d4e358ad5d86733b90ffdead8986f75aedbe6
parent4157efea8155b9700b49834ebcd4b4e978546478 (diff)
lua config work
-rw-r--r--src/args.c29
-rw-r--r--src/config.c33
2 files changed, 60 insertions, 2 deletions
diff --git a/src/args.c b/src/args.c
index 445d276..7962ad4 100644
--- a/src/args.c
+++ b/src/args.c
@@ -4,7 +4,11 @@
#include "stdio.h"
#include "string.h"
-char *help = "pow! - the pow!erful package manager\n"
+char *help = "▄▄▄▄▄▄▄▄▄▄▄ ▄\n"
+ "█ █ █ ▄ █\n"
+ "█▄▄▄▄█▄▄▄▄█▄▄█▄▄█\n"
+ "█\n\n"
+ "pow! - the pow!erful package manager\n"
"Made with love by forever2k38\n"
"Source code at: https://codeberg.org/einfach/pow\n"
"Use outside of einfach is unsupported.\n"
@@ -17,9 +21,25 @@ char *help = "pow! - the pow!erful package manager\n"
int pow_args_parse(int argc, char **argv, pow_args *args) {
int flags = 0;
+ bool next_flag_config;
+
for (int i = 0; i < argc; i++) {
char *arg = argv[i];
+ if (next_flag_config) {
+ if (!strncmp(arg, "-", sizeof("-") - 1)) {
+ printf("Missing argument for -c\n");
+
+ return 1;
+ }
+
+ args->cfg_path = arg;
+
+ next_flag_config = false;
+
+ continue;
+ }
+
if (strcmp(arg, "--help") == 0) {
flags |= POW_FLAG_HELP;
@@ -27,9 +47,16 @@ int pow_args_parse(int argc, char **argv, pow_args *args) {
}
if (strcmp(arg, "-c") == 0) {
+ next_flag_config = true;
+
+ continue;
}
}
+ if (next_flag_config) {
+ printf("Missing argument for -c\n");
+ }
+
args->flags = flags;
return 0;
diff --git a/src/config.c b/src/config.c
index 4019e7b..54a505a 100644
--- a/src/config.c
+++ b/src/config.c
@@ -22,7 +22,7 @@ int pow_open_config(pow_config *cfg, char *path) {
return 1;
}
- err = lua_pcall(L, 0, 0, 0);
+ err = lua_pcall(L, 0, 1, 0);
if (err) {
printf("%s\n", lua_tostring(L, -1));
@@ -30,5 +30,36 @@ int pow_open_config(pow_config *cfg, char *path) {
return 1;
}
+ if (!lua_istable(L, -1)) {
+ printf("bad config. you must return a table.\n");
+
+ return 1;
+ }
+
+ lua_getfield(L, -1, "repos"); // this will push the entire config table to -2
+ // and push repos to -1
+
+ if (lua_istable(L, -1)) {
+ size_t repo_count = lua_rawlen(L, -1);
+
+ for (size_t i = 1; i <= repo_count; i++) {
+ lua_rawgeti(L, -1, i);
+
+ if (lua_istable(L, -1)) {
+ lua_getfield(L, -1, "path");
+
+ if (lua_isstring(L, -1)) {
+ const char *path = lua_tostring(L, -1);
+
+ printf("%s\n", path);
+ }
+
+ lua_pop(L, 1);
+ }
+
+ lua_pop(L, 1);
+ }
+ }
+
return 0;
}