]>
Commit | Line | Data |
---|---|---|
60864b1b | 1 | //! *pxar* Implementation (proxmox file archive format) |
4fa71e05 | 2 | //! |
8968258b DM |
3 | //! This code implements a slightly modified version of the *catar* |
4 | //! format used in the [casync](https://github.com/systemd/casync) | |
60864b1b | 5 | //! toolkit (we are not 100\% binary compatible). It is a file archive |
8968258b DM |
6 | //! format defined by 'Lennart Poettering', specially defined for |
7 | //! efficent deduplication. | |
4fa71e05 DM |
8 | |
9 | //! Every archive contains items in the following order: | |
60864b1b DM |
10 | //! * `ENTRY` -- containing general stat() data and related bits |
11 | //! * `USER` -- user name as text, if enabled | |
12 | //! * `GROUP` -- group name as text, if enabled | |
13 | //! * `XATTR` -- one extended attribute | |
14 | //! * ... -- more of these when there are multiple defined | |
15 | //! * `ACL_USER` -- one `USER ACL` entry | |
16 | //! * ... -- more of these when there are multiple defined | |
17 | //! * `ACL_GROUP` -- one `GROUP ACL` entry | |
18 | //! * ... -- more of these when there are multiple defined | |
19 | //! * `ACL_GROUP_OBJ` -- The `ACL_GROUP_OBJ` | |
20 | //! * `ACL_DEFAULT` -- The various default ACL fields if there's one defined | |
21 | //! * `ACL_DEFAULT_USER` -- one USER ACL entry | |
22 | //! * ... -- more of these when multiple are defined | |
23 | //! * `ACL_DEFAULT_GROUP` -- one GROUP ACL entry | |
24 | //! * ... -- more of these when multiple are defined | |
25 | //! * `FCAPS` -- file capability in Linux disk format | |
26 | //! * `QUOTA_PROJECT_ID` -- the ext4/xfs quota project ID | |
27 | //! * `PAYLOAD` -- file contents, if it is one | |
28 | //! * `SYMLINK` -- symlink target, if it is one | |
29 | //! * `DEVICE` -- device major/minor, if it is a block/char device | |
4fa71e05 DM |
30 | //! |
31 | //! If we are serializing a directory, then this is followed by: | |
32 | //! | |
60864b1b DM |
33 | //! * `FILENAME` -- name of the first directory entry (strictly ordered!) |
34 | //! * `<archive>` -- serialization of the first directory entry's metadata and contents, | |
4fa71e05 | 35 | //! following the exact same archive format |
60864b1b DM |
36 | //! * `FILENAME` -- name of the second directory entry (strictly ordered!) |
37 | //! * `<archive>` -- serialization of the second directory entry | |
4fa71e05 | 38 | //! * ... |
60864b1b | 39 | //! * `GOODBYE` -- lookup table at the end of a list of directory entries |
4fa71e05 | 40 | |
60864b1b DM |
41 | //! |
42 | //! The original format has no way to deal with hardlinks, so we | |
43 | //! extended the format by a special `HARDLINK` tag, which can replace | |
44 | //! an `ENTRY` tag. The `HARDLINK` tag contains an 64bit offset which | |
45 | //! points to the linked `ENTRY` inside the archive, followed by the | |
46 | //! full path name of that `ENTRY`. `HARDLINK`s may not have further data | |
47 | //! (user, group, acl, ...) because this is already defined by the | |
48 | //! linked `ENTRY`. | |
af572aaa | 49 | |
3dbfe5b1 | 50 | mod binary_search_tree; |
7dfa17c7 | 51 | pub use binary_search_tree::*; |
4fa71e05 | 52 | |
47651f95 CE |
53 | pub mod flags; |
54 | pub use flags::*; | |
55 | ||
3dbfe5b1 DM |
56 | mod format_definition; |
57 | pub use format_definition::*; | |
58 | ||
59 | mod encoder; | |
60 | pub use encoder::*; | |
61 | ||
0e21b87b DM |
62 | mod sequential_decoder; |
63 | pub use sequential_decoder::*; | |
46cfe7ab DM |
64 | |
65 | mod decoder; | |
66 | pub use decoder::*; | |
ab87f167 | 67 | |
4d142ea7 CE |
68 | mod match_pattern; |
69 | pub use match_pattern::*; | |
cd7dc879 | 70 | |
fe076c82 CE |
71 | mod dir_stack; |
72 | pub use dir_stack::*; | |
6a584cfd | 73 | |
02ba8a5d DM |
74 | pub mod fuse; |
75 | pub use fuse::*; | |
76 | ||
aea0815d DM |
77 | pub mod catalog; |
78 | ||
ab87f167 | 79 | mod helper; |