diff options
author | Andrei Karas <akaras@inbox.ru> | 2016-08-20 16:27:11 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-08-20 16:27:11 +0300 |
commit | af77eec4f736f989703f81df903a1a7c971fa659 (patch) | |
tree | ecadc9763347f1c6a04507f714e58f37f778533a /src/common/HPM.c | |
parent | 68947c86d5fe3eb2686c9b3393e3db0df083bb11 (diff) | |
parent | 9e02b4ed69ce857e3bda57c7f1d3b2457559c534 (diff) | |
download | hercules-af77eec4f736f989703f81df903a1a7c971fa659.tar.gz hercules-af77eec4f736f989703f81df903a1a7c971fa659.tar.bz2 hercules-af77eec4f736f989703f81df903a1a7c971fa659.tar.xz hercules-af77eec4f736f989703f81df903a1a7c971fa659.zip |
Merge pull request #1399 from HerculesWS/settings_libconfig
Ported the configuration to libconfig format
Diffstat (limited to 'src/common/HPM.c')
-rw-r--r-- | src/common/HPM.c | 52 |
1 files changed, 50 insertions, 2 deletions
diff --git a/src/common/HPM.c b/src/common/HPM.c index 8e0bbe992..a134a4822 100644 --- a/src/common/HPM.c +++ b/src/common/HPM.c @@ -2,7 +2,7 @@ * This file is part of Hercules. * http://herc.ws - http://github.com/HerculesWS/Hercules * - * Copyright (C) 2013-2015 Hercules Dev Team + * Copyright (C) 2013-2016 Hercules Dev Team * * Hercules is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -407,7 +407,7 @@ bool hpm_add_arg(unsigned int pluginID, char *name, bool has_param, CmdlineExecF * @retval true if the listener was added successfully. * @retval false in case of error. */ -bool hplugins_addconf(unsigned int pluginID, enum HPluginConfType type, char *name, void (*parse_func) (const char *key, const char *val), int (*return_func) (const char *key)) +bool hplugins_addconf(unsigned int pluginID, enum HPluginConfType type, char *name, void (*parse_func) (const char *key, const char *val), int (*return_func) (const char *key), bool required) { struct HPConfListenStorage *conf; int i; @@ -442,6 +442,7 @@ bool hplugins_addconf(unsigned int pluginID, enum HPluginConfType type, char *na safestrncpy(conf->key, name, HPM_ADDCONF_LENGTH); conf->parse_func = parse_func; conf->return_func = return_func; + conf->required = required; return true; } @@ -859,6 +860,52 @@ bool hplugins_get_battle_conf(const char *w1, int *value) } /** + * Parses battle config entries registered by plugins. + * + * @param config The configuration file to parse. + * @param filename Path to configuration file. + * @param imported Whether the current config is imported from another file. + * @retval false in case of error. + */ +bool hplugins_parse_battle_conf(const struct config_t *config, const char *filename, bool imported) +{ + const struct config_setting_t *setting = NULL; + int i, val, type; + char str[1024]; + bool retval = true; + + nullpo_retr(false, config); + + for (i = 0; i < VECTOR_LENGTH(HPM->config_listeners[HPCT_BATTLE]); i++) { + const struct HPConfListenStorage *entry = &VECTOR_INDEX(HPM->config_listeners[HPCT_BATTLE], i); + const char *config_name = entry->key; + if ((setting = libconfig->lookup(config, config_name)) == NULL) { + if (!imported && entry->required) { + ShowWarning("Missing configuration '%s' in file %s!\n", config_name, filename); + retval = false; + } + continue; + } + + switch ((type = config_setting_type(setting))) { + case CONFIG_TYPE_INT: + val = libconfig->setting_get_int(setting); + break; + case CONFIG_TYPE_BOOL: + val = libconfig->setting_get_bool(setting); + break; + default: // Unsupported type + ShowWarning("Setting %s has unsupported type %d, ignoring...\n", config_name, type); + retval = false; + continue; + } + sprintf(str, "%d", val); // FIXME: Remove this when support to int's as value is added + entry->parse_func(config_name, str); + } + return retval; +} + +/** * Helper to destroy an interface's hplugin_data store and release any owned memory. * * The pointer will be cleared. @@ -1074,6 +1121,7 @@ void hpm_defaults(void) HPM->parse_packets = hplugins_parse_packets; HPM->load_sub = NULL; HPM->parseConf = hplugins_parse_conf; + HPM->parse_battle_conf = hplugins_parse_battle_conf; HPM->getBattleConf = hplugins_get_battle_conf; HPM->DataCheck = HPM_DataCheck; HPM->datacheck_init = HPM_datacheck_init; |