cmp.h
来自「Linux下一个可以比较二进制文件的工具xdelta3.0u的源码。」· C头文件 代码 · 共 65 行
H
65 行
/* -*- Mode: C++ -*- */namespace regtest {inline size_t CmpDifferentBlockBytes(const Block &a, const Block &b) { size_t total = 0; size_t i = 0; size_t m = min(a.Size(), b.Size()); for (; i < m; i++) { if (a[i] != b[i]) { total++; } } total += a.Size() - i; total += b.Size() - i; return total;}inline xoff_t CmpDifferentBytes(const FileSpec &a, const FileSpec &b) { Block block_a, block_b; xoff_t total = 0; FileSpec::iterator a_i(a), b_i(b); for (; !a_i.Done() && !b_i.Done(); a_i.Next(), b_i.Next()) { a_i.Get(&block_a); b_i.Get(&block_b); total += CmpDifferentBlockBytes(block_a, block_b); } for (; !a_i.Done(); a_i.Next()) { total += a_i.BytesOnBlock(); } for (; !b_i.Done(); b_i.Next()) { total += b_i.BytesOnBlock(); } return total;}inline bool ExtFile::EqualsSpec(const FileSpec &spec) const { main_file t; main_file_init(&t); CHECK_EQ(0, main_file_open(&t, Name(), XO_READ)); Block tblock; Block sblock; for (BlockIterator iter(spec); !iter.Done(); iter.Next()) { iter.Get(&sblock); tblock.SetSize(sblock.Size()); usize_t tread; CHECK_EQ(0, main_file_read(&t, tblock.Data(), tblock.Size(), &tread, "read failed")); CHECK_EQ(0, CmpDifferentBlockBytes(tblock, sblock)); } CHECK_EQ(0, main_file_close(&t)); main_file_cleanup(&t); return true;}} // namespace regtest
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?