# Pre12 Batch 03: POSIX ACL mode helper ## Change - In `src/xattr.c`, `erofs_acl_from_mode` now obtains the owner, group, and other permissions with `acl_posix1e_mode_to_perm`. - The helper tags are `ACL_USER_OBJ`, `ACL_GROUP_OBJ`, and `ACL_OTHER`, matching the adjacent `ae_tag` assignments. - No other function lines, ACL entry ordering, `acl_cnt`, IDs, default ACL handling, fallback behavior, flags, errno behavior, or control flow changed. ## Helper confirmation - The local FreeBSD header `sys/sys/acl.h` declares `acl_posix1e_mode_to_perm(acl_tag_t tag, mode_t mode)` for kernel consumers. - The local FreeBSD implementation in `sys/kern/subr_acl_posix1e.c` maps `ACL_USER_OBJ` from `S_IRWXU`, `ACL_GROUP_OBJ` from `S_IRWXG`, and `ACL_OTHER` from `S_IRWXO`, returning the corresponding POSIX ACL read, write, and execute permission bits. - `src/xattr.c` already includes ``; no include change was needed. ## Exhaustive equivalence A temporary standalone C program reproduced the local FreeBSD helper logic and compared it with the three replaced expressions for every permission mode from `0000` through `0777`: ```text equivalent=1536/1536 modes=512 tags=3 mismatches=0 temporary_cleanup=ok ``` This covers 512 modes for each of the three tags. The temporary source and executable were deleted and are not part of the repository. ## Static validation - The `erofs_acl_from_mode` function is line-for-line unchanged except for the three `ae_perm` expressions. - The source diff changes only those three expressions; this document is the only added file. - `git diff --check` and `git diff --cached --check` completed without errors. - Before commit, both unstaged status and staged status contained only `src/xattr.c` and `docs/pre12-batch-03.md` under `repo-pre-12`. ## Tests not run Per the Batch 03 execution constraints, no project build, QEMU run, smoke test, or feature test was run.