diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | build.bat | 79 | ||||
-rw-r--r-- | src/un_strings.c | 4 |
3 files changed, 49 insertions, 35 deletions
@@ -2,3 +2,4 @@ bin/ obj/ lib/ include/ +log/ @@ -1,29 +1,5 @@ @echo off -:: /GS - is sequrity check for buffer overruns. -:: /Oi - generate intrinsic functions (aka inline intrinsic). -:: /O1 /O2 - minimize size, minimize speed. -:: /Ox - subset of /O2, doesnt include. - -:: /GL - whole program optimizations. -:: /LTCG - link time codegen. it is linker option. -:: /cgthreads1 8 - how much thread cl.exe can use. - -:: /F {0} - sets stack size. - -:: outputs -:: /Fa{path} - asm file path. -:: /Fd{path} - pdb file path. -:: /Fe{path} - exe file path. -:: /Fo{path} - obj file path. - -:: /MT - defines _MT. uses LIBCMT.lib to resolve runtime symbols. -:: /MTd - defines _MT _DEBUG, uses LIBCMT.lib. -:: /MD - defines _MT _DLL. uses MSVCRT.lib. -:: /MDd - defines _MT _DLL _DEBUG. uses MSVCRT.lib. -:: /LD - implies /MT unless specified /MD. -:: /LDd - ... - setlocal setlocal enabledelayedexpansion @@ -35,32 +11,54 @@ set "src_dir=src\" set "obj_dir=obj\" set "inc_dir=include\" set "lib_dir=lib\" +set "log_dir=log\" set "warn=/wd4244 /wd5105 /wd4127" set "cdefines=/D _CRT_SECURE_NO_WARNINGS /D _WINSOCK_DEPRECATED_NO_WARNINGS /D _UNICODE /D UNICODE" set "cflags=/nologo /std:c11 /utf-8 /W4 /WX- /diagnostics:column /TC /Zi /fp:fast" +set "link_conf=/INCREMENTAL:NO" + :: :: ------------ :: +if "%1"=="Release" ( goto release ) +if "%1"=="release" ( goto release ) +if "%1"=="rel" ( goto release ) + +if "%1"=="Sanitize" ( goto sanitize ) +if "%1"=="asan" ( goto sanitize ) +if "%1"=="san" ( goto sanitize ) + +goto debug + +:sanitize +set "flag=/D DEBUG /MTd /fsanitize=address /Od /Gs /MP" +goto build + +:release +set "flag=/D NDEBUG /MT /Ox /GS- /MP /cgthreads8 /GL" +goto build + +:debug set "flag=/D DEBUG /MTd /Od /GS /MP" -set "_flag=/D NDEBUG /MT /Ox /GS- /MP /cgthreads8 /GL" +goto build -:: -:: ------------ -:: +:build if exist %bin_dir% ( rmdir /s /q %bin_dir% ) if exist %obj_dir% ( rmdir /s /q %obj_dir% ) if exist %inc_dir% ( rmdir /s /q %inc_dir% ) if exist %lib_dir% ( rmdir /s /q %lib_dir% ) +if exist %log_dir% ( rmdir /s /q %log_dir% ) if not exist %bin_dir% ( mkdir %bin_dir% ) if not exist %obj_dir% ( mkdir %obj_dir% ) if not exist %inc_dir% ( mkdir %inc_dir% ) if not exist %lib_dir% ( mkdir %lib_dir% ) +if not exist %log_dir% ( mkdir %log_dir% ) %cc% %cflags% %warn% %flag% /c %src_dir%ungrateful.c /Fo%obj_dir%ungrateful.obj /Fd%obj_dir%ungrateful.pdb %cdefines% %cc% %cflags% %warn% %flag% /I %src_dir% /c %src_dir%cynic.c /Fo%obj_dir%cynic.obj /Fd%obj_dir%cynic.pdb %cdefines% @@ -76,19 +74,32 @@ for %%f in ("%src_dir%*.h") do ( echo: -set "link_param=/link %lib_dir%ungrateful.lib" +set "link_param=/link %link_conf% %lib_dir%ungrateful.lib" for %%f in ("tests\un\*.c") do ( - %cc% %cflags% %warn% %flag% %cdefines% %%f /I%inc_dir% /Fo%obj_dir% /Fd%bin_dir% /Fe%bin_dir% %link_param% + start "Compile %%f" /B %cc% %cflags% %warn% %flag% %cdefines% %%f /I%inc_dir% /Fo%obj_dir%%%~nf.obj /Fd%bin_dir%%%~nf.pdb /Fe%bin_dir%%%~nf.exe %link_param% > %log_dir%\log_%%~nxf.txt 2>&1 ) -set "link_param=/link %lib_dir%ungrateful.lib %lib_dir%cynic.lib" +set "link_param=/link %link_conf% %lib_dir%ungrateful.lib %lib_dir%cynic.lib" for %%f in ("tests\cyn\*.c") do ( - %cc% %cflags% %warn% %flag% %cdefines% %%f /I%inc_dir% /Fo%obj_dir% /Fd%bin_dir% /Fe%bin_dir% %link_param% + start "Compile %%f" /B %cc% %cflags% %warn% %flag% %cdefines% %%f /I%inc_dir% /Fo%obj_dir%%%~nf.obj /Fd%bin_dir%%%~nf.pdb /Fe%bin_dir%%%~nf.exe %link_param% > %log_dir%\log_%%~nxf.txt 2>&1 ) -set "link_param=/link %lib_dir%ungrateful.lib %lib_dir%cynic.lib %lib_dir%disgrace.lib" +set "link_param=/link %link_conf% %lib_dir%ungrateful.lib %lib_dir%cynic.lib %lib_dir%disgrace.lib" for %%f in ("tests\d\*.c") do ( - %cc% %cflags% %warn% %flag% %cdefines% %%f /I%inc_dir% /Fo%obj_dir% /Fd%bin_dir% /Fe%bin_dir% %link_param% + start "Compile %%f" /B %cc% %cflags% %warn% %flag% %cdefines% %%f /I%inc_dir% /Fo%obj_dir%%%~nf.obj /Fd%bin_dir%%%~nf.pdb /Fe%bin_dir%%%~nf.exe %link_param% > %log_dir%\log_%%~nxf.txt 2>&1 +) + +:wait +tasklist | find "%cc%.exe" > nul +if %errorlevel% == 0 ( + timeout /t 0 > nul + goto wait +) + +echo Logs: + +for %%f in ("%log_dir%*.txt") do ( + type %%f ) echo: diff --git a/src/un_strings.c b/src/un_strings.c index cf4fee8..0dfb493 100644 --- a/src/un_strings.c +++ b/src/un_strings.c @@ -42,7 +42,7 @@ s32 un_string_compare(String left, String right) { if (left.size == 0) return -1; if (right.size == 0) return 1; - result = memcmp(left.data, right.data, left.size); + result = memcmp(left.data, right.data, UN_MIN(right.size, left.size)); if (result == 0) { if (left.size > right.size) return 1; @@ -146,6 +146,8 @@ List un_string_split(String input, String pattern, Allocator alloc) { } if (start != input.size - pattern.size) { + if (start >= input.size) return splits; + if (memcmp(input.data + start, pattern.data, pattern.size) == 0) { return splits; } |