Patchfile

class Patchfile

Inheritance diagram

Inheritance diagram of Patchfile

Patchfile(void)
explicit Patchfile(PointerTo<Buffer> buffer)

Create a patch file and initializes internal data

Create patch file with buffer to patch

bool apply(Filename &patch_file, Filename &file)
bool apply(Filename &patch_file, Filename &orig_file, Filename const &target_file)

Patches the entire file in one call returns true on success and false on error

This version will delete the patch file and overwrite the original file.

Patches the entire file in one call returns true on success and false on error

This version will not delete any files.

bool build(Filename file_orig, Filename file_new, Filename patch_name)

This implementation uses the “greedy differencing algorithm” described in the masters thesis “Differential Compression: A Generalized Solution for Binary Files” by Randal C. Burns (p.13). For an original file of size M and a new file of size N, this algorithm is O(M) in space and O(M*N) (worst- case) in time. return false on error

bool get_allow_multifile(void)

See set_allow_multifile().

int get_footprint_length(void)
PN_stdfloat get_progress(void) const

Returns a value in the range 0..1, representing the amount of progress through the patchfile, during a session.

HashVal const &get_result_hash(void) const

Returns the MD5 hash for the file after the patch has been applied.

HashVal const &get_source_hash(void) const

Returns the MD5 hash for the source file.

bool has_source_hash(void) const

Returns true if the MD5 hash for the source file is known. (Some early versions of the patch file did not store this information.)

int initiate(Filename const &patch_file, Filename const &file)
int initiate(Filename const &patch_file, Filename const &orig_file, Filename const &target_file)

Set up to apply the patch to the file (original file and patch are destroyed in the process).

Set up to apply the patch to the file. In this form, neither the original file nor the patch file are destroyed.

int read_header(Filename const &patch_file)

Opens the patch file for reading, and gets the header information from the file but does not begin to do any real work. This can be used to query the data stored in the patch.

void reset_footprint_length(void)
int run(void)

Perform one buffer’s worth of patching. Returns one of the following values:

  • EU_ok : while patching

  • EU_success : when done

  • EU_error_abort : Patching has not been initiated

  • EU_error_file_invalid : file is corrupted

  • EU_error_invalid_checksum : incompatible patch file

  • EU_error_write_file_rename : could not rename file

void set_allow_multifile(bool allow_multifile)

If this flag is set true, the Patchfile will make a special case for patching Panda Multifiles, if detected, and attempt to patch them on a subfile-by-subfile basis. If this flag is false, the Patchfile will always patch the file on a full-file basis.

This has effect only when building patches; it is not used for applying patches.

void set_footprint_length(int length)