aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2024-03-22 18:08:25 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2024-03-22 22:20:29 -0400
commit9e0c1a77708a37add72fabcae586fbadcec090c0 (patch)
tree38ed489550ccf892c0454d27f49f6fa64d1160d1
parentd05b94dab462ee223b19eb658a4914e43e4e14b8 (diff)
downloadstasis-9e0c1a77708a37add72fabcae586fbadcec090c0.tar.gz
Fix size of realloc'd data
* Fix up error handling for relloc'd data
-rw-r--r--src/ini.c18
1 files changed, 12 insertions, 6 deletions
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;
}