From 3c1d92d79a689c8418c37b4c07ed1df021cbb8da Mon Sep 17 00:00:00 2001 From: Timerix22 Date: Wed, 9 Mar 2022 18:47:13 +0300 Subject: [PATCH] test_dtsod() improved and memory leaks fixed --- DtsodC/Autoarr/StringBuilder.c | 2 + DtsodC/DtsodParser/DtsodV24_deserialize.c | 6 ++- DtsodC/DtsodParser/DtsodV24_serialize.c | 4 +- DtsodC/Hashtable/Hashtable.c | 4 +- DtsodC/Hashtable/Hashtable.h | 2 +- DtsodC/base/mystr.c | 10 ++--- DtsodC/base/mystr.h | 6 +-- DtsodC/tests/test_dtsod.c | 55 ++++++++++++++--------- 8 files changed, 56 insertions(+), 33 deletions(-) diff --git a/DtsodC/Autoarr/StringBuilder.c b/DtsodC/Autoarr/StringBuilder.c index 030fdb4..1eb729e 100644 --- a/DtsodC/Autoarr/StringBuilder.c +++ b/DtsodC/Autoarr/StringBuilder.c @@ -37,6 +37,7 @@ void StringBuilder_append_int64(StringBuilder* b, int64 a){ } string rev=string_reverse((string){buf,i}); StringBuilder_append_string(b,rev); + free(rev.ptr); } void StringBuilder_append_uint64(StringBuilder* b, uint64 a){ @@ -51,6 +52,7 @@ void StringBuilder_append_uint64(StringBuilder* b, uint64 a){ } string rev=string_reverse((string){buf,i}); StringBuilder_append_string(b,rev); + free(rev.ptr); } void StringBuilder_append_double(StringBuilder* b, double a){ diff --git a/DtsodC/DtsodParser/DtsodV24_deserialize.c b/DtsodC/DtsodParser/DtsodV24_deserialize.c index 7b84122..3a6f109 100644 --- a/DtsodC/DtsodParser/DtsodV24_deserialize.c +++ b/DtsodC/DtsodParser/DtsodV24_deserialize.c @@ -86,7 +86,11 @@ Hashtable* __deserialize(char** _text, bool calledRecursively){ Autoarr_remove(b); StringBuilder_append_char(b,c); } - else return StringBuilder_build(b); + else { + char* str=StringBuilder_build(b); + Autoarr_clear(b); + return str; + } } else { prevIsBackslash= c=='\\' && !prevIsBackslash; diff --git a/DtsodC/DtsodParser/DtsodV24_serialize.c b/DtsodC/DtsodParser/DtsodV24_serialize.c index 759d941..eb71929 100644 --- a/DtsodC/DtsodParser/DtsodV24_serialize.c +++ b/DtsodC/DtsodParser/DtsodV24_serialize.c @@ -84,5 +84,7 @@ void __serialize(StringBuilder* b, uint8 tabs, Hashtable* dtsod){ char* DtsodV24_serialize(Hashtable* dtsod){ StringBuilder b=StringBuilder_create(STRB_BC,STRB_BL); __serialize(&b,0,dtsod); - return StringBuilder_build(&b); + char* str=StringBuilder_build(&b); + Autoarr_clear((&b)); + return str; } diff --git a/DtsodC/Hashtable/Hashtable.c b/DtsodC/Hashtable/Hashtable.c index ac391bb..393d0e8 100644 --- a/DtsodC/Hashtable/Hashtable.c +++ b/DtsodC/Hashtable/Hashtable.c @@ -70,7 +70,7 @@ Unitype* Hashtable_getptr(Hashtable* ht, char* key){ uint32 arlen=Autoarr_length(ar); for(uint32 i=0;ikey)) return &p->value; + if(cptr_compare(key,p->key)) return &p->value; } return NULL; } @@ -80,7 +80,7 @@ Unitype Hashtable_get(Hashtable* ht, char* key){ uint32 arlen=Autoarr_length(ar); for(uint32 i=0;i0) dst[len]=src[len]; @@ -17,7 +17,7 @@ char* charbuf_copy(char* src){ } //compares two char buffers, NullPtr-friendly -bool charbuf_compare(char* key0, char* key1){ +bool cptr_compare(char* key0, char* key1){ if(!key0) return key1 ? false : true; if(!key1) return false; while(*key0&&*key1) @@ -49,7 +49,7 @@ char* string_cpToCharPtr(string str){ string string_cpFromCharPtr(char* cptr){ if(!cptr) return stringNull; string str; - str.length=mystrlen(cptr)-1; + str.length=cptr_length(cptr)-1; str.ptr=malloc(str.length); for(uint32 i=0;i