summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cc4group.c17
-rw-r--r--src/cc4group.h3
-rw-r--r--src/cppc4group.cpp1
-rw-r--r--src/cppc4group.hpp1
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