mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 09:38:11 +00:00
cksum: Manually count file size instead of using stat()
`stat()` doesn't work for stdin, but this does.
This commit is contained in:
parent
b8a1d04a49
commit
c279fd1097
1 changed files with 5 additions and 10 deletions
|
@ -54,14 +54,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
auto file = file_or_error.release_value();
|
auto file = file_or_error.release_value();
|
||||||
|
size_t file_size = 0;
|
||||||
auto stat_or_error = Core::System::stat(filepath);
|
|
||||||
if (stat_or_error.is_error()) {
|
|
||||||
warnln("{}: Failed to fstat {}: {}", arguments.strings[0], filepath, stat_or_error.error());
|
|
||||||
fail = true;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
auto st = stat_or_error.release_value();
|
|
||||||
|
|
||||||
if (algorithm == "crc32") {
|
if (algorithm == "crc32") {
|
||||||
Crypto::Checksum::CRC32 crc32;
|
Crypto::Checksum::CRC32 crc32;
|
||||||
|
@ -72,9 +65,10 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
fail = true;
|
fail = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
file_size += data_or_error.value().size();
|
||||||
crc32.update(data_or_error.value());
|
crc32.update(data_or_error.value());
|
||||||
}
|
}
|
||||||
outln("{:08x} {} {}", crc32.digest(), st.st_size, path);
|
outln("{:08x} {} {}", crc32.digest(), file_size, path);
|
||||||
} else if (algorithm == "adler32") {
|
} else if (algorithm == "adler32") {
|
||||||
Crypto::Checksum::Adler32 adler32;
|
Crypto::Checksum::Adler32 adler32;
|
||||||
while (!file->is_eof()) {
|
while (!file->is_eof()) {
|
||||||
|
@ -84,9 +78,10 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
fail = true;
|
fail = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
file_size += data_or_error.value().size();
|
||||||
adler32.update(data_or_error.value());
|
adler32.update(data_or_error.value());
|
||||||
}
|
}
|
||||||
outln("{:08x} {} {}", adler32.digest(), st.st_size, path);
|
outln("{:08x} {} {}", adler32.digest(), file_size, path);
|
||||||
} else {
|
} else {
|
||||||
warnln("{}: Unknown checksum algorithm: {}", arguments.strings[0], algorithm);
|
warnln("{}: Unknown checksum algorithm: {}", arguments.strings[0], algorithm);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue