summaryrefslogtreecommitdiff
path: root/csv.c
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2020-06-26 09:03:59 +0200
committerThomas Schmucker <ts@its1.de>2020-06-26 09:03:59 +0200
commite0ac05034137f7beaa24f371d4b8bd71584d1a87 (patch)
tree256623392f77a47e5cc21d6600152f7986ba9b66 /csv.c
parentb492bd3942966e7ba32f3b14e5c95bd0c246c1a3 (diff)
downloadlibcsv-e0ac05034137f7beaa24f371d4b8bd71584d1a87.tar.gz
libcsv-e0ac05034137f7beaa24f371d4b8bd71584d1a87.tar.bz2
libcsv-e0ac05034137f7beaa24f371d4b8bd71584d1a87.zip
Vereinfache das Standard-Memory-Handling:
- wir verzichten auf "explicit_bzero()". Wenn ein Client diese Funktion bei "free()" benötigt, kann dieser einen Custum-Allocator installieren. - Vereinfache den Code bei einem Multiplikationsüberlauf ein wenig.
Diffstat (limited to 'csv.c')
-rw-r--r--csv.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/csv.c b/csv.c
index f154c12..a4f9b51 100644
--- a/csv.c
+++ b/csv.c
@@ -25,28 +25,22 @@ csv_mem_allocate(size_t n, size_t sz, void *cb_arg)
25static void * 25static void *
26csv_mem_reallocate(void *ptr, size_t n, size_t sz, void *cb_arg) 26csv_mem_reallocate(void *ptr, size_t n, size_t sz, void *cb_arg)
27{ 27{
28 size_t len;
29
30 (void) cb_arg; 28 (void) cb_arg;
31 29
32 if ( !__builtin_mul_overflow(n, sz, &len) ) { 30 size_t len;
33 return realloc(ptr, len); 31 if ( __builtin_mul_overflow(n, sz, &len) ) {
32 return NULL;
34 } 33 }
35 return NULL; 34 return realloc(ptr, len);
36} 35}
37 36
38static void 37static void
39csv_mem_free(void *ptr, size_t n, size_t sz, void *cb_arg) 38csv_mem_free(void *ptr, size_t n, size_t sz, void *cb_arg)
40{ 39{
41 size_t len; 40 (void) n;
42 41 (void) sz;
43 void explicit_bzero(void *b, size_t len);
44
45 (void) cb_arg; 42 (void) cb_arg;
46 43
47 if ( !__builtin_mul_overflow(n, sz, &len) ) {
48 explicit_bzero(ptr, len);
49 }
50 free(ptr); 44 free(ptr);
51} 45}
52 46