Module Make.Header

include module type of Header
type compatibility =
| OldGNU

GNU tar < 1.12

| GNU

GNU tar 1.12 - 1.13.25

| V7

Origin 7th Release format

| Ustar

POSIX.1-1988

| Posix

POSIX.1-2001

tar format assumptions. Default is V7 (for compatibility with versions of ocaml-tar before this type was introduced). See http://www.gnu.org/software/tar/manual/html_section/tar_68.html for more information.

val compatibility_level : compatibility Stdlib.ref

Default compatibility if ?level is omitted. Defaults to V7

module Extended : sig ... end
type t = {
file_name : string;
file_mode : int;
user_id : int;
group_id : int;
file_size : int64;
mod_time : int64;
uname : string;
gname : string;
devmajor : int;
devminor : int;
extended : Extended.t option;
}

Represents a standard archive (note checksum not stored)

val make : ?⁠file_mode:int -> ?⁠user_id:int -> ?⁠group_id:int -> ?⁠mod_time:int64 -> ?⁠link_indicator:Link.t -> ?⁠link_name:string -> ?⁠uname:string -> ?⁠gname:string -> ?⁠devmajor:int -> ?⁠devminor:int -> string -> int64 -> t

Helper function to make a simple header

val length : int

Length of a header block

val zero_block : Cstruct.t

A blank header block (two of these in series mark the end of the tar)

val to_detailed_string : t -> string

Pretty-print the header record

val to_hex : string -> string

For debugging: pretty-print a string as hex

exception Checksum_mismatch

Thrown when unmarshalling a header if the checksums don't match

exception End_of_stream

Thrown if we detect the end of the tar (at least two zero blocks in sequence)

val unmarshal : ?⁠level:compatibility -> ?⁠extended:Extended.t -> Cstruct.t -> t option

Unmarshal a header block, returning None if it's all zeroes. This header block may be preceeded by an ?extended block which will override some fields.

val marshal : ?⁠level:compatibility -> Cstruct.t -> t -> unit

Marshal a header block, computing and inserting the checksum

val compute_zero_padding_length : t -> int

Compute the amount of zero-padding required to round up the file size to a whole number of blocks

val zero_padding : t -> Cstruct.t

Return the required zero-padding as a string

val to_sectors : t -> int64

to_sectors t is the number of sectors occupied by the data

val get_next_header : ?⁠level:compatibility -> IO.in_channel -> t

Returns the next header block or fails with `Eof if two consecutive zero-filled blocks are discovered. Assumes stream is positioned at the possible start of a header block. End_of_file is thrown if the stream unexpectedly fails