82 sar(
const std::shared_ptr<user_interaction> & dialog,
83 const std::string & base_name,
84 const std::string & extension,
85 const std::shared_ptr<entrepot> & where,
90 const std::string & execute =
"");
115 sar(
const std::shared_ptr<user_interaction> & dialog,
117 const std::string & base_name,
118 const std::string & extension,
121 bool x_warn_overwrite,
122 bool x_allow_overwrite,
124 const std::shared_ptr<entrepot> & where,
125 const label & internal_name,
126 const label & data_name,
127 bool force_permission,
131 bool format_07_compatible,
132 const std::string & execute =
"");
158 const slice_layout & get_slicing()
const {
return slicing; };
177 const std::shared_ptr<entrepot> & get_entrepot()
const {
return entr; };
195 std::shared_ptr<entrepot>
entr;
248 void hook_execute(
const infinint &num);
abstraction of filesystem files for entrepot
generic_file(gf_mode m)
main constructor
the arbitrary large positive integer class
manage label data structure used in archive slice headers
mem_ui(const std::shared_ptr< user_interaction > &dialog)
constructor
virtual U_I inherited_read(char *a, U_I size) override
implementation of read() operation
infinint size_of_current
size of the current slice (used in reading mode only)
sar & operator=(const sar &ref)=delete
assignment operator
bool skip_backward(U_I x)
skip backward in sar global contents
std::string hook
command line to execute between slices
void open_file(infinint num, bool bytheend)
close current slice and open the slice 'num'
label of_data_name
internal name linked to data (transparent to dar_xform and used by isolated catalogue as reference)
virtual void inherited_terminate() override
destructor-like call, except that it is allowed to throw exceptions
infinint to_read_ahead
amount of data to read ahead for next slices
bool opt_warn_overwrite
a warning must be issued before overwriting a slice
infinint of_last_file_num
number of the last slice (if met)
fichier_global * of_fd
file object currently openned
infinint pause
do we pause between slices
bool is_current_eof_a_normal_end_of_slice() const
return true if current reading position is at end of slice
bool initial
do not launch hook command-line during sar initialization
virtual void inherited_truncate(const infinint &pos) override
truncate file at the give offset
std::shared_ptr< entrepot > entr
where are stored slices
virtual bool is_an_old_start_end_archive() const override
returns whether the archive is a old archive (format < 8)
bool opt_allow_overwrite
is slice overwriting allowed
bool seq_read
whether sequential read has been requested
const infinint & get_non_first_slice_header_size() const
get the non first slice header
sar(const std::shared_ptr< user_interaction > &dialog, gf_mode open_mode, const std::string &base_name, const std::string &extension, const infinint &file_size, const infinint &first_file_size, bool x_warn_overwrite, bool x_allow_overwrite, const infinint &pause, const std::shared_ptr< entrepot > &where, const label &internal_name, const label &data_name, bool force_permission, U_I permission, hash_algo x_hash, const infinint &x_min_digits, bool format_07_compatible, const std::string &execute="")
this constructor creates a new set of slices
virtual void inherited_read_ahead(const infinint &amount) override
tells the object that several calls to read() will follow to probably obtain at least the given amoun...
void open_writeonly(const std::string &fic, const infinint &num, bool bytheend)
void set_offset(infinint offset)
skip to current slice relative offset
bool lax
whether to try to go further reading problems
virtual bool truncatable(const infinint &pos) const override
whether the implementation is able to truncate to the given position
std::string base
archive base name
virtual bool skippable(skippability direction, const infinint &amount) override
whether the implementation is able to skip
bool force_perm
true if any future slice has its permission to be set explicitely
label of_internal_name
internal name shared in all slice header
char of_flag
flags of the open file
bool of_last_file_known
whether the T terminal slice has been met
infinint of_current
number of the open slice
hash_algo hash
whether to build a hashing when creating slices, and if so, which algorithm to use
void close_file(bool terminal)
close current openned file, adding (in write mode only) a terminal mark (last slice) or not
bool skip_forward(U_I x)
skip forward in sar global contents
virtual bool skip(const infinint &pos) override
skip at the absolute position
virtual void inherited_flush_read() override
reset internal engine, flush caches in order to read the data at current position
sar(sar &&ref) noexcept=delete
move constructor
sar(const std::shared_ptr< user_interaction > &dialog, const std::string &base_name, const std::string &extension, const std::shared_ptr< entrepot > &where, bool by_the_end, const infinint &x_min_digits, bool sequential_read, bool lax=false, const std::string &execute="")
this constructor reads data from a set of slices
infinint bytes_still_to_read_in_slice() const
returns the number of bytes expected before the end of slice
infinint min_digits
minimum number of digits the slices number is stored with in the filename
const infinint & get_first_slice_header_size() const
get the first slice header
virtual bool skip_relative(S_I x) override
skip relatively to the current position
void open_readonly(const std::string &fic, const infinint &num, bool bytheend)
U_I perm
if force_perm is true, value to use for slice permission
sar(const sar &ref)=delete
the copy constructor
virtual bool skip_to_eof() override
skip to the end of file
virtual const label & get_data_name() const override
obtain the data_name of the archive (label associated with the archive's data)
virtual void inherited_write(const char *a, U_I size) override
implementation of the write() operation
infinint of_max_seen
highest slice number seen so far
virtual infinint get_position() const override
get the current read/write position
void open_file_init()
initialize some of_* fields
virtual void inherited_sync_write() override
write down any pending data
infinint of_last_file_size
size of the last slice (if met)
infinint file_offset
current reading/writing position in the current slice (relative to the whole slice file,...
bool natural_destruction
whether to execute commands between slices on object destruction
void open_last_file(bool bytheend)
open the last slice, ask the user, test, until last slice available
std::string ext
archive extension
slice_layout slicing
slice layout
class contextual adds the information of phases in the generic_file
defines the entrepot interface.
class generic_file is defined here as well as class fichier
hash_algo
hashing algorithm available
gf_mode
generic_file openning modes
switch module to limitint (32 ou 64 bits integers) or infinint
are defined here basic integer types that tend to be portable
class mem_ui definition. This class is to be used as parent class to handle user_interaction object m...
include macro defined by the configure script and some specific additional ones
libdar namespace encapsulate all libdar symbols
object describing the slicing of an archive