MCPcopy Create free account
hub / github.com/ZDoom/Raze / AppendCentralDirectory

Function AppendCentralDirectory

source/common/utility/writezip.cpp:139–183  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

137//==========================================================================
138
139int AppendCentralDirectory(FileWriter *zip_file, const FCompressedBuffer &content, std::pair<uint16_t, uint16_t> &dostime, int position)
140{
141 FZipCentralDirectoryInfo dir;
142
143 int flags = 0;
144 int method = content.mMethod;
145 if (method >= FileSys::METHOD_IMPLODE_MIN && method <= FileSys::METHOD_IMPLODE_MAX)
146 {
147 flags = method - FileSys::METHOD_IMPLODE_MIN;
148 method = FileSys::METHOD_IMPLODE;
149 }
150 else if (method == FileSys::METHOD_DEFLATE)
151 {
152 flags = 2;
153 }
154 else if (method >= 1337)
155 return -1;
156
157 dir.Magic = ZIP_CENTRALFILE;
158 dir.VersionMadeBy[0] = 20;
159 dir.VersionMadeBy[1] = 0;
160 dir.VersionToExtract[0] = 20;
161 dir.VersionToExtract[1] = 0;
162 dir.Flags = LittleShort((uint16_t)flags);
163 dir.Method = LittleShort((uint16_t)method);
164 dir.ModTime = LittleShort(dostime.first);
165 dir.ModDate = LittleShort(dostime.second);
166 dir.CRC32 = content.mCRC32;
167 dir.CompressedSize32 = LittleLong((unsigned)content.mCompressedSize);
168 dir.UncompressedSize32 = LittleLong((unsigned)content.mSize);
169 dir.NameLength = LittleShort((unsigned short)strlen(content.filename));
170 dir.ExtraLength = 0;
171 dir.CommentLength = 0;
172 dir.StartingDiskNumber = 0;
173 dir.InternalAttributes = 0;
174 dir.ExternalAttributes = 0;
175 dir.LocalHeaderOffset32 = LittleLong((unsigned)position);
176
177 if (zip_file->Write(&dir, sizeof(dir)) != sizeof(dir) ||
178 zip_file->Write(content.filename, strlen(content.filename)) != strlen(content.filename))
179 {
180 return -1;
181 }
182 return 0;
183}
184
185bool WriteZip(const char* filename, const FCompressedBuffer* content, size_t contentcount)
186{

Callers 1

WriteZipFunction · 0.85

Calls 3

LittleShortFunction · 0.70
LittleLongFunction · 0.70
WriteMethod · 0.45

Tested by

no test coverage detected