# 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.