File indexing completed on 2024-04-06 12:13:11
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #define _LARGEFILE64_SOURCE
0015 #include <cstdio>
0016 #include <cstdlib>
0017 #include <fcntl.h>
0018 #include <fmt/format.h>
0019 #include <iostream>
0020 #include <libgen.h>
0021 #include <sys/stat.h>
0022 #include <unistd.h>
0023 #include <zlib.h>
0024 #ifdef __APPLE__
0025 typedef off_t off64_t;
0026 #define O_LARGEFILE 0
0027 #endif
0028
0029 constexpr int EDMFILEUTILADLERBUFSIZE = 10 * 1024 * 1024;
0030
0031 int main(int argc, char* argv[]) {
0032 if (argc == 1) {
0033 std::cout << basename(argv[0]) << ": no files specified.\n";
0034 exit(1);
0035 }
0036
0037 std::unique_ptr<unsigned char[]> buffer{new unsigned char[EDMFILEUTILADLERBUFSIZE]};
0038 int fileNum = 0;
0039 for (fileNum = 1; fileNum < argc; fileNum++) {
0040 uLong adlerCksum = adler32(0, nullptr, 0);
0041 off64_t fileSize = 0;
0042
0043 int myFD = open(argv[fileNum], O_RDONLY | O_LARGEFILE);
0044 if (myFD == -1) {
0045 std::cout << basename(argv[0]) << ": failed to open file " << argv[fileNum] << ".\n";
0046 continue;
0047 }
0048
0049 lseek(myFD, 0, SEEK_SET);
0050
0051 int readSize = 0;
0052 while ((readSize = read(myFD, buffer.get(), EDMFILEUTILADLERBUFSIZE)) > 0) {
0053 adlerCksum = adler32(adlerCksum, buffer.get(), readSize);
0054 fileSize += readSize;
0055 }
0056
0057 std::cout << fmt::format("{:x} {} {}\n", adlerCksum, fileSize, argv[fileNum]);
0058 }
0059
0060 return (0);
0061 }
0062
0063