24 uint32_t rom_size = (filesize / 0x2000) * 0x2000;
26 if (rom_size < filesize)
27 result = filesize - rom_size;
31 if (filesize & 0x0FFF)
32 result = filesize & 0x0FFF;
43 tmpcrc = QString(
"%1").arg( crc, 0, 16 );
47 tmpcrc = tmpcrc.rightJustified(8,
'0');
53static constexpr uint64_t
STATS_REQUIRED {ZIP_STAT_NAME|ZIP_STAT_INDEX|ZIP_STAT_SIZE};
59 std::array<char,32768> block {};
60 uint32_t crc =
crc32(0,
nullptr, 0);
65 int err { ZIP_ER_OK };
66 zip_t *zf = zip_open(qPrintable(romname), 0, &err);
69 zip_int64_t numEntries = zip_get_num_entries(zf, 0);
70 for (
int index = 0; index < numEntries; index++)
72 zip_file_t *infile = zip_fopen_index(zf, index, 0);
76 zip_stat_init(&stats);
77 zip_stat_index(zf, index, 0, &stats);
84 zip_fread(infile, block.data(), offset);
88 while ((count = zip_fread(infile, block.data(), blocksize)) > 0)
90 crc =
crc32(crc, (Bytef *)block.data(), (uInt)count);
93 *key = QString(
"%1:%2").arg(crcRes, stats.name);
95 if (romDB->contains(*key))
109 if (f.open(QIODevice::ReadOnly))
114 f.read(block.data(), offset);
118 while ((count = f.read(block.data(), blocksize)) > 0)
120 crc =
crc32(crc, (Bytef *)block.data(), (uInt)count);
124 *key = QString(
"%1:").arg(crcRes);
virtual int size(void) const
static uint32_t crc32(const unsigned char *data, int len)