cppcheck/htdocs/archive/createzip.c

72 lines
2.1 KiB
C

#include "webarchive.h"
#include "miniz.c"
#include <stdio.h>
#include <stdlib.h>
#define ALL_ZIP "all.zip"
int main()
{
mz_zip_archive zip_archive = {0};
FILE *f = fopen("data.txt", "rt");
if (f == NULL) {
generatepage("failed to load data");
return EXIT_FAILURE;
}
int first = 1;
char line[MAX_LINE_LEN] = {0};
while (fgets(line,sizeof(line)-2,f)) {
char data[MAX_LINE_LEN] = {0};
unencode(line,data);
const char *xmldata = strstr(data, "&data=");
xmldata = xmldata ? (xmldata + 6) : "";
char name[MAX_NAME_LEN+20];
if (strstr(xmldata, "<rule>"))
sprintf(name, "archive/%s.rule", getname(line));
else
sprintf(name, "archive/%s.cfg", getname(line));
if (first == 1) {
first = 0;
if (!mz_zip_writer_init_file(&zip_archive, ALL_ZIP, 0)) {
generatepage("internal error: init_file failed");
return EXIT_FAILURE;
}
if (!mz_zip_writer_add_mem_ex(&zip_archive, name, xmldata, strlen(xmldata), NULL, 0U, MZ_BEST_COMPRESSION, 0, 0)) {
generatepage("internal error: add_mem_ex failed");
return EXIT_FAILURE;
}
if (!mz_zip_writer_finalize_archive(&zip_archive)) {
generatepage("internal error: finalize_archive failed");
return EXIT_FAILURE;
}
if (!mz_zip_writer_end(&zip_archive)) {
generatepage("internal error: writer_end failed");
return EXIT_FAILURE;
}
} else if (!mz_zip_add_mem_to_archive_file_in_place(ALL_ZIP, name, xmldata, strlen(xmldata), NULL, 0U, MZ_BEST_COMPRESSION)) {
generatepage("failed to add data");
return EXIT_FAILURE;
}
}
fclose(f);
f = fopen("all.zip","rb");
if (!f) {
generatepage("internal error: failed to load zip");
return EXIT_FAILURE;
}
puts("Content-type: application/zip\r\n\r");
int c;
while ((c = fgetc(f)) != EOF)
putc(c,stdout);
return EXIT_SUCCESS;
}