mirror of
https://git.proxmox.com/git/pxar
synced 2025-04-28 21:47:17 +00:00

Introduces a new pxar format entry type `Version` and the associated encoder and decoder methods. The format version entry is only allowed once, as the first entry of the pxar archive, marked with a `PXAR_FORMAT_VERSION` header followed by the encoded version number. If not present, the default format version 1 is assumed as encoding format for the archive. The entry allows to early detect incompatibility with an encoded archive and bail or switch mode based on the encountered version. The format version entry is not backwards compatible to pxar format version 1. Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
89 lines
2.6 KiB
Rust
89 lines
2.6 KiB
Rust
use pxar::format::hash_filename;
|
|
|
|
const CONSTANTS: &[(&str, &str, &str)] = &[
|
|
(
|
|
"Pxar format version entry, fallback to version 1 if not present",
|
|
"PXAR_FORMAT_VERSION",
|
|
"__PROXMOX_FORMAT_VERSION__",
|
|
),
|
|
(
|
|
"Beginning of an entry (current version).",
|
|
"PXAR_ENTRY",
|
|
"__PROXMOX_FORMAT_ENTRY_V2__",
|
|
),
|
|
(
|
|
"Previous version of the entry struct",
|
|
"PXAR_ENTRY_V1",
|
|
"__PROXMOX_FORMAT_ENTRY__",
|
|
),
|
|
("", "PXAR_FILENAME", "__PROXMOX_FORMAT_FILENAME__"),
|
|
("", "PXAR_SYMLINK", "__PROXMOX_FORMAT_SYMLINK__"),
|
|
("", "PXAR_DEVICE", "__PROXMOX_FORMAT_DEVICE__"),
|
|
("", "PXAR_XATTR", "__PROXMOX_FORMAT_XATTR__"),
|
|
("", "PXAR_ACL_USER", "__PROXMOX_FORMAT_ACL_USER__"),
|
|
("", "PXAR_ACL_GROUP", "__PROXMOX_FORMAT_ACL_GROUP__"),
|
|
("", "PXAR_ACL_GROUP_OBJ", "__PROXMOX_FORMAT_ACL_GROUP_OBJ__"),
|
|
("", "PXAR_ACL_DEFAULT", "__PROXMOX_FORMAT_ACL_DEFAULT__"),
|
|
(
|
|
"",
|
|
"PXAR_ACL_DEFAULT_USER",
|
|
"__PROXMOX_FORMAT_ACL_DEFAULT_USER__",
|
|
),
|
|
(
|
|
"",
|
|
"PXAR_ACL_DEFAULT_GROUP",
|
|
"__PROXMOX_FORMAT_ACL_DEFAULT_GROUP__",
|
|
),
|
|
("", "PXAR_FCAPS", "__PROXMOX_FORMAT_FCAPS__"),
|
|
("", "PXAR_QUOTA_PROJID", "__PROXMOX_FORMAT_QUOTA_PROJID__"),
|
|
(
|
|
"Marks item as hardlink",
|
|
"PXAR_HARDLINK",
|
|
"__PROXMOX_FORMAT_HARDLINK__",
|
|
),
|
|
(
|
|
"Marks the beginning of the payload (actual content) of regular files",
|
|
"PXAR_PAYLOAD",
|
|
"__PROXMOX_FORMAT_PXAR_PAYLOAD__",
|
|
),
|
|
(
|
|
"Marks the beginning of a payload reference for regular files",
|
|
"PXAR_PAYLOAD_REF",
|
|
"__PROXMOX_FORMAT_PXAR_PAYLOAD_REF__",
|
|
),
|
|
(
|
|
"Marks item as entry of goodbye table",
|
|
"PXAR_GOODBYE",
|
|
"__PROXMOX_FORMAT_GOODBYE__",
|
|
),
|
|
(
|
|
"The end marker used in the GOODBYE object",
|
|
"PXAR_GOODBYE_TAIL_MARKER",
|
|
"__PROXMOX_FORMAT_PXAR_GOODBYE_TAIL_MARKER__",
|
|
),
|
|
(
|
|
"The start marker used in the separate payload stream",
|
|
"PXAR_PAYLOAD_START_MARKER",
|
|
"__PROXMOX_FORMAT_PXAR_PAYLOAD_START_MARKER__",
|
|
),
|
|
(
|
|
"The end marker used in the separate payload stream",
|
|
"PXAR_PAYLOAD_TAIL_MARKER",
|
|
"__PROXMOX_FORMAT_PXAR_PAYLOAD_TAIL_MARKER__",
|
|
),
|
|
];
|
|
|
|
fn main() {
|
|
println!("// Generated by `cargo run --example mk-format-hashes`");
|
|
for constant in CONSTANTS {
|
|
if !constant.0.is_empty() {
|
|
println!("/// {}", constant.0);
|
|
}
|
|
println!(
|
|
"pub const {}: u64 = 0x{:016x};",
|
|
constant.1,
|
|
hash_filename(constant.2.as_bytes()),
|
|
)
|
|
}
|
|
}
|