From 9e0c1a77708a37add72fabcae586fbadcec090c0 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Fri, 22 Mar 2024 18:08:25 -0400 Subject: Fix size of realloc'd data * Fix up error handling for relloc'd data --- src/ini.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/ini.c b/src/ini.c index ada0701..b40c56e 100644 --- a/src/ini.c +++ b/src/ini.c @@ -147,10 +147,11 @@ int ini_data_append(struct INIFILE **ini, char *section_name, char *key, char *v } struct INIData **tmp = realloc(section->data, (section->data_count + 1) * sizeof(**section->data)); - if (!tmp) { + if (tmp != section->data) { + section->data = tmp; + } else if (!tmp) { return 1; } - section->data = tmp; if (!ini_data_get((*ini), section_name, key)) { section->data[section->data_count] = calloc(1, sizeof(*section->data[0])); section->data[section->data_count]->key = key; @@ -164,29 +165,34 @@ int ini_data_append(struct INIFILE **ini, char *section_name, char *key, char *v char *value_tmp = NULL; value_tmp = realloc(data->value, value_len_new + 2); if (!value_tmp) { - perror(__FUNCTION__ ); + SYSERROR("Unable to increase data->value size to %zu bytes", value_len_new + 2); return -1; + } else if (value_tmp != data->value) { + data->value = value_tmp; } - data->value = value_tmp; strcat(data->value, value); } return 0; } int ini_section_create(struct INIFILE **ini, char *key) { - struct INISection **tmp = realloc((*ini)->section, ((*ini)->section_count + 1) * sizeof((*ini)->section)); + struct INISection **tmp = realloc((*ini)->section, ((*ini)->section_count + 1) * sizeof(**(*ini)->section)); if (!tmp) { return 1; + } else if (tmp != (*ini)->section) { + (*ini)->section = tmp; } - (*ini)->section = tmp; + (*ini)->section[(*ini)->section_count] = calloc(1, sizeof(*(*ini)->section[0])); if (!(*ini)->section[(*ini)->section_count]) { return -1; } + (*ini)->section[(*ini)->section_count]->key = strdup(key); if (!(*ini)->section[(*ini)->section_count]->key) { return -1; } + (*ini)->section_count++; return 0; } -- cgit