# Pre13 H03a: bounded qstr comparator carrier

## Scope

- Added a private `struct erofs_qstr` to `src/namei.c` with explicit `name`
  and `end` pointers.
- Converted `erofs_dirnamecmp()` to consume bounded qstr objects.
- Kept the existing search helpers on their original pointer/length interface
  through a temporary local adapter.  Block search, VOP lookup, vnode locking,
  namecache timing, errno handling, readdir, and cookies are unchanged.

## Static equivalence

- Search and disk lengths are still derived from the same pointer ranges.
- `matched` is clamped to both ranges before comparison.
- Comparison remains unsigned byte ordering, supports non-NUL search keys and
  embedded NUL bytes, and never assumes a trailing NUL at the disk boundary.
- The adapter performs no allocation, copying, normalization, or error mapping.

## Comparator gate

Tests baseline: `ce03c283e6e2cb8f1b69c8eff21f7d06098a4fbe`.

- Python deterministic corpus: PASS, 11,562 cases.
- Independent C harness: PASS, 1,048,576 cases.

These host comparator results prove the old and new comparison contracts are
equivalent for the generated corpus.  They are not dynamic filesystem feature
test results.  H03 still requires TC042, TC043, TC044, TC045, TC053, TC054,
TC123, TC141, and TC148, followed by the final smoke test.
