This commit is contained in:
Andreas Eversberg 2024-01-27 09:29:19 +01:00
parent 9af42630f6
commit 9e272ade15
2 changed files with 11 additions and 24 deletions

View File

@ -25,8 +25,6 @@
#include "options.h" #include "options.h"
#include "../liblogging/logging.h" #include "../liblogging/logging.h"
const char *selected_config_file = NULL;
typedef struct option { typedef struct option {
struct option *next; struct option *next;
int short_option; int short_option;
@ -64,11 +62,11 @@ void option_add(int short_option, const char *long_option, int parameter_count)
option_t *option; option_t *option;
/* check if option already exists or is not allowed */ /* check if option already exists or is not allowed */
if (!strcmp(long_option, "config") || !strcmp(long_option, "no-config")) { for (option = option_head; option; option = option->next) {
if (!strcmp(option->long_option, "config")) {
LOGP(DOPTIONS, LOGL_ERROR, "Option '%s' is not allowed to add, please fix!\n", option->long_option); LOGP(DOPTIONS, LOGL_ERROR, "Option '%s' is not allowed to add, please fix!\n", option->long_option);
abort(); abort();
} }
for (option = option_head; option; option = option->next) {
if (option->short_option == short_option if (option->short_option == short_option
|| !strcmp(option->long_option, long_option)) { || !strcmp(option->long_option, long_option)) {
LOGP(DOPTIONS, LOGL_ERROR, "Option '%s' added twice, please fix!\n", option->long_option); LOGP(DOPTIONS, LOGL_ERROR, "Option '%s' added twice, please fix!\n", option->long_option);
@ -89,7 +87,7 @@ void option_add(int short_option, const char *long_option, int parameter_count)
option_tailp = &(option->next); option_tailp = &(option->next);
} }
int options_config_file(int argc, char *argv[], const char *_config_file, int (*handle_options)(int short_option, int argi, char *argv[])) int options_config_file(int argc, char *argv[], const char *config_file, int (*handle_options)(int short_option, int argi, char *argv[]))
{ {
static const char *home; static const char *home;
char config[256]; char config[256];
@ -103,24 +101,16 @@ int options_config_file(int argc, char *argv[], const char *_config_file, int (*
/* select for alternative config file */ /* select for alternative config file */
if (argc > 2 && !strcmp(argv[1], "--config")) if (argc > 2 && !strcmp(argv[1], "--config"))
selected_config_file = argv[2]; config_file = argv[2];
else
selected_config_file = _config_file;
/* select for alternative config file */
if (argc > 1 && !strcmp(argv[1], "--no-config")) {
selected_config_file = NULL;
return 1;
}
/* add home directory */ /* add home directory */
if (selected_config_file[0] == '~' && selected_config_file[1] == '/') { if (config_file[0] == '~' && config_file[1] == '/') {
home = getenv("HOME"); home = getenv("HOME");
if (home == NULL) if (home == NULL)
return 1; return 1;
sprintf(config, "%s/%s", home, selected_config_file + 2); sprintf(config, "%s/%s", home, config_file + 2);
} else } else
strcpy(config, selected_config_file); strcpy(config, config_file);
/* open config file */ /* open config file */
fp = fopen(config, "r"); fp = fopen(config, "r");
@ -220,12 +210,12 @@ int options_config_file(int argc, char *argv[], const char *_config_file, int (*
} }
} }
if (!option) { if (!option) {
LOGP(DOPTIONS, LOGL_ERROR, "Given option '%s' in config file '%s' at line %d is not a valid option, use '-h' for help!\n", opt, selected_config_file, line); LOGP(DOPTIONS, LOGL_ERROR, "Given option '%s' in config file '%s' at line %d is not a valid option, use '-h' for help!\n", opt, config_file, line);
rc = -EINVAL; rc = -EINVAL;
goto done; goto done;
} }
if (option->parameter_count != i) { if (option->parameter_count != i) {
LOGP(DOPTIONS, LOGL_ERROR, "Given option '%s' in config file '%s' at line %d requires %d parameter(s), use '-h' for help!\n", opt, selected_config_file, line, option->parameter_count); LOGP(DOPTIONS, LOGL_ERROR, "Given option '%s' in config file '%s' at line %d requires %d parameter(s), use '-h' for help!\n", opt, config_file, line, option->parameter_count);
return -EINVAL; return -EINVAL;
} }
rc = handle_options(option->short_option, 0, args); rc = handle_options(option->short_option, 0, args);
@ -262,8 +252,6 @@ int options_command_line(int argc, char *argv[], int (*handle_options)(int short
argi += 1; argi += 1;
continue; continue;
} }
if (!strcmp(argv[argi], "--no-config"))
continue;
if (argv[argi][0] == '-') { if (argv[argi][0] == '-') {
if (argv[argi][1] != '-') { if (argv[argi][1] != '-') {
if (strlen(argv[argi]) != 2) { if (strlen(argv[argi]) != 2) {

View File

@ -1,5 +1,4 @@
extern const char *selected_config_file;
char *options_strdup(const char *s); char *options_strdup(const char *s);
void option_add(int short_option, const char *long_option, int parameter_count); void option_add(int short_option, const char *long_option, int parameter_count);
int options_config_file(int argc, char *argv[], const char *config_file, int (*handle_options)(int short_option, int argi, char *argv[])); int options_config_file(int argc, char *argv[], const char *config_file, int (*handle_options)(int short_option, int argi, char *argv[]));