Skip to content

1.11.1-rc10 : Resizeable-buffer - #61

Merged
synesissoftware merged 25 commits into
masterfrom
resizeable_buffer
Oct 19, 2026
Merged

synesissoftware merged 25 commits into
masterfrom
resizeable_buffer

Conversation

@synesissoftware

Copy link
Copy Markdown
Owner

No description provided.

Update NEWS.md, CHANGES.md, and stlsoft.h to reflect the 1.11.1-rc9 release
on 12th October 2026.
Add test.unit.stlsoft.util.resizeable_buffer_helpers covering
stlsoft::resizeable_buffer_resize for auto_buffer, std::vector, and
bool-/void-returning stubs (including failure propagation).
@synesissoftware
synesissoftware requested a review from mwsis October 15, 2026 03:28
@synesissoftware synesissoftware self-assigned this Oct 15, 2026
Add top-level CONCEPTS.md covering classic buffer-and-length OS API
pitfalls, the probe-then-fill gold standard (null buffer + zero capacity),
Resizeable Buffer requirements/models, and the traits rb overload contract;
link from README and resizeable_buffer_helpers.hpp.
Align get_home_directory(rb) and get_environment_variable(rb) with the
probe-then-fill contract (unchanged rb on probe failure;
resizeable_buffer_resize with ENOMEM; env demand includes NUL); add
component suite test.component.unixstl.system.system_traits.
Lock the C4 gold path for get_current_directory, get_full_path_name, and
get_short_path_name resizeable-buffer overloads: empty auto_buffer and
vector callers on unixstl (new paths component suite) and winstl (extended
filesystem_traits component suite).
Make unixstl ensure_dir_end(rb) leave a lone-NUL "" unchanged (n > 1,
matching winstl and the C-string overload). Make winstl remove_dir_end(rb)
shrink size to the post-strip length so a later ensure_dir_end cannot write
past the NUL. Add unixstl unit coverage and strengthen winstl size /
round-trip assertions.
Add examples/by_concept/resizeable_buffer demonstrating probe-then-fill
into auto_buffer and vector via platformstl traits rb overloads, plus a
direct resizeable_buffer_resize use; catalogue in EXAMPLES.md and link
from CONCEPTS.md.
… (C5)

Ensure every resizeable_buffer_resize failure in unixstl/winstl
filesystem_traits reports ENOMEM / ERROR_OUTOFMEMORY, including winstl
ensure_dir_end(rb) and the unixstl full-path cwd scratch grow; add unit
tests with a failing-resize buffer model.
Document the Resizeable Buffer concept at file scope and fully specify
resizeable_buffer_resize (parameters, bool/void resize adaptation,
retval/failure notes, caller OOM duty); cross-link CONCEPTS.md, the
by_concept example, and the helper unit suite.
Add FAQ Q6 linking CONCEPTS.md, resizeable_buffer_helpers, and the
by_concept example; record C1–C5 and docs under CHANGES 1.11.1-rc10;
add a NEWS chronology row for the concept and traits hardening (no release
tag until the version bump).
…t-fail

Match WinSTL by stripping all trailing separators in unixstl
filesystem_traits remove_dir_end (C-string and rb); replace the
non-exception absolutePath failure path in readdir_sequence (broken
\'0' write) with an empty-string soft-fail; extend unit tests and
CHANGES/NEWS.
Allocate get_full_path_name_impl's temporary with room for the trailing
NUL (1 + len, not 1 + (len - 1)) on unixstl and winstl; copy then terminate
so the write is in-bounds (WinSTL quoted paths exercise this branch).
…e (G5)

Invoke rb.resize(newSize) with SFINAE detection of one-argument
bool/ss_bool_t resize so pre-C++11 vector-style resize(size, value=) works
without forming an ambiguous &T::resize; extend the VC6 member-pointer path
with a two-argument void overload; add unit stub.
* chore(documentation markup): changed Doxygen tag `\remarks` => `\note`

* chore(documentation markup): ensuring "NUL character" is the phrasing
* docs(STLSoft): normalise expression-form \pre lines

Strip outer parentheses, trailing semicolons, and <code> wrappers from
expression-form Doxygen \pre comments so each mirrors assert(E); bump
Updated, SIS copyright through 2026, and file *_EDIT on the 14 touched
headers.

* docs(STLSoft): prefer expression-form \pre with nullptr

Convert easy prose preconditions to boolean expressions (!empty(),
nullptr != p); replace remaining \pre NULL with nullptr; bump Updated, SIS
copyright through 2026, and *_EDIT on each touched header.

* docs(STLSoft): finish hard \pre cases where expressible

Convert non-null COM and shim_string truncate preconditions to expressions;
clean remaining null-or-valid COM prose; leave prior-init, unchecked array
index, and exception-gated contracts as prose; bump Updated, SIS copyright,
and *_EDIT on touched headers.

* docs(STLSoft): put zero-length check before null in \pre

Reorder optional-buffer preconditions in console_functions.h to
0 == n || nullptr != s; bump Updated, SIS copyright, and *_EDIT.

* docs(STLSoft): normalise Doxygen \pre to bare nullptr expressions

Standardise \pre comments as bare boolean expressions (no outer
parentheses, no trailing punctuation), prefer nullptr over NULL/prose, put
zero-length checks before null checks for optional buffers, and convert
expressible empty/length contracts to !empty() / n <= size(); bump Updated,
SIS copyright through 2026, and *_EDIT on touched headers.
@mwsis mwsis changed the title Resizeable-buffer 1.11.1-rc10 : Resizeable-buffer Oct 17, 2026
Base automatically changed from dev to master October 18, 2026 09:50
Provide system_traits get_module_directory(hModule, rb) for ANSI and wide,
matching the process-path gold probe-then-fill contract; extend unit
coverage for auto_buffer/vector and document in CHANGES/NEWS.
@mwsis
mwsis marked this pull request as ready for review October 19, 2026 03:12
@mwsis
mwsis requested review from GarthJL1965 and Hazzoz October 19, 2026 03:12
@mwsis
mwsis self-requested a review October 19, 2026 03:12
Early-return from one-arg ensure_dir_end when the C-string length is zero
so GCC -Warray-bounds does not treat the capacity-0 append path as writing
past a tiny empty stack buffer under -Werror; apply the same guard in
unixstl and winstl (A+W). Correct four TEST_INT_GT argument orders in
TEST_get_module_directory to match sibling rb coverage (assert buffer size
exceeds returned length).
Drive empty C-string ensure_dir_end coverage through the sized overload
with an explicit capacity instead of one-arg on `char dirname[] = "\0"`,
which GCC -Warray-bounds / -Wstringop-overflow still treats as an
out-of-bounds capacity-0 append under -Werror even with an empty early-out;
apply the same pattern in unixstl and winstl unit tests.
@synesissoftware
synesissoftware merged commit a9276e1 into master Oct 19, 2026
59 checks passed
@synesissoftware
synesissoftware deleted the resizeable_buffer branch October 19, 2026 20:48
synesissoftware added a commit that referenced this pull request Oct 20, 2026
* 1.11.1-rc10 : docs(stlsoft): add components inventory and mark contract/cover obsolete (#64)

* docs(stlsoft): add components inventory and mark contract/cover obsolete

Add strategy/COMPONENTS-INVENTORY.md, the working ledger for the
STLSoft 1.11.1 components; it is the source for the forthcoming
COMPONENTS.md and README Components tables. It holds:
- B1/B2 tables of components new in 1.11.x and 1.10.x, with era-coloured
  since/enh badges;
- legacy ledgers C (used by other STLSoft components), D (used by other SIS
  projects, including weak-only usage) and E (analysis nominations);
- a full inventory of include/ by file and by sub-project, with abs level,
  status, min lang (compile-floor derived), 7-Signs and Diagnosticism-style
  sub-project versions;
- estimated since-badges for legacy components, derived from header Created
  dates mapped onto the dated CHANGES.md releases;

Mark stlsoft/quality/contract.h and cover.h obsolete at the \file level
(\brief [C, C++; OBSOLETE]) and refresh their Updated: banners.

Refresh Updated:, copyright range and _EDIT counters, and align banner
fields, in meta/typefixer/typefixer.hpp, std/cbase_.hpp and
winstl/window/colour_constants.h.

* docs(readme): add Enhanced column to 1.10 and legacy component tables

Show the latest major/minor-version-change tag per header in the "New in
1.10" and "Notable legacy components" tables, and define the column in the
section introduction.

* 1.11.1-rc10 : Resizeable-buffer (#61)

* chore(stlsoft): update for 1.11.1-rc9 release

Update NEWS.md, CHANGES.md, and stlsoft.h to reflect the 1.11.1-rc9 release
on 12th October 2026.

* test(stlsoft): unit-test resizeable_buffer_resize helper

Add test.unit.stlsoft.util.resizeable_buffer_helpers covering
stlsoft::resizeable_buffer_resize for auto_buffer, std::vector, and
bool-/void-returning stubs (including failure propagation).

* TODO.md

* docs(stlsoft): capture Resizeable Buffer concept in CONCEPTS.md

Add top-level CONCEPTS.md covering classic buffer-and-length OS API
pitfalls, the probe-then-fill gold standard (null buffer + zero capacity),
Resizeable Buffer requirements/models, and the traits rb overload contract;
link from README and resizeable_buffer_helpers.hpp.

* fix(unixstl): harden home/env resizeable-buffer overloads and cover them

Align get_home_directory(rb) and get_environment_variable(rb) with the
probe-then-fill contract (unchanged rb on probe failure;
resizeable_buffer_resize with ENOMEM; env demand includes NUL); add
component suite test.component.unixstl.system.system_traits.

* test(stlsoft): cover filesystem_traits path rb overloads

Lock the C4 gold path for get_current_directory, get_full_path_name, and
get_short_path_name resizeable-buffer overloads: empty auto_buffer and
vector callers on unixstl (new paths component suite) and winstl (extended
filesystem_traits component suite).

* fix(stlsoft): align filesystem_traits ensure/remove_dir_end rb (C2/C3)

Make unixstl ensure_dir_end(rb) leave a lone-NUL "" unchanged (n > 1,
matching winstl and the C-string overload). Make winstl remove_dir_end(rb)
shrink size to the post-strip length so a later ensure_dir_end cannot write
past the NUL. Add unixstl unit coverage and strengthen winstl size /
round-trip assertions.

* docs(stlsoft): add Resizeable Buffer concept example

Add examples/by_concept/resizeable_buffer demonstrating probe-then-fill
into auto_buffer and vector via platformstl traits rb overloads, plus a
direct resizeable_buffer_resize use; catalogue in EXAMPLES.md and link
from CONCEPTS.md.

* tidy

* fix(stlsoft): set OOM last-error on filesystem_traits resize failures (C5)

Ensure every resizeable_buffer_resize failure in unixstl/winstl
filesystem_traits reports ENOMEM / ERROR_OUTOFMEMORY, including winstl
ensure_dir_end(rb) and the unixstl full-path cwd scratch grow; add unit
tests with a failing-resize buffer model.

* docs(stlsoft): enrich resizeable_buffer_helpers Doxygen (D2)

Document the Resizeable Buffer concept at file scope and fully specify
resizeable_buffer_resize (parameters, bool/void resize adaptation,
retval/failure notes, caller OOM duty); cross-link CONCEPTS.md, the
by_concept example, and the helper unit suite.

* docs(stlsoft): call out Resizeable Buffer in FAQ, CHANGES, NEWS

Add FAQ Q6 linking CONCEPTS.md, resizeable_buffer_helpers, and the
by_concept example; record C1–C5 and docs under CHANGES 1.11.1-rc10;
add a NEWS chronology row for the concept and traits hardening (no release
tag until the version bump).

* fix(stlsoft): align unixstl remove_dir_end strip-all; fix readdir soft-fail

Match WinSTL by stripping all trailing separators in unixstl
filesystem_traits remove_dir_end (C-string and rb); replace the
non-exception absolutePath failure path in readdir_sequence (broken
\'0' write) with an empty-string soft-fail; extend unit tests and
CHANGES/NEWS.

* fix(stlsoft): size full-path scratch to 1+len (G6 OOB)

Allocate get_full_path_name_impl's temporary with room for the trailing
NUL (1 + len, not 1 + (len - 1)) on unixstl and winstl; copy then terminate
so the write is in-bounds (WinSTL quoted paths exercise this branch).

* fix(stlsoft): support defaulted-arg resize in resizeable_buffer_resize (G5)

Invoke rb.resize(newSize) with SFINAE detection of one-argument
bool/ss_bool_t resize so pre-C++11 vector-style resize(size, value=) works
without forming an ambiguous &T::resize; extend the VC6 member-pointer path
with a two-argument void overload; add unit stub.

* date

* Documentation, commenting, canonicalisation (#57)

* chore(documentation markup): changed Doxygen tag `\remarks` => `\note`

* chore(documentation markup): ensuring "NUL character" is the phrasing

* Preconditions (#56)

* docs(STLSoft): normalise expression-form \pre lines

Strip outer parentheses, trailing semicolons, and <code> wrappers from
expression-form Doxygen \pre comments so each mirrors assert(E); bump
Updated, SIS copyright through 2026, and file *_EDIT on the 14 touched
headers.

* docs(STLSoft): prefer expression-form \pre with nullptr

Convert easy prose preconditions to boolean expressions (!empty(),
nullptr != p); replace remaining \pre NULL with nullptr; bump Updated, SIS
copyright through 2026, and *_EDIT on each touched header.

* docs(STLSoft): finish hard \pre cases where expressible

Convert non-null COM and shim_string truncate preconditions to expressions;
clean remaining null-or-valid COM prose; leave prior-init, unchecked array
index, and exception-gated contracts as prose; bump Updated, SIS copyright,
and *_EDIT on touched headers.

* docs(STLSoft): put zero-length check before null in \pre

Reorder optional-buffer preconditions in console_functions.h to
0 == n || nullptr != s; bump Updated, SIS copyright, and *_EDIT.

* docs(STLSoft): normalise Doxygen \pre to bare nullptr expressions

Standardise \pre comments as bare boolean expressions (no outer
parentheses, no trailing punctuation), prefer nullptr over NULL/prose, put
zero-length checks before null checks for optional buffers, and convert
expressible empty/length contracts to !empty() / n <= size(); bump Updated,
SIS copyright through 2026, and *_EDIT on touched headers.

* merge fix: removing vestigial duplicate

* feat(winstl): add get_module_directory resizeable-buffer overload (G2)

Provide system_traits get_module_directory(hModule, rb) for ANSI and wide,
matching the process-path gold probe-then-fill contract; extend unit
coverage for auto_buffer/vector and document in CHANGES/NEWS.

* TODO.md

* fix(stlsoft): silence ensure_dir_end GCC bounds; fix module-dir GT args

Early-return from one-arg ensure_dir_end when the C-string length is zero
so GCC -Warray-bounds does not treat the capacity-0 append path as writing
past a tiny empty stack buffer under -Werror; apply the same guard in
unixstl and winstl (A+W). Correct four TEST_INT_GT argument orders in
TEST_get_module_directory to match sibling rb coverage (assert buffer size
exceeds returned length).

* test(stlsoft): avoid tiny-stack empty ensure_dir_end under GCC -Werror

Drive empty C-string ensure_dir_end coverage through the sized overload
with an explicit capacity instead of one-arg on `char dirname[] = "\0"`,
which GCC -Warray-bounds / -Wstringop-overflow still treats as an
out-of-bounds capacity-0 append under -Werror even with an empty early-out;
apply the same pattern in unixstl and winstl unit tests.

* Versions (#63)

* test(stlsoft): add scratch versions.format using std::format

Add test.scratch.versions.format alongside versions.stdio and
versions.iostreams, printing each library's dotted version and packed VER
via std::format. Gated by a CMake <format> probe and by __cpp_lib_format in
the source, so it is skipped on toolchains without std::format.

* chore(stlsoft): prepare 1.11.1-rc10

Bump _STLSOFT_VER to 1.11.1-rc10 (_STLSOFT_VER_1_11_1_RC10) and align
test.unit.versions, Doxyfile, and INSTALL.md. Record the new
test.scratch.versions.format program in CHANGES.md and NEWS.md.

* ci(stlsoft): dogfood .cmd runners and adopt install-sis-deps (#66)

* ci(stlsoft): dogfood .cmd runners and adopt install-sis-deps

Split run steps into Bash and native cmd.exe variants, and replace the
inline xTests install with the install-sis-deps composite action,
bootstrapping STLSoft from the workspace tree. Define _*STL_VER_RELSTATUS
in all eleven subproject headers, aliasing _*STL_VER_ALPHABETA to it. Keep
project-specific examples and performance runners.

* fix

* fix(stlsoft): define _STLSOFT_VER_RELSTATUS for composite VER

A partial ALPHABETA→RELSTATUS migration left the composite shifting an
undefined _STLSOFT_VER_RELSTATUS (0 in #if), so _STLSOFT_VER collapsed to
0x010B0100 and failed unixstl/winstl/xTests rc9 gates in CI bootstrap.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants