# Pre13 H03c: qstr VOP lookup adapter

## Scope

- Changed the private `erofs_namei()` interface to accept the bounded qstr
  carrier directly.
- Moved search qstr construction to the `erofs_lookup()` FreeBSD VOP adapter,
  using exactly `cn_nameptr` and `cn_namelen` after the existing length checks.
- Removed the temporary qstr construction from `erofs_namei()`.

No changes were made to `componentname` validation, mutation rejection, `.` or
`..` handling, vnode lock mode, `vn_vget_ino()`, `erofs_vget()`, namecache
timing, errno mapping, readdir, directory cookies, or directory UIO handling.

## Static evidence

- The qstr search range is `[cn_nameptr, cn_nameptr + cn_namelen)` and does not
  require or inspect a trailing NUL.
- The only `erofs_namei()` caller remains `erofs_lookup()`.
- A true `ENOENT` remains the only result eligible for negative `cache_enter()`;
  `EINTEGRITY` and all other errors still return directly.
- `ISDOTDOT` still selects `vn_vget_ino()` with the original `cn_lkflags`;
  ordinary hits still select `erofs_vget()` with the same lock flags.
- The H03c diff does not modify any `cache_enter()`, vnode lookup, lock, cookie,
  readdir, or UIO statement.

## Comparator gate

Tests baseline: `ce03c283e6e2cb8f1b69c8eff21f7d06098a4fbe`.

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

The comparator gates are host static-equivalence evidence, not dynamic feature
tests.  Dynamic H03 validation remains pending for TC042, TC043, TC044, TC045,
TC053, TC054, TC123, TC141, and TC148, followed by the final smoke test.
