| 142 | #define HOGMAKER_COPY 5 |
| 143 | |
| 144 | int 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])) { |
nothing calls this directly
no test coverage detected