ARCHIVABLE - ntruessel/etar GitHub Wiki

Everything that one wants to archive has to inherit from ARCHIVABLE, which provides an interface that ARCHIVE uses to write it. The etar library provides two predefined implementations.

FILE_ARCHIVABLE

FILE_ARCHIVABLE allows to archive plain files. A client has to provide a FILE for which the FILE_ARCHIVABLE will be created.

DIRECTORY_ARCHIVABLE

DIRECTORY_ARCHIVABLE allows to archive a directory (without any contents). On creation, the client has to provide a FILE (!) for which is_directory holds.

Implementing a Custom ARCHIVABLE

To implement a custom ARCHIVABLE, one has to implement the following features. All features from TAR_UTILS can be used. Please note that ARCHIVABLEs are not supposed to report errors.

Creation Procedures

There is nothing to consider for creation procedures.

required_blocks

required_blocks: INTEGER

Has to return how many blocks are needed to archive the payload. At least 0.

header

header: TAR_HEADER

Has to return a TAR_HEADER suitable for the archivable type and the payload.

write_block_to_managed_pointer

write_block_to_managed_pointer (p: MANAGED_POINTER; a_pos: INTEGER)

Has to write the next block to p (writing should start at position a_pos). This feature has to increate written_blocks by one. In case the payload does not fill a whole block, it has to be padded to full block size ({TAR_CONST}.tar_block_size), you might want to use TAR_UTILS.pad_block for this.