From 1d7beebf6c45fd5e7d72aed9f22722ca664200b7 Mon Sep 17 00:00:00 2001 From: Timerix22 Date: Mon, 18 Apr 2022 13:50:33 +0300 Subject: [PATCH] some fixes --- Autoarr/StringBuilder.c | 1 - DtsodParser/DtsodV24_deserialize.c | 50 ++++++++++++++++++++---------- Makefile | 4 +-- base/types.c | 5 ++- tests/test_dtsod.c | 25 +++++++++++++++ 5 files changed, 62 insertions(+), 23 deletions(-) diff --git a/Autoarr/StringBuilder.c b/Autoarr/StringBuilder.c index 6a12265..f3f62c9 100644 --- a/Autoarr/StringBuilder.c +++ b/Autoarr/StringBuilder.c @@ -53,7 +53,6 @@ void StringBuilder_append_uint64(StringBuilder* b, uint64 a){ a/=10; } string rev=string_reverse((string){buf,i}); - printf("\e[95mrev:%s\n",string_cpToCptr(rev)); StringBuilder_append_string(b,rev); free(rev.ptr); } diff --git a/DtsodParser/DtsodV24_deserialize.c b/DtsodParser/DtsodV24_deserialize.c index 315a4c5..218d7ca 100644 --- a/DtsodParser/DtsodV24_deserialize.c +++ b/DtsodParser/DtsodV24_deserialize.c @@ -9,19 +9,32 @@ // special func for throwing error messages about wrong characters in deserializing text Maybe ERROR_WRONGCHAR(const char c, char* text, char* text_first, const char* srcfile, int line, const char* funcname){ - char errBuf[33]; - errBuf[32]='\0'; - char* errText=text-16; - if(errText at:\n" + sprintf_s(errmsg,512, "unexpected <%c> at:\n" " \"%s\"\n" "\\___[%s:%d] %s()", c,errBuf, srcfile,line,funcname), @@ -83,9 +96,8 @@ Maybe __ReadName(DeserializeSharedData* shared){ nameStr.ptr=text+1; // skips '\n' break; case '}': - if(!calledRecursively) safethrow_wrongchar(c); - if((*++text)!=';') - safethrow_wrongchar(c); + if(!calledRecursively || nameStr.length!=0) safethrow_wrongchar(c); + return SUCCESS(UniPtr(CharPtr,NULL)); case ':': return SUCCESS(UniPtr(CharPtr,string_cpToCptr(nameStr))); case '$': @@ -211,7 +223,7 @@ Maybe __ReadValue(DeserializeSharedData* shared){ string valueStr={text+1,0}; Unitype value; bool spaceAfterVal=false; - + while ((c=*++text)) switch (c){ case ' ': case '\t': case '\r': case '\n': @@ -232,7 +244,7 @@ Maybe __ReadValue(DeserializeSharedData* shared){ valueStr.ptr=text+1; // skips '\n' break; case '"': - if(valueStr.length!=0) safethrow_wrongchar(c); + if(valueStr.length!=0) { printf("length: %u valueStr: %s\n",valueStr.length, string_cpToCptr(valueStr)); safethrow_wrongchar(c);} try(ReadString(),maybeString) value=maybeString.value; break; @@ -240,7 +252,8 @@ Maybe __ReadValue(DeserializeSharedData* shared){ if(valueStr.length!=0) safethrow_wrongchar(c); ++text; // skips '{' try(__deserialize(&text,true), val) - return SUCCESS(val.value); + value=val.value; + break; case '[': if(valueStr.length!=0) safethrow_wrongchar(c); try(ReadList(),maybeList) @@ -283,7 +296,9 @@ Maybe __deserialize(char** _text, bool _calledRecursively) { if(!maybeName.value.VoidPtr) // end of file or '}' in recursive call goto END; char* nameCPtr=maybeName.value.VoidPtr; - try(ReadValue(), val) + printf("name: %s ", nameCPtr); + try(ReadValue(), val){ + printuni(val.value);printf("\n"); if(partOfDollarList){ Autoarr(Unitype)* list; Unitype lu; @@ -297,7 +312,8 @@ Maybe __deserialize(char** _text, bool _calledRecursively) { } Autoarr_add(list,val.value); } - else Hashtable_add(dict,nameCPtr,val.value); + else Hashtable_add(dict,nameCPtr,val.value); + } } END: diff --git a/Makefile b/Makefile index 09bb23b..e9b3fbd 100644 --- a/Makefile +++ b/Makefile @@ -31,12 +31,12 @@ build_test_dbg: clear_c clear_bin test: build_test @echo -e '\n\e[96m----------------[test]-----------------\e[0m' - $(TEST_FILE) + $(OUTDIR)/$(TEST_FILE) valgrind: build_test_dbg @echo -e '\n\e[96m--------------[valgrind]---------------\e[0m' valgrind -s --read-var-info=yes --track-origins=yes --fullpath-after=kerep/ \ - --leak-check=full --show-leak-kinds=all $(TEST_FILE).dbg + --leak-check=full --show-leak-kinds=all $(OUTDIR)/$(TEST_FILE).dbg LIB_FILE=kerep.so LIB_ARGS=$(OPT_ARGS) $(WARN_ARGS)\ diff --git a/base/types.c b/base/types.c index 36504a7..7880d87 100644 --- a/base/types.c +++ b/base/types.c @@ -115,7 +115,7 @@ void Unitype_free(Unitype u){ } } -#define SPRINT_BUFSIZE 64 +#define SPRINT_BUFSIZE 1024 void sprintuni(char* buf,Unitype v){ IFWIN( switch (v.type) { @@ -140,8 +140,7 @@ void sprintuni(char* buf,Unitype v){ } void printuni(Unitype v){ - char* s=malloc(SPRINT_BUFSIZE); + char s[SPRINT_BUFSIZE]; sprintuni(s,v); fputs(s, stdout); - free(s); } \ No newline at end of file diff --git a/tests/test_dtsod.c b/tests/test_dtsod.c index 8f8a205..2b649ab 100644 --- a/tests/test_dtsod.c +++ b/tests/test_dtsod.c @@ -30,6 +30,10 @@ void print_dtsod(Hashtable* dtsod){ })); } + +#include + + void test_dtsod(){ optime(__func__,1,({ printf("\e[96m-------------[test_dtsod]-------------\n"); @@ -59,5 +63,26 @@ void test_dtsod(){ })); free(s); + + FILE* f=fopen("messages.dtsod", "r"); + printf("f: %p\n", f); + if(f==NULL){ + perror("error "); + throw("can't open file"); + } + char fbuf[65535]; + uint32 i=0; + char cc; + while((cc=fgetc(f))!=EOF){ + fbuf[i++]=cc; + } + fbuf[i]='\0'; + printf("read %u chars", i); + Maybe rrr=DtsodV24_deserialize(fbuf); + if(rrr.errmsg) { + throw(rrr.errmsg); + } + else dtsod=rrr.value.VoidPtr; + Hashtable_free(dtsod); })); } \ No newline at end of file