aboutsummaryrefslogtreecommitdiffstats
path: root/libpit/Source
diff options
context:
space:
mode:
Diffstat (limited to 'libpit/Source')
-rw-r--r--libpit/Source/libpit.cpp12
-rw-r--r--libpit/Source/libpit.h26
2 files changed, 30 insertions, 8 deletions
diff --git a/libpit/Source/libpit.cpp b/libpit/Source/libpit.cpp
index a1138b5..f9e8467 100644
--- a/libpit/Source/libpit.cpp
+++ b/libpit/Source/libpit.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2012 Benjamin Dobell, Glass Echidna
+/* Copyright (c) 2010-2013 Benjamin Dobell, Glass Echidna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -193,7 +193,7 @@ void PitData::Pack(unsigned char *data) const
PitData::PackInteger(data, entryOffset + 32, entries[i]->GetFileSize());
memcpy(data + entryOffset + 36, entries[i]->GetPartitionName(), PitEntry::kPartitionNameMaxLength);
- memcpy(data + entryOffset + 36 + PitEntry::kPartitionNameMaxLength, entries[i]->GetPartitionName(), PitEntry::kFlashFilenameMaxLength);
+ memcpy(data + entryOffset + 36 + PitEntry::kPartitionNameMaxLength, entries[i]->GetFlashFilename(), PitEntry::kFlashFilenameMaxLength);
memcpy(data + entryOffset + 36 + PitEntry::kPartitionNameMaxLength + PitEntry::kFlashFilenameMaxLength,
entries[i]->GetFotaFilename(), PitEntry::kFotaFilenameMaxLength);
}
@@ -255,7 +255,7 @@ PitEntry *PitData::FindEntry(const char *partitionName)
{
for (unsigned int i = 0; i < entries.size(); i++)
{
- if (entries[i]->GetBlockCount() > 0 && strcmp(entries[i]->GetPartitionName(), partitionName) == 0)
+ if (entries[i]->IsFlashable() && strcmp(entries[i]->GetPartitionName(), partitionName) == 0)
return (entries[i]);
}
@@ -266,7 +266,7 @@ const PitEntry *PitData::FindEntry(const char *partitionName) const
{
for (unsigned int i = 0; i < entries.size(); i++)
{
- if (entries[i]->GetBlockCount() > 0 && strcmp(entries[i]->GetPartitionName(), partitionName) == 0)
+ if (entries[i]->IsFlashable() && strcmp(entries[i]->GetPartitionName(), partitionName) == 0)
return (entries[i]);
}
@@ -277,7 +277,7 @@ PitEntry *PitData::FindEntry(unsigned int partitionIdentifier)
{
for (unsigned int i = 0; i < entries.size(); i++)
{
- if (entries[i]->GetBlockCount() > 0 && entries[i]->GetIdentifier() == partitionIdentifier)
+ if (entries[i]->IsFlashable() && entries[i]->GetIdentifier() == partitionIdentifier)
return (entries[i]);
}
@@ -288,7 +288,7 @@ const PitEntry *PitData::FindEntry(unsigned int partitionIdentifier) const
{
for (unsigned int i = 0; i < entries.size(); i++)
{
- if (entries[i]->GetBlockCount() > 0 && entries[i]->GetIdentifier() == partitionIdentifier)
+ if (entries[i]->IsFlashable() && entries[i]->GetIdentifier() == partitionIdentifier)
return (entries[i]);
}
diff --git a/libpit/Source/libpit.h b/libpit/Source/libpit.h
index 9e6c452..c7bfe8b 100644
--- a/libpit/Source/libpit.h
+++ b/libpit/Source/libpit.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2012 Benjamin Dobell, Glass Echidna
+/* Copyright (c) 2010-2013 Benjamin Dobell, Glass Echidna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -103,6 +103,11 @@ namespace libpit
bool Matches(const PitEntry *otherPitEntry) const;
+ bool IsFlashable(void) const
+ {
+ return strlen(partitionName) != 0;
+ }
+
unsigned int GetBinaryType(void) const
{
return binaryType;
@@ -250,7 +255,8 @@ namespace libpit
enum
{
kFileIdentifier = 0x12349876,
- kHeaderDataSize = 28
+ kHeaderDataSize = 28,
+ kPaddedSizeMultiplicand = 4096
};
private:
@@ -349,6 +355,22 @@ namespace libpit
return entryCount;
}
+ unsigned int GetDataSize(void) const
+ {
+ return PitData::kHeaderDataSize + entryCount * PitEntry::kDataSize;
+ }
+
+ unsigned int GetPaddedSize(void) const
+ {
+ unsigned int dataSize = GetDataSize();
+ unsigned int paddedSize = (dataSize / kPaddedSizeMultiplicand) * kPaddedSizeMultiplicand;
+
+ if (dataSize % kPaddedSizeMultiplicand != 0)
+ paddedSize += kPaddedSizeMultiplicand;
+
+ return paddedSize;
+ }
+
unsigned int GetUnknown1(void) const
{
return unknown1;