Display non-ASCII-named FPT partition table entry names as hex (fixing #215)

This commit is contained in:
Nikolaj Schlej 2020-11-22 18:01:44 -08:00
parent 5967865028
commit 115d338a70
4 changed files with 58 additions and 29 deletions

View file

@ -171,7 +171,7 @@ USTATUS MeParser::parseFptRegion(const UByteArray & region, const UModelIndex &
const FPT_HEADER_ENTRY* ptEntry = firstPtEntry + i;
// Get info
name = usprintf("%c%c%c%c", ptEntry->Name[0], ptEntry->Name[1], ptEntry->Name[2], ptEntry->Name[3]);
name = visibleAsciiOrHex((UINT8*)ptEntry->Name, 4);
info = usprintf("Full size: %Xh (%u)\nPartition offset: %Xh\nPartition length: %Xh\nPartition type: %02Xh",
sizeof(FPT_HEADER_ENTRY), sizeof(FPT_HEADER_ENTRY),
ptEntry->Offset,
@ -275,7 +275,7 @@ make_partition_table_consistent:
if (partitions[i].type == Types::FptPartition) {
UModelIndex partitionIndex;
// Get info
name = usprintf("%c%c%c%c", partitions[i].ptEntry.Name[0], partitions[i].ptEntry.Name[1], partitions[i].ptEntry.Name[2], partitions[i].ptEntry.Name[3]);
name = visibleAsciiOrHex((UINT8*) partitions[i].ptEntry.Name, 4);
info = usprintf("Full size: %Xh (%u)\nPartition type: %02Xh\n",
partition.size(), partition.size(),
partitions[i].ptEntry.Type);

View file

@ -23,6 +23,32 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include "LZMA/LzmaCompress.h"
#include "LZMA/LzmaDecompress.h"
// Returns bytes as string when all bytes are ascii visible, hex representation otherwise
UString visibleAsciiOrHex(UINT8* bytes, UINT32 length)
{
bool ascii = true;
UString asciiString;
UString hexString;
for (UINT32 i = 0; i < length; i++) {
hexString += usprintf("%02X", bytes[i]);
if (bytes[i] < '\x20' || bytes[i] > '\x7E') { // Explicit ascii codes to avoid locale dependency
ascii = false;
}
if (ascii) {
asciiString += usprintf("%c", bytes[i]);
}
}
if (ascii) {
return asciiString;
}
return hexString;
}
// Returns unique name string based for tree item
UString uniqueItemName(const UModelIndex & index)
{

View file

@ -23,6 +23,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include "treemodel.h"
#include "parsingdata.h"
// Returns bytes as string when all bytes are ascii visible, hex representation otherwise
UString visibleAsciiOrHex(UINT8* bytes, UINT32 length);
// Returns unique name for tree item
UString uniqueItemName(const UModelIndex & index);