From b8be266a7f937935890ab3b64d82a6e70108aefb Mon Sep 17 00:00:00 2001 From: Cococry Date: Thu, 23 Jul 2026 12:19:18 +0200 Subject: [PATCH] feat: added [port] CLi options to faithd --- faithd/src/faithd.c | 33 ++++++++++++++++++++++++--------- faithd/src/server/server.c | 4 ++-- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/faithd/src/faithd.c b/faithd/src/faithd.c index e36d34d..de7e57e 100644 --- a/faithd/src/faithd.c +++ b/faithd/src/faithd.c @@ -3,14 +3,17 @@ #include "logging/logging.h" #include -enum { OPTIONS_VALID, UNKOWN_OPTION, JUST_PRINT_PRINT_HELP }; +enum { OPTIONS_NORMAL, OPTIONS_INVALID, JUST_PRINT_PRINT_HELP }; + +static int listen_port = 4433; static void print_usage(const char *prog) { printf("Usage: %s [options]\n" "\n" "Options:\n" - " -v, --verbose Enable verbose logging\n" - " -h, --help Show this help message\n", + " -v, --verbose Enable verbose logging\n" + " -p, --port [port] Specify the port to listen on\n" + " -h, --help Show this help message\n", prog); } @@ -23,6 +26,17 @@ static int parse_args(int argc, char **argv) { continue; } + if (strcmp(arg, "-p") == 0 || strcmp(arg, "--pport") == 0) { + if(i + 1 > argc - 1) { + fprintf(stderr, "No port number specified for: %s\n", arg); + fprintf(stderr, "Usage: -p, --port [port]\n"); + return OPTIONS_INVALID; + } + listen_port = atoi(argv[i + 1]); + i++; + continue; + } + if (strcmp(arg, "-h") == 0 || strcmp(arg, "--help") == 0) { print_usage(argv[0]); return JUST_PRINT_PRINT_HELP; @@ -31,21 +45,22 @@ static int parse_args(int argc, char **argv) { fprintf(stderr, "Unknown option: %s\n\n", arg); print_usage(argv[0]); - return UNKOWN_OPTION; + return OPTIONS_INVALID; } - return OPTIONS_VALID; + return OPTIONS_NORMAL; } int main(int argc, char **argv) { - int rc = parse_args(argc, argv); - if (rc != OPTIONS_VALID) { - return rc == JUST_PRINT_PRINT_HELP ? EXIT_SUCCESS : EXIT_FAILURE; + int options = parse_args(argc, argv); + + if (options != OPTIONS_NORMAL) { + return options == JUST_PRINT_PRINT_HELP ? EXIT_SUCCESS : EXIT_FAILURE; } server_state_t s = {0}; - server_config_t cfg = {.listen_port = 4433}; + server_config_t cfg = {.listen_port = listen_port}; if (server_init(&s, &cfg) != FAITH_OK) { nob_log(INFO, "Server initialization failed."); diff --git a/faithd/src/server/server.c b/faithd/src/server/server.c index c9f3e27..cf2cbfa 100644 --- a/faithd/src/server/server.c +++ b/faithd/src/server/server.c @@ -183,7 +183,7 @@ static faith_status_code_t init_listener(int port) { } if ((bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr))) != 0) { - nob_log(ERROR, "Socket bind failed"); + nob_log(ERROR, "Socket bind failed on port %i: %s", port, strerror(errno)); close(listenfd); return -1; } @@ -196,7 +196,7 @@ static faith_status_code_t init_listener(int port) { return -1; } - nob_log(INFO, "Server listening.."); + nob_log(INFO, "Server listening on %i...", port); return listenfd; }