# Pre13 H03b: qstr block and dirent search ## Scope - Converted `find_target_dirent()` and `erofs_find_target_block()` to accept a bounded `struct erofs_qstr` search key. - Constructed bounded on-disk qstr objects from the same validated dirent name offsets and block end pointers used before this change. - Constructed a temporary search qstr inside `erofs_namei()` while retaining its original pointer/length external interface for H03c. - Removed the H03a legacy comparator adapter. No changes were made to `dir.c`, readdir, cookies, buffer ownership, directory validation, binary-search decisions, errno selection, cleanup, VOP lookup, vnode locking, or namecache operations. ## Static evidence - `erofs_dirnamecmp()` has exactly two call sites: the block-level first-name comparison and the candidate block's dirent comparison. - Both on-disk qstr end pointers use the same next `nameoff` or validated block boundary as the previous pointer arguments. - `erofs_find_target_block()` retains every `erofs_brelse()` path, candidate replacement, `EINTEGRITY` assignment, and `ENOENT` distinction. - `erofs_namei()` still releases the selected block once and returns `ENOENT` only for a true miss. - The `erofs_lookup()` control flow and all `cache_enter()`, `vn_vget_ino()`, `erofs_vget()`, and `cn_lkflags` uses are outside this stage's diff. ## 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. H03 still requires TC042, TC043, TC044, TC045, TC053, TC054, TC123, TC141, and TC148, followed by the final smoke test.