diff options
Diffstat (limited to 'src/map/pc_groups.c')
-rw-r--r-- | src/map/pc_groups.c | 43 |
1 files changed, 25 insertions, 18 deletions
diff --git a/src/map/pc_groups.c b/src/map/pc_groups.c index bd46b9616..9645300ef 100644 --- a/src/map/pc_groups.c +++ b/src/map/pc_groups.c @@ -2,7 +2,7 @@ * This file is part of Hercules. * http://herc.ws - http://github.com/HerculesWS/Hercules * - * Copyright (C) 2012-2015 Hercules Dev Team + * Copyright (C) 2012-2016 Hercules Dev Team * Copyright (C) Athena Dev Teams * * Hercules is free software: you can redistribute it and/or modify @@ -63,19 +63,19 @@ static inline GroupSettings* name2group(const char* group_name) * @private */ static void read_config(void) { - config_t pc_group_config; - config_setting_t *groups = NULL; + struct config_t pc_group_config; + struct config_setting_t *groups = NULL; const char *config_filename = "conf/groups.conf"; // FIXME hardcoded name int group_count = 0; - if (libconfig->read_file(&pc_group_config, config_filename)) + if (!libconfig->load_file(&pc_group_config, config_filename)) return; groups = libconfig->lookup(&pc_group_config, "groups"); if (groups != NULL) { GroupSettings *group_settings = NULL; - DBIterator *iter = NULL; + struct DBIterator *iter = NULL; int i, loop = 0; group_count = libconfig->setting_length(groups); @@ -83,7 +83,7 @@ static void read_config(void) { int id = 0, level = 0; const char *groupname = NULL; int log_commands = 0; - config_setting_t *group = libconfig->setting_get_elem(groups, i); + struct config_setting_t *group = libconfig->setting_get_elem(groups, i); if (!libconfig->setting_lookup_int(group, "id", &id)) { ShowConfigWarning(group, "pc_groups:read_config: \"groups\" list member #%d has undefined id, removing...", i); @@ -106,11 +106,11 @@ static void read_config(void) { if (!libconfig->setting_lookup_string(group, "name", &groupname)) { char temp[20]; - config_setting_t *name = NULL; + struct config_setting_t *name = NULL; snprintf(temp, sizeof(temp), "Group %d", id); if ((name = config_setting_add(group, "name", CONFIG_TYPE_STRING)) == NULL || !config_setting_set_string(name, temp)) { - ShowError("pc_groups:read_config: failed to set missing group name, id=%d, skipping... (%s:%d)\n", + ShowError("pc_groups:read_config: failed to set missing group name, id=%d, skipping... (%s:%u)\n", id, config_setting_source_file(group), config_setting_source_line(group)); --i; --group_count; @@ -148,7 +148,7 @@ static void read_config(void) { // Check if all commands and permissions exist iter = db_iterator(pcg->db); for (group_settings = dbi_first(iter); dbi_exists(iter); group_settings = dbi_next(iter)) { - config_setting_t *commands = group_settings->commands, *permissions = group_settings->permissions; + struct config_setting_t *commands = group_settings->commands, *permissions = group_settings->permissions; int count = 0; // Make sure there is "commands" group @@ -157,7 +157,7 @@ static void read_config(void) { count = libconfig->setting_length(commands); for (i = 0; i < count; ++i) { - config_setting_t *command = libconfig->setting_get_elem(commands, i); + struct config_setting_t *command = libconfig->setting_get_elem(commands, i); const char *name = config_setting_name(command); if (!atcommand->exists(name)) { ShowConfigWarning(command, "pc_groups:read_config: non-existent command name '%s', removing...", name); @@ -173,7 +173,7 @@ static void read_config(void) { count = libconfig->setting_length(permissions); for(i = 0; i < count; ++i) { - config_setting_t *permission = libconfig->setting_get_elem(permissions, i); + struct config_setting_t *permission = libconfig->setting_get_elem(permissions, i); const char *name = config_setting_name(permission); int j; @@ -193,7 +193,7 @@ static void read_config(void) { while (i < group_count) { iter = db_iterator(pcg->db); for (group_settings = dbi_first(iter); dbi_exists(iter); group_settings = dbi_next(iter)) { - config_setting_t *inherit = NULL, + struct config_setting_t *inherit = NULL, *commands = group_settings->commands, *permissions = group_settings->permissions; int j, inherit_count = 0, done = 0; @@ -258,11 +258,11 @@ static void read_config(void) { // Pack permissions into GroupSettings.e_permissions for faster checking iter = db_iterator(pcg->db); for (group_settings = dbi_first(iter); dbi_exists(iter); group_settings = dbi_next(iter)) { - config_setting_t *permissions = group_settings->permissions; + struct config_setting_t *permissions = group_settings->permissions; int count = libconfig->setting_length(permissions); for (i = 0; i < count; ++i) { - config_setting_t *perm = libconfig->setting_get_elem(permissions, i); + struct config_setting_t *perm = libconfig->setting_get_elem(permissions, i); const char *name = config_setting_name(perm); int val = libconfig->setting_get_bool(perm); int j; @@ -280,9 +280,9 @@ static void read_config(void) { // to atcommand->load_group() for processing. if (group_count > 0) { GroupSettings **pc_groups = NULL; - config_setting_t **commands = NULL; + struct config_setting_t **commands = NULL; CREATE(pc_groups, GroupSettings*, group_count); - CREATE(commands, config_setting_t*, group_count); + CREATE(commands, struct config_setting_t*, group_count); i = 0; iter = db_iterator(pcg->db); for (group_settings = dbi_first(iter); dbi_exists(iter); group_settings = dbi_next(iter)) { @@ -310,6 +310,7 @@ static void read_config(void) { */ bool pc_group_has_permission(GroupSettings *group, unsigned int permission) { + nullpo_retr(false, group); return ((group->e_permissions&permission) != 0); } @@ -319,6 +320,7 @@ bool pc_group_has_permission(GroupSettings *group, unsigned int permission) */ bool pc_group_should_log_commands(GroupSettings *group) { + nullpo_retr(true, group); return group->log_commands; } @@ -348,6 +350,7 @@ GroupSettings* pc_group_id2group(int group_id) */ const char* pc_group_get_name(GroupSettings *group) { + nullpo_retr(NULL, group); return group->name; } @@ -359,6 +362,7 @@ const char* pc_group_get_name(GroupSettings *group) */ int pc_group_get_level(GroupSettings *group) { + nullpo_ret(group); return group->level; } @@ -370,6 +374,7 @@ int pc_group_get_level(GroupSettings *group) */ int pc_group_get_idx(GroupSettings *group) { + nullpo_ret(group); return group->index; } @@ -380,6 +385,7 @@ int pc_group_get_idx(GroupSettings *group) unsigned int pc_groups_add_permission(const char *name) { uint64 key = 0x1; unsigned char i; + nullpo_ret(name); for(i = 0; i < pcg->permission_count; i++) { if( strcmpi(name,pcg->permissions[i].name) == 0 ) { @@ -446,7 +452,7 @@ void do_init_pc_groups(void) { for(i = 0; i < len; i++) { unsigned int p; if( ( p = pc_groups_add_permission(pc_g_defaults[i].name) ) != pc_g_defaults[i].permission ) - ShowError("do_init_pc_groups: %s error : %d != %d\n",pc_g_defaults[i].name,p,pc_g_defaults[i].permission); + ShowError("do_init_pc_groups: %s error : %u != %u\n", pc_g_defaults[i].name, p, pc_g_defaults[i].permission); } /** @@ -465,9 +471,10 @@ void do_init_pc_groups(void) { /** * @see DBApply */ -static int group_db_clear_sub(DBKey key, DBData *data, va_list args) +static int group_db_clear_sub(union DBKey key, struct DBData *data, va_list args) { GroupSettings *group = DB->data2ptr(data); + nullpo_ret(group); if (group->name) aFree(group->name); return 0; |