Split the README reference material into docs/
The README was 794 lines: the summary, the design rationale, the whole macro reference, the threading contract, the build internals and the exit-status specification in one file. It is now 178 lines -- summary, installation, quickstart, and an index -- and the reference material lives in docs/, one file per topic: architecture, usage, status-codes, uncaught-errors, exit-status, thread-safety, building. The prose moved as written. Inbound references followed it: UPGRADING.md, TODO.md, include/akerror.tmpl.h and tests/err_threads_handoff.c now name the docs/ file that owns the text they cite, and AGENTS.md says where new documentation goes so the README does not grow back. Five factual errors fixed in the moved text: - Both NULL-pointer examples inverted their test. FAIL_ZERO_* fails when the expression is zero, so `(somePointer == NULL)` failed on a *valid* pointer. They now read `(somePointer != NULL)`. - AKERROR_NOIGNORE, four times including the #define, is AKERR_NOIGNORE. - FINISH_NORExbTURN is FINISH_NORETURN. - "functiions" is "functions". - The architecture link pointed at include/akerror.h, which is generated and not in the tree; it points at include/akerror.tmpl.h. The quickstart is new text. It compiles under -Wall -Wextra -Werror and was run through all three of its paths: handled usage error exits 0, unhandled IO error prints a trace and exits with the status, success exits 0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
18
TODO.md
18
TODO.md
@@ -60,7 +60,7 @@ overwrites that buffer in place, so a thread reading the name at that moment can
|
||||
see a torn string. Every other registry operation is serialized; this one cannot
|
||||
be, because the reader is outside the lock by the time it reads the characters.
|
||||
|
||||
Documented in README.md and UPGRADING.md as "register names during
|
||||
Documented in docs/thread-safety.md and UPGRADING.md as "register names during
|
||||
initialization". Closing it properly means making a registered name immutable —
|
||||
either refusing a rename outright (a behavior change, and
|
||||
`tests/err_name_ownership.c` asserts the current contract), or copying names
|
||||
@@ -114,11 +114,12 @@ behind a flag rather than in the default target or in CI.
|
||||
|
||||
## 9. No way to keep an error context and report it at the same time
|
||||
|
||||
A context can be handed to another thread and released there -- `README.md` now
|
||||
documents that pattern and `tests/err_threads_handoff.c` proves it -- but it is a
|
||||
*move*. A thread that wants to both keep its error and report it upward has to
|
||||
read the fields out into its own record, and it loses the stack trace doing so,
|
||||
because `stacktracebuf` is the one thing that cannot be usefully summarized.
|
||||
A context can be handed to another thread and released there --
|
||||
`docs/thread-safety.md` now documents that pattern and
|
||||
`tests/err_threads_handoff.c` proves it -- but it is a *move*. A thread that
|
||||
wants to both keep its error and report it upward has to read the fields out
|
||||
into its own record, and it loses the stack trace doing so, because
|
||||
`stacktracebuf` is the one thing that cannot be usefully summarized.
|
||||
|
||||
Copying the struct is not a workaround. `stacktracebufptr` is self-referential
|
||||
(`include/akerror.tmpl.h`), so `akerr_ErrorContext c = *src;` leaves the copy's
|
||||
@@ -153,7 +154,8 @@ point -- `libakstdlib`'s planned `pthread_*` wrappers are the likely first.
|
||||
|
||||
- The `AKERR_USE_STDLIB=OFF` build does not compile at all: `bool`, `PATH_MAX`
|
||||
and `NULL` are used unconditionally but only included under the stdlib branch.
|
||||
The README's dependency list states what a replacement must provide, but the
|
||||
header still needs its includes untangled for that configuration to work.
|
||||
`docs/building.md`'s dependency list states what a replacement must provide,
|
||||
but the header still needs its includes untangled for that configuration to
|
||||
work.
|
||||
- `CMakeLists.txt` sets `main_lib_dest` from `MY_LIBRARY_VERSION`, which is never
|
||||
defined and never read. Dead line.
|
||||
|
||||
Reference in New Issue
Block a user