diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-03-22 18:08:25 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-03-22 22:20:29 -0400 |
commit | 9e0c1a77708a37add72fabcae586fbadcec090c0 (patch) | |
tree | 38ed489550ccf892c0454d27f49f6fa64d1160d1 | |
parent | d05b94dab462ee223b19eb658a4914e43e4e14b8 (diff) | |
download | stasis-9e0c1a77708a37add72fabcae586fbadcec090c0.tar.gz |
Fix size of realloc'd data
* Fix up error handling for relloc'd data
-rw-r--r-- | src/ini.c | 18 |
1 files changed, 12 insertions, 6 deletions
@@ -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; } |