Conversation
* Updated all `\param` and `\retval` Doxygen documentation comments in `cstring.h`, `cstring.vector.h`, and `cstring.core.c` to obey the 76-rule and terminate with a semicolon; * Bumped version to 4.0.15 in `cstring.h`, `Doxyfile`, `CHANGES.md`, and `NEWS.md`; * Updated `Updated:` header banners to 6th September 2026;
Give the 28 in-wave C/C++ projects (and gold **c** / **cxx** / **c_cxx** templates) a sorted **files.associations** union of all associations found under **~/dev**;
Align library version macros to c-cpp-standards. Define MAJOR, MINOR, PATCH, and ALPHABETA; compute PREFIX_VER by shifts; keep REVISION as a skip-section alias of PATCH (target at column 60); retain named historical VER_* constants only for comparison and documentation.
Add or normalise test/scratch/libver to print the hosting PREFIX_VER as “Name: vM.m.p.ab (PREFIX_VER = 0x........)” and, when sibling public headers are included, an “efferent dependencies:” block.
Move test/scratch/libver to test/scratch/versions and retarget the executable as versions so C/C++ reporters match the Phase 3 freeze.
Add a Phase 3 gold version printer under test/scratch/versions, wire it from the scratch parent list, and use CMake target/argv0 versions;
Use Dir=$(cd "$(dirname "$ScriptPath")" && pwd) so paths with spaces resolve reliably; apply the same one-line fix across in-wave helper scripts (prepare/build/clean/ctest/remove and run_all_*).
Add SisClr_* status colour (NO_COLOR, AlwaysUseColours, TTY gate), --build-shared-libs, and a single cmake invoke with CMakeGeneratorArgs so every -D is always passed; tidy prologue groups, quoting, and help text.
Initialise AlwaysUseColours from SIS_CMAKE_ALWAYS_USE_COLOURS / SIS_ALWAYS_USE_COLOURS; let -A/--always-use-colours override NO_COLOR (pre-scan args so help and errors are coloured).
Drop MSYSTEM→MinGW and MakeCmd; honour SIS_CMAKE_MINGW via `sis_cmake_is_truey()`; add sis_cmake_build for -m; configure in-place with -S/-B and || exit 1; tighten --mingw/--msvc-mt/--run-make help.
Replace MakeCmd/Makefile gating with sis_cmake_build; require a configured CMakeCache; add SisClr_* colour and -A to match prepare_cmake.sh.
Replace MakeCmd/Makefile gating with sis_cmake_build clean; require a configured CMakeCache; add SisClr_* colour and -A to match build_cmake.sh.
Add SisClr_* colour and -A; quote inventory loops; recognise Windows_NT; remove artefacts without cd into the build directory.
Replace MakeCmd with sis_cmake_build; require CMakeCache; fail -M when unconfigured; add --output-on-failure, SisClr_* colour, and -A.
Make run_all_unit_tests.sh unit-only; align both category runners with SisClr_*/-A, cmake --build, and gold basename discovery (.exe, print0).
* general boilerplate / project-support improvements (#16) * squash-commit * 4.0.14 * fix * 4.0.15 (#20) * Updated all `\param` and `\retval` Doxygen documentation comments in `cstring.h`, `cstring.vector.h`, and `cstring.core.c` to obey the 76-rule and terminate with a semicolon; * Bumped version to 4.0.15 in `cstring.h`, `Doxyfile`, `CHANGES.md`, and `NEWS.md`; * Updated `Updated:` header banners to 6th September 2026; * markdown * chore(c-cpp): union files.associations from ~/dev vscode settings Give the 28 in-wave C/C++ projects (and gold **c** / **cxx** / **c_cxx** templates) a sorted **files.associations** union of all associations found under **~/dev**; * .gitattributes * .vscode/settings.json * .vimrc * CHANGES.md * chore(<lib>): use computed PREFIX_VER with documented PATCH Align library version macros to c-cpp-standards. Define MAJOR, MINOR, PATCH, and ALPHABETA; compute PREFIX_VER by shifts; keep REVISION as a skip-section alias of PATCH (target at column 60); retain named historical VER_* constants only for comparison and documentation. * test(<lib>): ship scratch libver version reporter Add or normalise test/scratch/libver to print the hosting PREFIX_VER as “Name: vM.m.p.ab (PREFIX_VER = 0x........)” and, when sibling public headers are included, an “efferent dependencies:” block. * test(<lib>): rename scratch libver to versions Move test/scratch/libver to test/scratch/versions and retarget the executable as versions so C/C++ reporters match the Phase 3 freeze. * test: add canonical scratch versions reporter Add a Phase 3 gold version printer under test/scratch/versions, wire it from the scratch parent list, and use CMake target/argv0 versions; * .gitattributes * fix(c-cpp): quote Dir resolution in CMake helper scripts Use Dir=$(cd "$(dirname "$ScriptPath")" && pwd) so paths with spaces resolve reliably; apply the same one-line fix across in-wave helper scripts (prepare/build/clean/ctest/remove and run_all_*). * chore(scratch test): **versions** => **test.scratch.version** * doc(README.md): adding afferent dependencies (**errni**, **rstrip**) * feat(cstring): colour prepare_cmake and unify cmake configure Add SisClr_* status colour (NO_COLOR, AlwaysUseColours, TTY gate), --build-shared-libs, and a single cmake invoke with CMakeGeneratorArgs so every -D is always passed; tidy prologue groups, quoting, and help text. * feat(cstring): force colours via env and -A in prepare_cmake Initialise AlwaysUseColours from SIS_CMAKE_ALWAYS_USE_COLOURS / SIS_ALWAYS_USE_COLOURS; let -A/--always-use-colours override NO_COLOR (pre-scan args so help and errors are coloured). * refactor(cstring): drive prepare builds with cmake --build Drop MSYSTEM→MinGW and MakeCmd; honour SIS_CMAKE_MINGW via `sis_cmake_is_truey()`; add sis_cmake_build for -m; configure in-place with -S/-B and || exit 1; tighten --mingw/--msvc-mt/--run-make help. * refactor(cstring): drive build_cmake via cmake --build Replace MakeCmd/Makefile gating with sis_cmake_build; require a configured CMakeCache; add SisClr_* colour and -A to match prepare_cmake.sh. * refactor(cstring): drive clean_cmake via cmake --build --target clean Replace MakeCmd/Makefile gating with sis_cmake_build clean; require a configured CMakeCache; add SisClr_* colour and -A to match build_cmake.sh. * refactor(cstring): align remove_cmake_artefacts with helper dialect Add SisClr_* colour and -A; quote inventory loops; recognise Windows_NT; remove artefacts without cd into the build directory. * refactor(cstring): drive ctest_cmake via cmake --build then ctest Replace MakeCmd with sis_cmake_build; require CMakeCache; fail -M when unconfigured; add --output-on-failure, SisClr_* colour, and -A. * refactor(cstring): unit/component runners use sis_cmake_build dialect Make run_all_unit_tests.sh unit-only; align both category runners with SisClr_*/-A, cmake --build, and gold basename discovery (.exe, print0). * fix(cstring): accept category-only flags; fix CI component runner Treat --unit-only / --component-only as no-ops on the matching category scripts; point ci-cell component tests at run_all_component_tests.sh. * refactor(cstring): drive run_all_examples via cmake --build dialect Replace MakeCmd with sis_cmake_build; add SisClr_*/-A; discover example* executables with print0/.exe and optional --verbosity. * fix(cstring): gate cstring_vector no-arg demo on SIS_EXAMPLE_SMOKE Fail without input for humans; when SIS_EXAMPLE_SMOKE is set, use an in-process tmpfile sample. run_all_examples exports the variable for CI. * refactor(cstring): drive run_all_scratch via cmake --build dialect Replace MakeCmd with sis_cmake_build; run scratch-only (drop performance); add SisClr_*/-A; discover test_scratch* / test.scratch.* via print0/.exe. * refactor(cstring): native CMD runners for unit, component, examples Add run_all_component_tests.cmd and run_all_examples.cmd; make run_all_unit_tests.cmd unit-only with ProjectName, benign --unit-only, and stop on first failing .exe (no Bash). * feat(cstring): add run_all_automated_tests aggregate (.sh/.cmd) Add unit-then-component aggregators with mutually exclusive --unit-only / --component-only; Bash forwards other flags, CMD CALLs native category runners (no Bash). * refactor(cstring): drive run_all_performance via cmake --build dialect Align with scratch helpers: SisClr_*/-A, sis_cmake_build, and test_performance* / test.performance.* discovery (print0/.exe). * style(cstring): SisClr polish on run_all_automated_tests.sh Add SisClr_*/-A (forwarded), coloured status/mutex messages; keep unit-then-component aggregate behaviour. * ci(cstring): exercise prepare/build/clean helpers in CI Split no-cpp into prepare (no -m) then build_cmake.sh; add install-smoke prepare-clean-build-clean-build on a dedicated SIS_CMAKE_BUILD_DIR tree. * ci(cstring): dogfood native run_all *.cmd on Windows cells Invoke examples/unit/component/scratch via cmd.exe on Windows; keep Bash runners on Unix; add run_all_scratch_tests.cmd; PATH MinGW from msys2. * ci(cstring): dogfood prepare/build in cells; order test jobs - Replace raw cmake configure/build with prepare_cmake.sh and build_cmake.sh; - add performance job/.cmd; - chain unit→component→performance→scratch→examples. * ci(cstring): invoke ctest, remove, and automated helpers Run ctest_cmake.sh after each cell build; extend install-smoke through remove and re-prepare/build; use run_all_automated_tests.sh in no-cpp. * fix(cstring): harden prepare empty-args and multi-config ctest Avoid bash 3.2 nounset failure on empty PREPARE_ARGS in ci-cell, and pass ctest -C from SIS_CMAKE_CONFIG when CMAKE_CONFIGURATION_TYPES is present so Visual Studio cells can run. * ci(cstring): dogfood run_all_automated_tests.cmd on Windows Drive Windows unit and component cell steps through the aggregate .cmd with --unit-only / --component-only so the orchestrator and its CALL targets are exercised without duplicating the suite. * ci(cstring): collapse cell suites into one post-build test job Replace the serial unit/component/performance/scratch/examples jobs with a single Tests job of sequential helper steps so each matrix cell pays one checkout, MinGW setup, and artifact download instead of five. * docs(cstring): target 4.0.16 release for 23 September 2026 Align CHANGES/NEWS to today, bump Doxyfile PROJECT_NUMBER, and refresh cstring.h Updated/edit counters; package CSTRING_VER_* already at 4.0.16. * tidying * Perf tests (#22) * feat(cstring): add competitive performance tests for 4.0.17 Add test.performance.cstring and test.performance.cstring_vector with std::string / vector and hand-rolled baselines; optional p99 percentiles (and file_lines vs cstring_vector_readLines when linked); --no-p99 / NO_P99; --gap-groups / SIS_PERFTESTS_GROUPGAPS; CSTRING_EXTERN_C on the cstring.vector API. * test(cstring): time ifstream getline in the file-lines suite Add an `std::ifstream` + `std::getline` row to `file_read_all_lines`, so `cstring_vector_readLines` has an owning standard-library baseline beside `platformstl::file_lines`. * test(cstring): pair borrowed_fixed_assign with std::string Add the semantic std::string::assign baseline beside the existing borrowed/fixed path; fix borrowed capacity to n+1. * fix(cstring): restore legacy-compatible memory calls in performance tests Define _CRT_SECURE_NO_WARNINGS for MSVC before CRT headers are included; use global ::memcpy and ::memmove names to preserve early C/C++ compatibility; * fix(cstring): use SIS target warning suppression mechanism Register MSVC warning 4996 through X_MSVC_CUSTOM_WARNINGS_TO_BE_SUPPRESSED for each affected performance target; remove broad and direct warning suppression from the top-level build; * fix(cstring): correct vector insertion range handling Move the full tail when inserting before the vector end; construct inserted strings and clean up failures at the insertion position; prevent prepend benchmarks from corrupting vector storage; * fix * squash-commit --------- Co-authored-by: Matt Wilson <matthew@synesis.com.au> * More component tests (#23) * test(cstring): rename component readline/writeline cases descriptively Adopt TEST_<api>_<SCENARIO> names for cstring_readline and cstring_writeline/cstring_write component cases; drop empty writeline stubs; refresh Updated banners and prefer char* argv[] in main. * test(cstring): adopt terse xTests API in component suites Switch readline/writeline component assertions to TEST_ENUM_EQ, TEST_INT_EQ, TEST_MS_EQ, TEST_PASSED, and REQUIRE; mark vector APIs CSTRING_EXTERN_C for C++ linkage; wire test.component.cstring_vector_readLines into the component CMake tree. * test(cstring): expand cstring_readline component coverage Fill empty readline cases for empty file, CRLF/mixed EOL, final EOL, consecutive empties, long and many short lines, and cstring reuse; add binary fixture helpers; correct the vector header File: banner. * test(cstring): add cstring_vector_readLines component suite Add test.component.cstring_vector_readLines covering empty file, EOL variants, empty-at-EOF omission, append-onto-existing, long and many short lines; use the xTests terse API. * ci * test(cstring): finish terse xTests API in readline coverage Convert the remaining verbose XTESTS_* assertions in the expanded cstring_readline cases to REQUIRE, TEST_ENUM_EQ, TEST_INT_EQ, and TEST_MS_EQ. * fix * Flags fixes (#24) * tidy * chore: replacing backwards-compatibility flags uses with the replacements * fix(flags): correcting (currently unused) flag(s) * fix(cstring): drop unused bits from the cstring arena mask Narrow CSTRING_F_ARENA_MASK from 0xff00 to 0x3700, the union of the defined arena selectors, so unused high bits are not treated as an arena. Retire the unsupported/unused custom-arena calling-convention macros, clearing the old stdcall value 0x4000 that sat inside the mask. * squash-commit * version * TODO.md * fix(cstring): gate Windows arenas on `_WIN32` for 4.1.0 Define the Windows arena flags and compile the WinAPI allocators when the compiler predefines `_WIN32`, rather than when `WIN32` or `WIN64` is set; record the 28th September 2026 release in **CHANGES.md**, **NEWS.md**, **Doxyfile**, and **TODO.md**. * fix * fix * tidy * version * refactor(cstring): move Windows arena allocators into win.c (#26) * refactor(cstring): move Windows arena allocators into win.c Move the Win32 Global, process-heap, and COM task reallocators out of **cstring.core.c** into **src/win.c**, declared from **src/internal.h**; - Windows builds compile **win.c**, which does not re-check **CSTRING_USE_WINAPI_**; core still dispatches those arenas; - **dllmain.c** and **mmap.c** are unchanged. * clean * tidy * ci * chore(cstring): stamp 4.0.18 Updated banners Set Updated to 29th September 2026 on the implementation files changed since 4.0.17 (**src/CMakeLists.txt**, **cstring.core.c**, **cstring.vector.c**, **internal.h**, **win.c**); **CHANGES.md**, **NEWS.md**, **Doxyfile**, and `CSTRING_VER` were already at 4.0.18. --------- Co-authored-by: Matt Wilson <152443343+mwsis@users.noreply.github.com>
…#27) * general boilerplate / project-support improvements (#16) * squash-commit * 4.0.14 * fix * 4.0.15 (#20) * Updated all `\param` and `\retval` Doxygen documentation comments in `cstring.h`, `cstring.vector.h`, and `cstring.core.c` to obey the 76-rule and terminate with a semicolon; * Bumped version to 4.0.15 in `cstring.h`, `Doxyfile`, `CHANGES.md`, and `NEWS.md`; * Updated `Updated:` header banners to 6th September 2026; * markdown * chore(c-cpp): union files.associations from ~/dev vscode settings Give the 28 in-wave C/C++ projects (and gold **c** / **cxx** / **c_cxx** templates) a sorted **files.associations** union of all associations found under **~/dev**; * .gitattributes * .vscode/settings.json * .vimrc * CHANGES.md * chore(<lib>): use computed PREFIX_VER with documented PATCH Align library version macros to c-cpp-standards. Define MAJOR, MINOR, PATCH, and ALPHABETA; compute PREFIX_VER by shifts; keep REVISION as a skip-section alias of PATCH (target at column 60); retain named historical VER_* constants only for comparison and documentation. * test(<lib>): ship scratch libver version reporter Add or normalise test/scratch/libver to print the hosting PREFIX_VER as “Name: vM.m.p.ab (PREFIX_VER = 0x........)” and, when sibling public headers are included, an “efferent dependencies:” block. * test(<lib>): rename scratch libver to versions Move test/scratch/libver to test/scratch/versions and retarget the executable as versions so C/C++ reporters match the Phase 3 freeze. * test: add canonical scratch versions reporter Add a Phase 3 gold version printer under test/scratch/versions, wire it from the scratch parent list, and use CMake target/argv0 versions; * .gitattributes * fix(c-cpp): quote Dir resolution in CMake helper scripts Use Dir=$(cd "$(dirname "$ScriptPath")" && pwd) so paths with spaces resolve reliably; apply the same one-line fix across in-wave helper scripts (prepare/build/clean/ctest/remove and run_all_*). * chore(scratch test): **versions** => **test.scratch.version** * doc(README.md): adding afferent dependencies (**errni**, **rstrip**) * feat(cstring): colour prepare_cmake and unify cmake configure Add SisClr_* status colour (NO_COLOR, AlwaysUseColours, TTY gate), --build-shared-libs, and a single cmake invoke with CMakeGeneratorArgs so every -D is always passed; tidy prologue groups, quoting, and help text. * feat(cstring): force colours via env and -A in prepare_cmake Initialise AlwaysUseColours from SIS_CMAKE_ALWAYS_USE_COLOURS / SIS_ALWAYS_USE_COLOURS; let -A/--always-use-colours override NO_COLOR (pre-scan args so help and errors are coloured). * refactor(cstring): drive prepare builds with cmake --build Drop MSYSTEM→MinGW and MakeCmd; honour SIS_CMAKE_MINGW via `sis_cmake_is_truey()`; add sis_cmake_build for -m; configure in-place with -S/-B and || exit 1; tighten --mingw/--msvc-mt/--run-make help. * refactor(cstring): drive build_cmake via cmake --build Replace MakeCmd/Makefile gating with sis_cmake_build; require a configured CMakeCache; add SisClr_* colour and -A to match prepare_cmake.sh. * refactor(cstring): drive clean_cmake via cmake --build --target clean Replace MakeCmd/Makefile gating with sis_cmake_build clean; require a configured CMakeCache; add SisClr_* colour and -A to match build_cmake.sh. * refactor(cstring): align remove_cmake_artefacts with helper dialect Add SisClr_* colour and -A; quote inventory loops; recognise Windows_NT; remove artefacts without cd into the build directory. * refactor(cstring): drive ctest_cmake via cmake --build then ctest Replace MakeCmd with sis_cmake_build; require CMakeCache; fail -M when unconfigured; add --output-on-failure, SisClr_* colour, and -A. * refactor(cstring): unit/component runners use sis_cmake_build dialect Make run_all_unit_tests.sh unit-only; align both category runners with SisClr_*/-A, cmake --build, and gold basename discovery (.exe, print0). * fix(cstring): accept category-only flags; fix CI component runner Treat --unit-only / --component-only as no-ops on the matching category scripts; point ci-cell component tests at run_all_component_tests.sh. * refactor(cstring): drive run_all_examples via cmake --build dialect Replace MakeCmd with sis_cmake_build; add SisClr_*/-A; discover example* executables with print0/.exe and optional --verbosity. * fix(cstring): gate cstring_vector no-arg demo on SIS_EXAMPLE_SMOKE Fail without input for humans; when SIS_EXAMPLE_SMOKE is set, use an in-process tmpfile sample. run_all_examples exports the variable for CI. * refactor(cstring): drive run_all_scratch via cmake --build dialect Replace MakeCmd with sis_cmake_build; run scratch-only (drop performance); add SisClr_*/-A; discover test_scratch* / test.scratch.* via print0/.exe. * refactor(cstring): native CMD runners for unit, component, examples Add run_all_component_tests.cmd and run_all_examples.cmd; make run_all_unit_tests.cmd unit-only with ProjectName, benign --unit-only, and stop on first failing .exe (no Bash). * feat(cstring): add run_all_automated_tests aggregate (.sh/.cmd) Add unit-then-component aggregators with mutually exclusive --unit-only / --component-only; Bash forwards other flags, CMD CALLs native category runners (no Bash). * refactor(cstring): drive run_all_performance via cmake --build dialect Align with scratch helpers: SisClr_*/-A, sis_cmake_build, and test_performance* / test.performance.* discovery (print0/.exe). * style(cstring): SisClr polish on run_all_automated_tests.sh Add SisClr_*/-A (forwarded), coloured status/mutex messages; keep unit-then-component aggregate behaviour. * ci(cstring): exercise prepare/build/clean helpers in CI Split no-cpp into prepare (no -m) then build_cmake.sh; add install-smoke prepare-clean-build-clean-build on a dedicated SIS_CMAKE_BUILD_DIR tree. * ci(cstring): dogfood native run_all *.cmd on Windows cells Invoke examples/unit/component/scratch via cmd.exe on Windows; keep Bash runners on Unix; add run_all_scratch_tests.cmd; PATH MinGW from msys2. * ci(cstring): dogfood prepare/build in cells; order test jobs - Replace raw cmake configure/build with prepare_cmake.sh and build_cmake.sh; - add performance job/.cmd; - chain unit→component→performance→scratch→examples. * ci(cstring): invoke ctest, remove, and automated helpers Run ctest_cmake.sh after each cell build; extend install-smoke through remove and re-prepare/build; use run_all_automated_tests.sh in no-cpp. * fix(cstring): harden prepare empty-args and multi-config ctest Avoid bash 3.2 nounset failure on empty PREPARE_ARGS in ci-cell, and pass ctest -C from SIS_CMAKE_CONFIG when CMAKE_CONFIGURATION_TYPES is present so Visual Studio cells can run. * ci(cstring): dogfood run_all_automated_tests.cmd on Windows Drive Windows unit and component cell steps through the aggregate .cmd with --unit-only / --component-only so the orchestrator and its CALL targets are exercised without duplicating the suite. * ci(cstring): collapse cell suites into one post-build test job Replace the serial unit/component/performance/scratch/examples jobs with a single Tests job of sequential helper steps so each matrix cell pays one checkout, MinGW setup, and artifact download instead of five. * docs(cstring): target 4.0.16 release for 23 September 2026 Align CHANGES/NEWS to today, bump Doxyfile PROJECT_NUMBER, and refresh cstring.h Updated/edit counters; package CSTRING_VER_* already at 4.0.16. * tidying * Perf tests (#22) * feat(cstring): add competitive performance tests for 4.0.17 Add test.performance.cstring and test.performance.cstring_vector with std::string / vector and hand-rolled baselines; optional p99 percentiles (and file_lines vs cstring_vector_readLines when linked); --no-p99 / NO_P99; --gap-groups / SIS_PERFTESTS_GROUPGAPS; CSTRING_EXTERN_C on the cstring.vector API. * test(cstring): time ifstream getline in the file-lines suite Add an `std::ifstream` + `std::getline` row to `file_read_all_lines`, so `cstring_vector_readLines` has an owning standard-library baseline beside `platformstl::file_lines`. * test(cstring): pair borrowed_fixed_assign with std::string Add the semantic std::string::assign baseline beside the existing borrowed/fixed path; fix borrowed capacity to n+1. * fix(cstring): restore legacy-compatible memory calls in performance tests Define _CRT_SECURE_NO_WARNINGS for MSVC before CRT headers are included; use global ::memcpy and ::memmove names to preserve early C/C++ compatibility; * fix(cstring): use SIS target warning suppression mechanism Register MSVC warning 4996 through X_MSVC_CUSTOM_WARNINGS_TO_BE_SUPPRESSED for each affected performance target; remove broad and direct warning suppression from the top-level build; * fix(cstring): correct vector insertion range handling Move the full tail when inserting before the vector end; construct inserted strings and clean up failures at the insertion position; prevent prepend benchmarks from corrupting vector storage; * fix * squash-commit --------- Co-authored-by: Matt Wilson <matthew@synesis.com.au> * More component tests (#23) * test(cstring): rename component readline/writeline cases descriptively Adopt TEST_<api>_<SCENARIO> names for cstring_readline and cstring_writeline/cstring_write component cases; drop empty writeline stubs; refresh Updated banners and prefer char* argv[] in main. * test(cstring): adopt terse xTests API in component suites Switch readline/writeline component assertions to TEST_ENUM_EQ, TEST_INT_EQ, TEST_MS_EQ, TEST_PASSED, and REQUIRE; mark vector APIs CSTRING_EXTERN_C for C++ linkage; wire test.component.cstring_vector_readLines into the component CMake tree. * test(cstring): expand cstring_readline component coverage Fill empty readline cases for empty file, CRLF/mixed EOL, final EOL, consecutive empties, long and many short lines, and cstring reuse; add binary fixture helpers; correct the vector header File: banner. * test(cstring): add cstring_vector_readLines component suite Add test.component.cstring_vector_readLines covering empty file, EOL variants, empty-at-EOF omission, append-onto-existing, long and many short lines; use the xTests terse API. * ci * test(cstring): finish terse xTests API in readline coverage Convert the remaining verbose XTESTS_* assertions in the expanded cstring_readline cases to REQUIRE, TEST_ENUM_EQ, TEST_INT_EQ, and TEST_MS_EQ. * fix * Flags fixes (#24) * tidy * chore: replacing backwards-compatibility flags uses with the replacements * fix(flags): correcting (currently unused) flag(s) * fix(cstring): drop unused bits from the cstring arena mask Narrow CSTRING_F_ARENA_MASK from 0xff00 to 0x3700, the union of the defined arena selectors, so unused high bits are not treated as an arena. Retire the unsupported/unused custom-arena calling-convention macros, clearing the old stdcall value 0x4000 that sat inside the mask. * squash-commit * version * TODO.md * fix(cstring): gate Windows arenas on `_WIN32` for 4.1.0 Define the Windows arena flags and compile the WinAPI allocators when the compiler predefines `_WIN32`, rather than when `WIN32` or `WIN64` is set; record the 28th September 2026 release in **CHANGES.md**, **NEWS.md**, **Doxyfile**, and **TODO.md**. * fix * refactor(cstring): move Windows arena allocators into win.c Move the Win32 Global, process-heap, and COM task reallocators out of **cstring.core.c** into **src/win.c**, declared from **src/internal.h**; - Windows builds compile **win.c**, which does not re-check **CSTRING_USE_WINAPI_**; core still dispatches those arenas; - **dllmain.c** and **mmap.c** are unchanged. * clean * test(cstring): time Windows global, process-heap, and COM task arenas Time the three Win32 arenas beside the realloc baseline: - `cstring_win_global` uses `CSTRING_F_USE_WINDOWS_GLOBAL_MEMORY`; - `cstring_win_processheap` uses `CSTRING_F_USE_WINDOWS_PROCESSHEAP_MEMORY`; - `cstring_win_comtask` uses `CSTRING_F_USE_WINDOWS_COM_TASK_MEMORY`; * refactor(cstring): static-link COM task arena via ole32 Replace LoadLibrary/GetProcAddress of CoTaskMemRealloc with direct CoTaskMemAlloc/Free/Realloc calls in win32_comtask_realloc(); link **ole32** from the Windows core target. --------- Co-authored-by: Matt Wilson <152443343+mwsis@users.noreply.github.com>
Replace per-iteration std::vector arenas with stlsoft::auto_buffer (512 stack elements) so sizes ≤256 avoid a heap alloc in the timed path; rename scenario_borrowed_fixed to scenario_borrowed_fixed_assign to match the measured operation.
…r values calculated consistently
GCC 15 with -Werror flags an inlined stlsoft::auto_buffer destructor as freeing its internal buffer. Suppress -Wfree-nonheap-object on test.performance.cstring; the destructor deallocates external storage only.
test_unit_cstring_1 calls CoTaskMem* and CoGetMalloc. Hold a comstl::com_init for the process, and skip arena size probes when an empty string has a NULL pointer.
* misc * chore(internal): removed `CSTRING_USE_WINAPI_` and now discriminate on `_WIN32` * chore(internal): simplified includes * refactor(cstring): centralise CSTRING_ASSERT in internal.h Define CSTRING_ASSERT once in src/internal.h, with <assert.h>, and drop the copies in cstring.core.c and cstring.vector.c. Vector call sites use that macro in place of CSTRING_VECTOR_ASSERT. dllmain.c includes internal.h. * fix
synesissoftware
approved these changes
Oct 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.