diff options
| author | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2015-07-19 21:54:57 -0300 | 
|---|---|---|
| committer | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2015-07-19 21:54:57 -0300 | 
| commit | 3468762d7a830bd68dafdc4c8d489f965fd48b42 (patch) | |
| tree | 28b34e92f36275f37280f8816dee266275427b80 /src | |
| parent | 8aaa346994fe87ce0badfd3ac0c2ee302c86716c (diff) | |
| download | blogc-3468762d7a830bd68dafdc4c8d489f965fd48b42.tar.gz blogc-3468762d7a830bd68dafdc4c8d489f965fd48b42.tar.bz2 blogc-3468762d7a830bd68dafdc4c8d489f965fd48b42.zip | |
utils/mem: added safe realloc
Diffstat (limited to 'src')
| -rw-r--r-- | src/utils/mem.c | 14 | ||||
| -rw-r--r-- | src/utils/strings.c | 8 | ||||
| -rw-r--r-- | src/utils/utils.h | 1 | 
3 files changed, 19 insertions, 4 deletions
| diff --git a/src/utils/mem.c b/src/utils/mem.c index 7befc73..7c5e0a2 100644 --- a/src/utils/mem.c +++ b/src/utils/mem.c @@ -26,3 +26,17 @@ b_malloc(size_t size)      }      return rv;  } + + +void* +b_realloc(void *ptr, size_t size) +{ +    // simple things even simpler :P +    void *rv = realloc(ptr, size); +    if (rv == NULL && size != 0) { +        fprintf(stderr, "fatal error: Failed to reallocate memory!\n"); +        free(ptr); +        exit(1); +    } +    return rv; +} diff --git a/src/utils/strings.c b/src/utils/strings.c index 502cfd4..40174a1 100644 --- a/src/utils/strings.c +++ b/src/utils/strings.c @@ -137,14 +137,14 @@ b_str_split(const char *str, char c, unsigned int max_pieces)          if (str[0] == '\0')              break;          if ((str[i] == c && (!max_pieces || count + 1 < max_pieces)) || str[i] == '\0') { -            rv = realloc(rv, (count + 1) * sizeof(char*)); +            rv = b_realloc(rv, (count + 1) * sizeof(char*));              rv[count] = b_malloc(i - start + 1);              memcpy(rv[count], str + start, i - start);              rv[count++][i - start] = '\0';              start = i + 1;          }      } -    rv = realloc(rv, (count + 1) * sizeof(char*)); +    rv = b_realloc(rv, (count + 1) * sizeof(char*));      rv[count] = NULL;      return rv;  } @@ -238,7 +238,7 @@ b_string_append_len(b_string_t *str, const char *suffix, size_t len)      str->len += len;      if (str->len + 1 > str->allocated_len) {          str->allocated_len = (((str->len + 1) / B_STRING_CHUNK_SIZE) + 1) * B_STRING_CHUNK_SIZE; -        str->str = realloc(str->str, str->allocated_len); +        str->str = b_realloc(str->str, str->allocated_len);      }      memcpy(str->str + old_len, suffix, len);      str->str[str->len] = '\0'; @@ -262,7 +262,7 @@ b_string_append_c(b_string_t *str, char c)      str->len += 1;      if (str->len + 1 > str->allocated_len) {          str->allocated_len = (((str->len + 1) / B_STRING_CHUNK_SIZE) + 1) * B_STRING_CHUNK_SIZE; -        str->str = realloc(str->str, str->allocated_len); +        str->str = b_realloc(str->str, str->allocated_len);      }      str->str[old_len] = c;      str->str[str->len] = '\0'; diff --git a/src/utils/utils.h b/src/utils/utils.h index 8029a6c..5a1505b 100644 --- a/src/utils/utils.h +++ b/src/utils/utils.h @@ -72,5 +72,6 @@ unsigned int b_trie_size(b_trie_t *trie);  void b_trie_foreach(b_trie_t *trie, void (*func)(const char *key, void *data));  void* b_malloc(size_t size); +void* b_realloc(void *ptr, size_t size);  #endif /* _UTILS_UTILS_H */ | 
