|
|
@@ -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(); |
|
|
|