STORAGE_BACKEND - ntruessel/etar GitHub Wiki
STORAGE_BACKEND
provides an unified interface for different storage methods an archive could use. Currently the only implementation is FILE_STORAGE_BACKEND
, but one could add support for in-memory archives or compressed files as well.
FILE_STOARGE_BACKEND
This class provides support for archives that are stored on disk. A FILE_STROAGE_BACKEND
intance is either created with make_from_file
(providing a FILE
), with a filename using make_from_filename
, or with a path using make_from_path
. In case the referenced file does not exist, it will be created.
Implementing a custom STORAGE_BACKEND
To implement a custom STORAGE_BACKEND
, one has to implement the following features:
Creation procedures
If default_create
is redefined, Precursor
must be called. Every other creation procedure should call default_create
.
open_read
open_read
Open backend for read access. Reading should start from the beginning of the backend.
open_write
open_write
Open backend for write access. Writing should start from the beginning of the backend.
close
close
Close backend
archive_finished
archive_finished: BOOLEAN
Indicate whether the next two blocks contain the end of archive indicator (only zero bytes). Subsequent read_block
calls should not skip these two blocks, but read them again (not necessarily from from the backend again, the implementation is free to cache the blocks). If an error occured (or occurs while checking for the end of archive indicator), there are not enough blocks available or the backend is closed, archive_finished
should return True
as well.
block_ready
block_ready: BOOLEAN
Indicate whether there is a block available in last_block
. If an error occured this should be False
.
readable
readable: BOOLEAN
Indicates whether this backend can be read from. On error this has to return False
.
writable
writable: BOOLEAN
Indicates whether this backend can be written to. On error this has to return False
.
closed
closed: BOOLEAN
Indicates whether this backend is closed.
read_block
read_block
Read next block from backend. If there are not enough bytes for a full block, an error should be reported.
last_block
last_block: MANAGED_POINTER
Last block that was read. This block has to be of size {TAR_CONST}.tar_block_size
.
write_block
write_block (a_block: MANAGED_POINTER; a_pos: INTEGER)
Write a_block
to backend (starting at index a_pos
of a_block
).
finalize
finalize
Write end of archive indicator (two consecutive blocks of all zero bytes) and close backend.