mirror of https://github.com/OpenTTD/OpenTTD
Codechange: use fstream to compare file equality
parent
cd7ac64f9d
commit
89deb3876f
|
@ -16,6 +16,7 @@
|
||||||
#include "../error_func.h"
|
#include "../error_func.h"
|
||||||
|
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
#include "../safeguards.h"
|
#include "../safeguards.h"
|
||||||
|
|
||||||
|
@ -325,29 +326,18 @@ static void AppendFile(std::optional<std::string_view> fname, FILE *out_fp)
|
||||||
* @param n2 Second file.
|
* @param n2 Second file.
|
||||||
* @return True if both files are identical.
|
* @return True if both files are identical.
|
||||||
*/
|
*/
|
||||||
static bool CompareFiles(std::string_view n1, std::string_view n2)
|
static bool CompareFiles(std::filesystem::path path1, std::filesystem::path path2)
|
||||||
{
|
{
|
||||||
auto f2 = FileHandle::Open(n2, "rb");
|
/* Check for equal size, but ignore the error code for cases when a file does not exist. */
|
||||||
if (!f2.has_value()) return false;
|
std::error_code error_code;
|
||||||
|
if (std::filesystem::file_size(path1, error_code) != std::filesystem::file_size(path2, error_code)) return false;
|
||||||
|
|
||||||
auto f1 = FileHandle::Open(n1, "rb");
|
std::ifstream stream1(path1, std::ifstream::binary);
|
||||||
if (!f1.has_value()) {
|
std::ifstream stream2(path2, std::ifstream::binary);
|
||||||
FatalError("can't open {}", n1);
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t l1, l2;
|
return std::equal(std::istreambuf_iterator<char>(stream1.rdbuf()),
|
||||||
do {
|
std::istreambuf_iterator<char>(),
|
||||||
char b1[4096];
|
std::istreambuf_iterator<char>(stream2.rdbuf()));
|
||||||
char b2[4096];
|
|
||||||
l1 = fread(b1, 1, sizeof(b1), *f1);
|
|
||||||
l2 = fread(b2, 1, sizeof(b2), *f2);
|
|
||||||
|
|
||||||
if (l1 != l2 || memcmp(b1, b2, l1) != 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} while (l1 != 0);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Options of settingsgen. */
|
/** Options of settingsgen. */
|
||||||
|
|
Loading…
Reference in New Issue