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 /src | |
| parent | d05b94dab462ee223b19eb658a4914e43e4e14b8 (diff) | |
| download | stasis-9e0c1a77708a37add72fabcae586fbadcec090c0.tar.gz | |
Fix size of realloc'd data
* Fix up error handling for relloc'd data
Diffstat (limited to 'src')
| -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;  } | 
