Crates.io | jojodiff |
lib.rs | jojodiff |
version | 0.1.2 |
source | src |
created_at | 2024-11-07 15:43:02.968876 |
updated_at | 2024-11-08 15:08:51.12478 |
description | Rust library for handling JojoDiff files, a diff utility for binary files. |
homepage | |
repository | https://github.com/francisdb/jojodiff-rs |
max_upload_size | |
id | 1439883 |
size | 34,123 |
Rust library for working with JojoDiff files
The original Jojos Binary Diff tool can be found at https://jojodiff.sourceforge.net/ and https://sourceforge.net/projects/jojodiff/
This library is a Rust implementation of the JojoDiff file format. It is intended to be used as a library for other Rust projects that need to work with JojoDiff files.
Currently, it only supports applying JojoDiff patch files to binary files.
cargo add jojodiff
This library uses the log
crate for logging. See https://docs.rs/log/latest/log/ for more information on how to select
a logger implementation and configuring it.
cargo test
Running a single test with logging:
RUST_LOG=debug cargo test patch_copy_seq_3_times
The JojoDiff patch file format is a binary stream containing operands that describe how to transform an original file into a destination file.
The stream consists of a series of
<op> (<data> || <len>)
where
<op> = <ESC> (<MOD>||<INS>||<DEL>||<EQL>||<BKT>)
<data> = <chr>||<ESC><ESC>
<chr> = any byte different from <ESC><MOD><INS><DEL><EQL> or <BKT>
<ESC><ESC> yields one <ESC> byte
Where:
<ESC>
(0xA7
) escape: Indicates that the next byte is an operand.<MOD>
(0xA6
) modify: Replaces bytes from the original file with bytes from the patch file.<INS>
(0xA5
) insert: Inserts bytes from the patch file into the destination file.<DEL>
(0xA4
) delete: Skips bytes from the original file.<EQL>
(0xA3
) equal: Copies bytes from the original file to the destination file.<BKT>
(0xA2
) backtrack: Seeks backwards in the original file.