diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index 09dbac8..cf5403e 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -1,12 +1,24 @@ \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 2b9936c..d125c3a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -7,7 +7,6 @@ - diff --git a/Makefile b/Makefile index 200b80d..fef7668 100644 --- a/Makefile +++ b/Makefile @@ -3,10 +3,10 @@ TESTS=$(wildcard tests/*c) $(wildcard tests/**/*.c) OUTDIR=bin CMP=gcc -OPT_ARGS=-O2 -std=c17 +OPT_ARGS=-O2 -flto -std=c17 WARN_ARGS=-Wall -Wno-discarded-qualifiers -all: clear_c clear_bin build_test build_lib +all: clear_c clear_bin build_test_dbg clear_c: clear @@ -43,6 +43,16 @@ build_lib: @echo -e '\n\e[96m-------------[build_lib]--------------\e[0m' $(CMP) $(LIB_ARGS) -o $(OUTDIR)/$(LIB_FILE) +DLL_ARGS=$(OPT_ARGS) $(WARN_ARGS)\ + -shared -fpic -static-libgcc -static-libstdc++\ + $(SRC) tests/test_marshalling.c +DLL_FILE=kerep.dll + +build_dll: + gcc --version + @echo -e '\n\e[96m-------------[build_dll]--------------\e[0m' + $(CMP) $(DLL_ARGS) -o $(OUTDIR)/$(DLL_FILE) + ###################################### ###### Run tasks ####### ###################################### diff --git a/src/DtsodParser/DtsodV24_deserialize.c b/src/DtsodParser/DtsodV24_deserialize.c index 1c1a09c..f8dd4d0 100644 --- a/src/DtsodParser/DtsodV24_deserialize.c +++ b/src/DtsodParser/DtsodV24_deserialize.c @@ -44,7 +44,7 @@ Maybe ERROR_WRONGCHAR(const char c, char* _text, char* text_first, const char* s if(!_c) break; } char errmsg[1024]; - IFWIN( + IFMSC( sprintf_s(errmsg,1024, "unexpected <%c> at:\n" " \"%s\"\n" "\\___[%s:%d] %s()", @@ -85,7 +85,6 @@ Maybe __ReadName(DeserializeSharedData* shared){ case '[': case ']': case '{': safethrow_wrongchar(c,;); - break; case '#': ; char _c=c; char* _text=text; @@ -180,7 +179,6 @@ Maybe __ParseValue(DeserializeSharedData* shared, string str){ else if(string_compare(str,falseStr)) return SUCCESS(UniFalse); else safethrow_wrongchar(*str.ptr,;); - break; // Float64 case 'f': { char* _c=string_extract(str); @@ -192,9 +190,9 @@ Maybe __ParseValue(DeserializeSharedData* shared, string str){ case 'u': { uint64 lu=0; char* _c=string_extract(str); - if(sscanf(_c,"%lu",&lu)!=1){ + if(sscanf(_c, IFWIN("%llu", "%lu"), &lu)!=1){ char err[64]; - IFWIN( + IFMSC( sprintf_s(err,64,"can't parse to int: <%s>",_c), sprintf(err,"can't parse to int: <%s>",_c) ); @@ -208,9 +206,9 @@ Maybe __ParseValue(DeserializeSharedData* shared, string str){ case '5': case '6': case '7': case '8': case '9': { int64 li=0; char* _c=string_extract(str); - if(sscanf(_c,"%li",&li)!=1){ + if(sscanf(_c, IFWIN("%lli", "%li"), &li)!=1){ char err[64]; - IFWIN( + IFMSC( sprintf_s(err,64,"can't parse to int: <%s>",_c), sprintf(err,"can't parse to int: <%s>",_c) ); @@ -245,7 +243,6 @@ Maybe __ReadValue(DeserializeSharedData* shared, bool* readingList){ case '}': case '$': case '\'': safethrow_wrongchar(c,Unitype_free(value)); - break; case '#':; char _c=c; char* _text=text; diff --git a/src/DtsodParser/DtsodV24_serialize.c b/src/DtsodParser/DtsodV24_serialize.c index 4a6181e..4618104 100644 --- a/src/DtsodParser/DtsodV24_serialize.c +++ b/src/DtsodParser/DtsodV24_serialize.c @@ -49,7 +49,6 @@ Maybe __AppendValue(SerializeSharedData* shared, Unitype u){ break; case Null: safethrow("Null isn't supported in DtsodV24",;); - break; case AutoarrUnitypePtr: if(Autoarr_length(((Autoarr_Unitype*)(u.VoidPtr)))){ addc('\n'); @@ -79,7 +78,7 @@ Maybe __AppendValue(SerializeSharedData* shared, Unitype u){ goto hashtableNotBlank; if(__.key); // weird way to disable warning })); - + // blank hashtable addc('{'); @@ -96,7 +95,7 @@ Maybe __AppendValue(SerializeSharedData* shared, Unitype u){ AppendTabs(); addc('}'); break; - default: dbg((u.type)); safethrow(ERR_WRONGTYPE,;); + default: dbg((u.type)); safethrow(ERR_WRONGTYPE,;); } return MaybeNull; @@ -104,11 +103,11 @@ Maybe __AppendValue(SerializeSharedData* shared, Unitype u){ Maybe __serialize(StringBuilder* _b, uint8 _tabs, Hashtable* dtsod){ SerializeSharedData _shared={ - .sh_builder=_b, + .sh_builder=_b, .sh_tabs=_tabs }; SerializeSharedData* shared=&_shared; - + Hashtable_foreach(dtsod, p, ({ AppendTabs(); StringBuilder_append_cptr(b,p.key); diff --git a/src/Hashtable/Hashtable.c b/src/Hashtable/Hashtable.c index 33ec495..ba6b1c9 100644 --- a/src/Hashtable/Hashtable.c +++ b/src/Hashtable/Hashtable.c @@ -37,7 +37,7 @@ void Hashtable_expand(Hashtable* ht){ for(uint16 i=0;ihein-1];i++){ Autoarr(KVPair)* ar=ht->rows[i]; uint32 arlen=Autoarr_length(ar); - for(uint16 k=0;khein]; Autoarr(KVPair)* newar=newrows[newrown]; diff --git a/src/String/StringBuilder.c b/src/String/StringBuilder.c index f6d7f54..848a51d 100644 --- a/src/String/StringBuilder.c +++ b/src/String/StringBuilder.c @@ -2,7 +2,6 @@ define_Autoarr(string) -#define MAXLENGTH 32768 #define BL_C 32 #define BL_L 1024 @@ -136,7 +135,7 @@ void StringBuilder_append_uint64(StringBuilder* b, uint64 a){ void StringBuilder_append_float64(StringBuilder* b, double a){ try_complete_buf(b); char buf[32]; - IFWIN( + IFMSC( sprintf_s(buf,32,"%lf",a), sprintf(buf,"%lf",a) ); diff --git a/src/base/errors.c b/src/base/errors.c index 24ae3ce..f5c317c 100644 --- a/src/base/errors.c +++ b/src/base/errors.c @@ -20,7 +20,7 @@ char* errname(err_t err){ char* __genErrMsg(const char* errmsg, const char* srcfile, int line, const char* funcname){ size_t bufsize=ERRMSG_MAXLENGTH; char* rezult=malloc(bufsize); - IFWIN( + IFMSC( sprintf_s(rezult,bufsize,"[%s:%d] %s() throwed error: %s",srcfile,line,funcname,errmsg), sprintf(rezult,"[%s:%d] %s() throwed error: %s",srcfile,line,funcname,errmsg) ); @@ -30,7 +30,7 @@ char* __genErrMsg(const char* errmsg, const char* srcfile, int line, const char* char* __extendErrMsg(const char* errmsg, const char* srcfile, int line, const char* funcname){ size_t bufsize=cptr_length(errmsg)+ERRMSG_MAXLENGTH; char* rezult=malloc(bufsize); - IFWIN( + IFMSC( sprintf_s(rezult,bufsize,"%s\n \\___[%s:%d] %s()",errmsg,srcfile,line,funcname), sprintf(rezult,"%s\n \\___[%s:%d] %s()",errmsg,srcfile,line,funcname) ); diff --git a/src/base/std.h b/src/base/std.h index 4607014..704016b 100644 --- a/src/base/std.h +++ b/src/base/std.h @@ -40,8 +40,13 @@ extern "C" { #ifdef _MSC_VER #define IFWIN(YES, NO) YES + #define IFMSC(YES, NO) NO +#elif defined(_WIN64) || defined(_WIN32) + #define IFWIN(YES, NO) YES + #define IFMSC(YES, NO) NO #elif defined(__GNUC__) #define IFWIN(YES, NO) NO + #define IFMSC(YES, NO) NO #else #pragma GCC error "unknown compiler" #endif diff --git a/src/base/types.c b/src/base/types.c index 459ffa5..d4c7a59 100644 --- a/src/base/types.c +++ b/src/base/types.c @@ -116,7 +116,7 @@ void Unitype_free(Unitype u){ #define BUFSIZE 64 char* sprintuni(Unitype v){ char* buf=malloc(BUFSIZE); - IFWIN( + IFMSC( switch (v.type) { case Null: sprintf_s(buf, BUFSIZE, "{Null}");break; case Float64: sprintf_s(buf, BUFSIZE, "{%s : %lf}", my_type_name(v.type),v.Float64);break; @@ -131,17 +131,17 @@ char* sprintuni(Unitype v){ default: sprintf_s(buf, BUFSIZE, "{%s : %p}", my_type_name(v.type),v.VoidPtr);break; }, switch (v.type) { - case Null: sprintf(buf, "{Null}");break; - case Float64: sprintf(buf, "{%s : %lf}", my_type_name(v.type),v.Float64);break; + case Null: sprintf(buf, "{Null}"); break; + case Float64: sprintf(buf, "{%s : %lf}", my_type_name(v.type),v.Float64); break; case Bool: - case UInt64: sprintf(buf, "{%s : %lu}", my_type_name(v.type),v.UInt64);break; - case Int64: sprintf(buf, "{%s : %ld}", my_type_name(v.type),v.Int64);break; + case UInt64: sprintf(buf, "{%s : " IFWIN("%llu", "%lu") "}", my_type_name(v.type),v.UInt64); break; + case Int64: sprintf(buf, "{%s : " IFWIN("%lld", "%ld") "}", my_type_name(v.type),v.Int64); break; case CharPtr: ; size_t newBUFSIZE=cptr_length(v.VoidPtr) + BUFSIZE/2; buf=realloc(buf, newBUFSIZE); sprintf(buf, "{%s : \"%s\"}", my_type_name(v.type),(char*)v.VoidPtr); break; - default: sprintf(buf, "{%s : %p}", my_type_name(v.type),v.VoidPtr);break; + default: sprintf(buf, "{%s : %p}", my_type_name(v.type),v.VoidPtr);break; } ); return buf; diff --git a/tests/test_autoarr.c b/tests/test_autoarr.c index 26db9e4..45f85ba 100644 --- a/tests/test_autoarr.c +++ b/tests/test_autoarr.c @@ -20,17 +20,17 @@ static void printautoarr(Autoarr(uint16)* ar){ } static void fillar(Autoarr(uint16)* ar){ - for (uint16 i=0;i