mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-24 05:01:43 +00:00
DEBUGGER: Extend the md5 and md5mac commands to handle any chunk length
This will be useful in matching the MD5 checksums with what the advanced detector returns
This commit is contained in:
parent
78b2c87d51
commit
dd347dec83
@ -522,11 +522,25 @@ struct ArchiveMemberLess {
|
||||
|
||||
bool Debugger::cmdMd5(int argc, const char **argv) {
|
||||
if (argc < 2) {
|
||||
debugPrintf("md5 <filename | pattern>\n");
|
||||
debugPrintf("md5 [-n length] <filename | pattern>\n");
|
||||
} else {
|
||||
uint32 length = 0;
|
||||
uint paramOffset = 0;
|
||||
|
||||
// If the user supplied an -n parameter, set the bytes to read
|
||||
if (!strcmp(argv[1], "-n")) {
|
||||
// Make sure that we have at least two more parameters
|
||||
if (argc < 4) {
|
||||
debugPrintf("md5 [-n length] <filename | pattern>\n");
|
||||
return true;
|
||||
}
|
||||
length = atoi(argv[2]);
|
||||
paramOffset = 2;
|
||||
}
|
||||
|
||||
// Assume that spaces are part of a single filename.
|
||||
Common::String filename = argv[1];
|
||||
for (int i = 2; i < argc; i++) {
|
||||
Common::String filename = argv[1 + paramOffset];
|
||||
for (int i = 2 + paramOffset; i < argc; i++) {
|
||||
filename = filename + " " + argv[i];
|
||||
}
|
||||
Common::ArchiveMemberList list;
|
||||
@ -536,9 +550,9 @@ bool Debugger::cmdMd5(int argc, const char **argv) {
|
||||
} else {
|
||||
sort(list.begin(), list.end(), ArchiveMemberLess());
|
||||
for (Common::ArchiveMemberList::iterator iter = list.begin(); iter != list.end(); ++iter) {
|
||||
Common::ReadStream *stream = (*iter)->createReadStream();
|
||||
Common::String md5 = Common::computeStreamMD5AsString(*stream, 0);
|
||||
debugPrintf("%s %s\n", md5.c_str(), (*iter)->getDisplayName().c_str());
|
||||
Common::SeekableReadStream *stream = (*iter)->createReadStream();
|
||||
Common::String md5 = Common::computeStreamMD5AsString(*stream, length);
|
||||
debugPrintf("%s %s %d\n", md5.c_str(), (*iter)->getDisplayName().c_str(), stream->size());
|
||||
delete stream;
|
||||
}
|
||||
}
|
||||
@ -548,11 +562,25 @@ bool Debugger::cmdMd5(int argc, const char **argv) {
|
||||
|
||||
bool Debugger::cmdMd5Mac(int argc, const char **argv) {
|
||||
if (argc < 2) {
|
||||
debugPrintf("md5mac <base filename>\n");
|
||||
debugPrintf("md5mac [-n length] <base filename>\n");
|
||||
} else {
|
||||
uint32 length = 0;
|
||||
uint paramOffset = 0;
|
||||
|
||||
// If the user supplied an -n parameter, set the bytes to read
|
||||
if (!strcmp(argv[1], "-n")) {
|
||||
// Make sure that we have at least two more parameters
|
||||
if (argc < 4) {
|
||||
debugPrintf("md5mac [-n length] <base filename>\n");
|
||||
return true;
|
||||
}
|
||||
length = atoi(argv[2]);
|
||||
paramOffset = 2;
|
||||
}
|
||||
|
||||
// Assume that spaces are part of a single filename.
|
||||
Common::String filename = argv[1];
|
||||
for (int i = 2; i < argc; i++) {
|
||||
Common::String filename = argv[1 + paramOffset];
|
||||
for (int i = 2 + paramOffset; i < argc; i++) {
|
||||
filename = filename + " " + argv[i];
|
||||
}
|
||||
Common::MacResManager macResMan;
|
||||
@ -568,13 +596,13 @@ bool Debugger::cmdMd5Mac(int argc, const char **argv) {
|
||||
} else {
|
||||
// The resource fork is probably the most relevant one.
|
||||
if (macResMan.hasResFork()) {
|
||||
Common::String md5 = macResMan.computeResForkMD5AsString(0);
|
||||
debugPrintf("%s %s (resource)\n", md5.c_str(), macResMan.getBaseFileName().c_str());
|
||||
Common::String md5 = macResMan.computeResForkMD5AsString(length);
|
||||
debugPrintf("%s %s (resource) %d\n", md5.c_str(), macResMan.getBaseFileName().c_str(), macResMan.getResForkDataSize());
|
||||
}
|
||||
if (macResMan.hasDataFork()) {
|
||||
Common::ReadStream *stream = macResMan.getDataFork();
|
||||
Common::String md5 = Common::computeStreamMD5AsString(*stream, 0);
|
||||
debugPrintf("%s %s (data)\n", md5.c_str(), macResMan.getBaseFileName().c_str());
|
||||
Common::SeekableReadStream *stream = macResMan.getDataFork();
|
||||
Common::String md5 = Common::computeStreamMD5AsString(*stream, length);
|
||||
debugPrintf("%s %s (data) %d\n", md5.c_str(), macResMan.getBaseFileName().c_str(), stream->size());
|
||||
}
|
||||
}
|
||||
macResMan.close();
|
||||
|
Loading…
x
Reference in New Issue
Block a user