MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / NewHogFile

Function NewHogFile

legacy/hogmaker/hog.cpp:144–253  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

142#define HOGMAKER_COPY 5
143
144int NewHogFile(const char *hogname, int nfiles, const char **filenames) {
145 unsigned i;
146 int table_pos;
147 FILE *hog_fp;
148 tHogHeader header;
149 tHogFileEntry *table;
150 char ext[_MAX_EXT];
151
152 // allocate file table
153 if (nfiles <= 0)
154 return HOGMAKER_ERROR;
155
156 table = new tHogFileEntry[nfiles];
157 if (!table)
158 return HOGMAKER_MEMORY;
159
160 // create new file
161 hog_fp = fopen(hogname, "wb");
162 if (hog_fp == NULL) {
163 delete[] table;
164 return HOGMAKER_OUTFILE;
165 }
166
167 // write the tag
168 if (!fwrite(HOG_TAG_STR, strlen(HOG_TAG_STR), 1, hog_fp)) {
169 delete[] table;
170 fclose(hog_fp);
171 return HOGMAKER_OUTFILE;
172 }
173
174 // write number of files
175 uint8_t filler = 0xff;
176 header.nfiles = (unsigned)nfiles;
177 header.file_data_offset = strlen(HOG_TAG_STR) + HOG_HDR_SIZE + (sizeof(tHogFileEntry) * header.nfiles);
178
179 if (!fwrite(&header.nfiles, sizeof(header.nfiles), 1, hog_fp)) {
180 delete[] table;
181 fclose(hog_fp);
182 return HOGMAKER_OUTFILE;
183 }
184 if (!fwrite(&header.file_data_offset, sizeof(header.file_data_offset), 1, hog_fp)) {
185 delete[] table;
186 fclose(hog_fp);
187 return HOGMAKER_OUTFILE;
188 }
189 if (!fwrite(&filler, sizeof(uint8_t), HOG_HDR_SIZE - sizeof(tHogHeader), hog_fp)) {
190 delete[] table;
191 fclose(hog_fp);
192 return HOGMAKER_OUTFILE;
193 }
194
195 // save file position of index table and write out dummy table
196 table_pos = strlen(HOG_TAG_STR) + HOG_HDR_SIZE;
197
198 memset(&table[0], 0, sizeof(table[0]));
199
200 for (i = 0; i < header.nfiles; i++) {
201 if (!WRITE_FILE_ENTRY(hog_fp, &table[0])) {

Callers

nothing calls this directly

Calls 3

WRITE_FILE_ENTRYFunction · 0.85
_splitpathFunction · 0.85
CopyFileFunction · 0.85

Tested by

no test coverage detected