From ce08d6238d902590dbfb650f889a8ab8887356bf Mon Sep 17 00:00:00 2001 From: Haru Date: Sun, 9 Nov 2014 02:07:09 +0100 Subject: Command line arguments handling overhaul - login_server, char_server, map_server as well as the tools (mapcache) now have a common command line arguments handling mechanism. - All of them now accept `--help` (`-h`), `--version` (`-v`) and `--load-plugin`. - login_server now accepts `--login-config` and `--lan-config` instead of relying on positional arguments to override those files. The old syntax will no longer work, please update your custom startup scripts. - char_server now accepts `--char-config`, `--inter-config`, `--lan-config` instead of relying on positional arguments. The old syntax will no longer work, please update your custom startup scripts. - mapcache now accepts `--grf-list`, `--map-list`, `--map-cache`, `--rebuild` in place of, respectively, `-grf`, `-list`, `-cache`, `-rebuild`. - A new macro `CMDLINEARG()` is provided, to help defining new command line argument handlers (i.e. in plugins). the `addArg()` call is still required, but its syntax has changed. The `help` argument is now of type `const char *` rather than a function pointer, and it is supposed to contain the message to show in the `--help` screen. Pass `NULL` if no help message is desired. Signed-off-by: Haru --- src/login/login.c | 68 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 21 deletions(-) (limited to 'src/login/login.c') diff --git a/src/login/login.c b/src/login/login.c index ec5b2bb7c..036456a85 100644 --- a/src/login/login.c +++ b/src/login/login.c @@ -1899,6 +1899,9 @@ int do_final(void) { HPM_login_do_final(); + aFree(login->LOGIN_CONF_NAME); + aFree(login->LAN_CONF_NAME); + HPM->event(HPET_POST_FINAL); ShowStatus("Finished.\n"); @@ -1939,6 +1942,39 @@ void login_hp_symbols(void) { HPM->share(login,"login"); } +/** + * --login-config handler + * + * Overrides the default login configuration file. + * @see cmdline->exec + */ +static CMDLINEARG(loginconfig) +{ + aFree(login->LOGIN_CONF_NAME); + login->LOGIN_CONF_NAME = aStrdup(params); + return true; +} +/** + * --lan-config handler + * + * Overrides the default subnet configuration file. + * @see cmdline->exec + */ +static CMDLINEARG(lanconfig) +{ + aFree(login->LAN_CONF_NAME); + login->LAN_CONF_NAME = aStrdup(params); + return true; +} +/** + * Defines the local command line arguments + */ +void cmdline_args_init_local(void) +{ + CMDLINEARG_DEF2(login-config, loginconfig, "Alternative login-server configuration.", CMDLINE_OPT_PARAM); + CMDLINEARG_DEF2(lan-config, lanconfig, "Alternative subnet configuration.", CMDLINE_OPT_PARAM); +} + //------------------------------ // Login server initialization //------------------------------ @@ -1959,31 +1995,18 @@ int do_init(int argc, char** argv) // read login-server configuration login_set_defaults(); + login->LOGIN_CONF_NAME = aStrdup("conf/login-server.conf"); + login->LAN_CONF_NAME = aStrdup("conf/subnet.conf"); + HPM_login_do_init(); HPM->symbol_defaults_sub = login_hp_symbols; - HPM->config_read(NULL, 0); -#if 0 - /* TODO: Move to common code */ - for( i = 1; i < argc; i++ ) { - const char* arg = argv[i]; - if( strcmp(arg, "--load-plugin") == 0 ) { - if( map->arg_next_value(arg, i, argc, true) ) { - RECREATE(load_extras, char *, ++load_extras_count); - load_extras[load_extras_count-1] = argv[++i]; - } - } - } - HPM->config_read((const char * const *)load_extras, load_extras_count); - if (load_extras) { - aFree(load_extras); - load_extras = NULL; - load_extras_count = 0; - } -#endif + cmdline->exec(argc, argv, CMDLINE_OPT_PREINIT); + HPM->config_read(); HPM->event(HPET_PRE_INIT); - login_config_read((argc > 1) ? argv[1] : LOGIN_CONF_NAME); - login->lan_config_read((argc > 2) ? argv[2] : LAN_CONF_NAME); + cmdline->exec(argc, argv, CMDLINE_OPT_NORMAL); + login_config_read(login->LOGIN_CONF_NAME); + login->lan_config_read(login->LAN_CONF_NAME); for( i = 0; i < ARRAYLENGTH(server); ++i ) chrif_server_init(i); @@ -2105,4 +2128,7 @@ void login_defaults(void) { login->kick = login_kick; login->login_error = login_login_error; login->send_coding_key = login_send_coding_key; + + login->LOGIN_CONF_NAME = NULL; + login->LAN_CONF_NAME = NULL; } -- cgit v1.2.3-60-g2f50