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