diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2020-04-30 17:39:24 +0200 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2020-04-30 17:39:24 +0200 |
| commit | e04dc6ded7c3ca015095f7826aeb63804624abed (patch) | |
| tree | 6469f72a98b5ae5b8f00c873eca5874f0bf574b5 /src | |
| parent | 5876cbb5f465490d5c3f7cb310f04efde093c896 (diff) | |
| download | cc4group-e04dc6ded7c3ca015095f7826aeb63804624abed.tar.gz cc4group-e04dc6ded7c3ca015095f7826aeb63804624abed.zip | |
Add crc to CC4Group_EntryInfo
Diffstat (limited to 'src')
| -rw-r--r-- | src/cc4group.c | 17 | ||||
| -rw-r--r-- | src/cc4group.h | 3 | ||||
| -rw-r--r-- | src/cppc4group.cpp | 1 | ||||
| -rw-r--r-- | src/cppc4group.hpp | 1 |
4 files changed, 21 insertions, 1 deletions
diff --git a/src/cc4group.c b/src/cc4group.c index bd0ea1a..0435c72 100644 --- a/src/cc4group.c +++ b/src/cc4group.c @@ -3089,6 +3089,20 @@ static bool cc4group_getEntryInfoForEntry(CC4Group* const this, const C4GroupEnt } } + uint32_t crc = entry->core.CRC; + if(entry->core.HasCRC != C4GroupEntryCore_ContentsFileNameCRC) + { + if(lazy) + { + crc = 0; + } + else + { + cc4group_calculateEntryCRC(this, (C4GroupEntryData*)entry); + crc = entry->core.CRC; + } + } + C4GroupHeader* headerOrParentHeader = header != NULL ? header : entry->parent != NULL ? entry->parent->header : NULL; *info = (CC4Group_EntryInfo){ @@ -3099,7 +3113,8 @@ static bool cc4group_getEntryInfoForEntry(CC4Group* const this, const C4GroupEnt .totalSize = entry->core.Size, .executable = entry->core.Executable ? true : false, .directory = entry->core.Directory ? true : false, - .official = headerOrParentHeader != NULL ? C4GroupHeader_isOfficial(headerOrParentHeader) : false + .official = headerOrParentHeader != NULL ? C4GroupHeader_isOfficial(headerOrParentHeader) : false, + .crc = crc }; return true; diff --git a/src/cc4group.h b/src/cc4group.h index d06f636..f54811b 100644 --- a/src/cc4group.h +++ b/src/cc4group.h @@ -107,6 +107,9 @@ typedef struct { // cc4group can modify official groups in the usual ways and can change groups' "official" status through the setOfficial method // users of cc4group should honor and change the "official" status how they think is appropriate (or simply ignore it) bool official; + + // the crc checksum, recalculated to C4GroupEntryCore_ContentsFileNameCRC if it is old or not calculated yet + uint32_t crc; } CC4Group_EntryInfo; diff --git a/src/cppc4group.cpp b/src/cppc4group.cpp index b76767b..7864413 100644 --- a/src/cppc4group.cpp +++ b/src/cppc4group.cpp @@ -410,6 +410,7 @@ namespace { info.executable = entryInfo.executable; info.directory = entryInfo.directory; info.official = entryInfo.official; + info.crc = entryInfo.crc; return info; } diff --git a/src/cppc4group.hpp b/src/cppc4group.hpp index e8f7ba1..2c1f6c1 100644 --- a/src/cppc4group.hpp +++ b/src/cppc4group.hpp @@ -50,6 +50,7 @@ public: bool executable; bool directory; bool official; + uint32_t crc; }; // this struct is used in custom tmp memory strategies |
