diff options
| author | Thomas Schmucker <ts@its1.de> | 2020-06-19 10:49:21 +0200 |
|---|---|---|
| committer | Thomas Schmucker <ts@its1.de> | 2020-06-19 10:49:21 +0200 |
| commit | c4d90c834c38545fd451f12dc51222c9928f9867 (patch) | |
| tree | 590117fceced720b6ed0f5f90e6d5a3510e13a92 | |
| parent | ed36aabf97f769126ff075e43285a45aa5eec518 (diff) | |
| download | libcsv-c4d90c834c38545fd451f12dc51222c9928f9867.tar.gz libcsv-c4d90c834c38545fd451f12dc51222c9928f9867.tar.bz2 libcsv-c4d90c834c38545fd451f12dc51222c9928f9867.zip | |
Bereinige den benutzten Speicher vor der Freigabe...
| -rw-r--r-- | csv.c | 8 | ||||
| -rw-r--r-- | csv.h | 2 |
2 files changed, 6 insertions, 4 deletions
| @@ -1,6 +1,7 @@ | |||
| 1 | #include <stdio.h> | 1 | #include <stdio.h> |
| 2 | #include <stdlib.h> | 2 | #include <stdlib.h> |
| 3 | #include <assert.h> | 3 | #include <assert.h> |
| 4 | #include <string.h> | ||
| 4 | #include "csv.h" | 5 | #include "csv.h" |
| 5 | 6 | ||
| 6 | #define INLINE static inline | 7 | #define INLINE static inline |
| @@ -24,10 +25,11 @@ csv_mem_reallocate(void *ptr, size_t n, size_t sz, void *cb_arg) | |||
| 24 | } | 25 | } |
| 25 | 26 | ||
| 26 | static void | 27 | static void |
| 27 | csv_mem_free(void *ptr, void *cb_arg) | 28 | csv_mem_free(void *ptr, size_t sz, void *cb_arg) |
| 28 | { | 29 | { |
| 29 | (void) cb_arg; | 30 | (void) cb_arg; |
| 30 | 31 | ||
| 32 | explicit_bzero(ptr, sz); | ||
| 31 | free(ptr); | 33 | free(ptr); |
| 32 | } | 34 | } |
| 33 | 35 | ||
| @@ -121,7 +123,7 @@ csv_string_free(csv_string_t *csv_string, const csv_options_t * const csv_option | |||
| 121 | assert(csv_string != NULL); | 123 | assert(csv_string != NULL); |
| 122 | assert(csv_options != NULL); | 124 | assert(csv_options != NULL); |
| 123 | 125 | ||
| 124 | csv_options->cb_free(csv_string->str, csv_options->cb_arg); | 126 | csv_options->cb_free(csv_string->str, csv_string->cap, csv_options->cb_arg); |
| 125 | 127 | ||
| 126 | /* call *_init() for sane default values; prevent possible double-free */ | 128 | /* call *_init() for sane default values; prevent possible double-free */ |
| 127 | csv_string_init(csv_string); | 129 | csv_string_init(csv_string); |
| @@ -185,7 +187,7 @@ csv_field_free(csv_field_t *csv_field, const csv_options_t * const csv_options) | |||
| 185 | assert(csv_field != NULL); | 187 | assert(csv_field != NULL); |
| 186 | assert(csv_options != NULL); | 188 | assert(csv_options != NULL); |
| 187 | 189 | ||
| 188 | csv_options->cb_free(csv_field->fields, csv_options->cb_arg); | 190 | csv_options->cb_free(csv_field->fields, csv_field->cap, csv_options->cb_arg); |
| 189 | 191 | ||
| 190 | csv_field_init(csv_field); | 192 | csv_field_init(csv_field); |
| 191 | } | 193 | } |
| @@ -15,7 +15,7 @@ typedef struct { | |||
| 15 | void (*cb_error)(const char *, void *); | 15 | void (*cb_error)(const char *, void *); |
| 16 | void *(*cb_allocate)(size_t, size_t, void *); | 16 | void *(*cb_allocate)(size_t, size_t, void *); |
| 17 | void *(*cb_reallocate)(void *, size_t, size_t, void *); | 17 | void *(*cb_reallocate)(void *, size_t, size_t, void *); |
| 18 | void (*cb_free)(void *, void *); | 18 | void (*cb_free)(void *, size_t sz, void *); |
| 19 | } csv_options_t; | 19 | } csv_options_t; |
| 20 | 20 | ||
| 21 | extern const csv_options_t csv_default_options; | 21 | extern const csv_options_t csv_default_options; |
