[readme] add file structure
This commit is contained in:
parent
31e7309951
commit
1c39007f6b
35
README.md
35
README.md
@ -91,8 +91,8 @@ The following operations need to be fast, in order of importance:
|
|||||||
|
|
||||||
1. lookup gid -> group (this is on hot path in id).
|
1. lookup gid -> group (this is on hot path in id).
|
||||||
2. lookup uid -> user.
|
2. lookup uid -> user.
|
||||||
3. lookup username -> user.
|
3. lookup groupname -> group.
|
||||||
4. lookup groupname -> group.
|
4. lookup username -> user.
|
||||||
5. (optional) iterate users using a defined order (`getent passwd`).
|
5. (optional) iterate users using a defined order (`getent passwd`).
|
||||||
6. (optional) iterate groups using a defined order (`getent group`).
|
6. (optional) iterate groups using a defined order (`getent group`).
|
||||||
|
|
||||||
@ -107,5 +107,36 @@ BDZ: tried b=3, b=7 (default), and b=10.
|
|||||||
CHM retains order, however, 1M keys weigh 8MB. 10k keys are ~20x larger with
|
CHM retains order, however, 1M keys weigh 8MB. 10k keys are ~20x larger with
|
||||||
CHM than with BDZ, eliminating the benefit of preserved ordering.
|
CHM than with BDZ, eliminating the benefit of preserved ordering.
|
||||||
|
|
||||||
|
Full file structure
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
The file structure stars with the metadata field. All indexes are number of
|
||||||
|
bytes, relative to the beginning of the file.
|
||||||
|
|
||||||
|
```
|
||||||
|
const Offsets = struct {
|
||||||
|
magic: [4]u32,
|
||||||
|
version: u32,
|
||||||
|
|
||||||
|
num_users, size_num_users: u32,
|
||||||
|
num_groups, size_num_groups: u32,
|
||||||
|
cmph_gid2group: u32,
|
||||||
|
size_cmph_gid2group: u32,
|
||||||
|
cmph_uid2user, size_cmph_uid2user: u32,
|
||||||
|
cmph_groupname2group, size_cmph_groupname2group: u32,
|
||||||
|
cmph_username2user, size_cmph_username2user: u32,
|
||||||
|
structs_group, size_structs_group: u32,
|
||||||
|
structs_user, size_structs_user: u32,
|
||||||
|
fsst_usernames_homes, size_fsst_usernames_homes: u32,
|
||||||
|
fsst_groupnames, size_fsst_usernames_homes: u32,
|
||||||
|
fsst_shells, size_fsst_shells: u32,
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`magic` must be 0xf09fa4b7, and `version` must be `0x00`. The remaining fields
|
||||||
|
are indexes to further sections of the file with their sizes in bytes. All
|
||||||
|
numbers are little-endian. Each field may be aligned to 64B (L1D cache size) or
|
||||||
|
4KB (standard page size), to be decided.
|
||||||
|
|
||||||
[git-subtrac]: https://github.com/apenwarr/git-subtrac/
|
[git-subtrac]: https://github.com/apenwarr/git-subtrac/
|
||||||
[cmph]: http://cmph.sourceforge.net/
|
[cmph]: http://cmph.sourceforge.net/
|
||||||
|
Loading…
Reference in New Issue
Block a user