void *internal;
} writer_t;
-/* ---------------------------- file writer ------------------------------- */
-
-typedef struct
-{
- FILE*fi;
-} filewrite_t;
-static int writer_filewrite_write(writer_t*w, void* data, int len)
-{
- filewrite_t * fw= (filewrite_t*)w->internal;
- return fwrite(data, len, 1, fw->fi);
-}
-static void writer_filewrite_finish(writer_t*w)
-{
- filewrite_t *mr = (filewrite_t*)w->internal;
- fclose(mr->fi);
- free(w->internal);
- memset(w, 0, sizeof(writer_t));
-}
-writer_t*writer_init_filewriter(char*filename)
-{
- writer_t*w = malloc(sizeof(writer_t));
- FILE*fi = fopen(filename, "wb");
- filewrite_t *mr = (filewrite_t *)malloc(sizeof(filewrite_t));
- mr->fi = fi;
- memset(w, 0, sizeof(writer_t));
- w->write = writer_filewrite_write;
- w->finish = writer_filewrite_finish;
- w->internal = mr;
- return w;
-}
-
/* ---------------------------- include file filter ------------------------------- */
typedef struct _ifwrite
ifwrite_t *i= (ifwrite_t*)w->internal;
fprintf(i->fi, "\"%s\"\n", i->buf);
fprintf(i->fi, ";\n");
- fprintf(i->fi, "int crndata_len = %d;\n", i->pos);
fclose(i->fi);
printf("wrote file %s\n", i->filename);
free(w->internal);w->internal = 0;
{
struct zlibdeflate_t*z = (struct zlibdeflate_t*)writer->internal;
int ret;
-
if(!z) {
fprintf(stderr, "zlib not initialized!\n");
return 0;
{
int t;
char buf[320];
- int num = 0;
- int fullsize = 0;
- for(t=1;t<argn;t++)
- {
- if(argv[t][0]!='-')
- {
- FILE*fi=fopen(argv[t],"rb");
- if(fi) {
- fseek(fi,0,SEEK_END);
- long l=ftell(fi);
- fclose(fi);
- fullsize += l;
- num++;
- }
- }
- }
-
-
-#ifdef ZLIB
writer_t*include_writer = writer_init_includewriter("crnfiles.c");
writer_t*zwriter = writer_init_zwriter(include_writer);
-#else //LZMA
- unlink("crnfiles.dat");
- unlink("crnfiles.7z");
- unlink("crnfiles.c");
- writer_t*zwriter = writer_init_filewriter("crnfiles.dat");
-#endif
- unsigned char n1=num;
- unsigned char n2=num>>8;
- unsigned char n3=num>>16;
- unsigned char n4=num>>24;
- zwriter->write(zwriter,&n1,1);
- zwriter->write(zwriter,&n2,1);
- zwriter->write(zwriter,&n3,1);
- zwriter->write(zwriter,&n4,1);
qsort(argv+1, argn-1, sizeof(argv[0]), compare_filenames);
fread(buf,l,1,fi);
zwriter->write(zwriter,id,3);
- unsigned char b1=l;
- unsigned char b2=l>>8;
- unsigned char b3=l>>16;
- unsigned char b4=l>>24;
- zwriter->write(zwriter,&b1,1);
- zwriter->write(zwriter,&b2,1);
- zwriter->write(zwriter,&b3,1);
- zwriter->write(zwriter,&b4,1);
+ zwriter->write(zwriter,&l,4);
int sl=strlen(argv[t]);
- if(sl>255) {
- fprintf(stderr, "Error: filename %s too long\n", argv[t]);
- }
- unsigned char b = sl;
- zwriter->write(zwriter,&b,1); //write filename len
- zwriter->write(zwriter,argv[t],sl); //write filename
+ zwriter->write(zwriter,argv[t],sl+1); //write filename
zwriter->write(zwriter,buf,l); //write data
fprintf(stderr,"[%s] %s: %d bytes written.\n", id, argv[t], l);
fclose(fi);
}
}
}
- char*id_end = "END";
- zwriter->write(zwriter,id_end,3);
zwriter->finish(zwriter);
-
-#ifndef ZLIB
- if(system("do_lzma e crnfiles.dat crnfiles.7z")&0xff00) {
- perror("do_lzma");
- exit(1);
- }
- FILE*fi = fopen("crnfiles.7z", "rb");
- if(!fi) {
- perror("crnfiles.7z");
- exit(1);
- }
- writer_t*w = writer_init_includewriter("crnfiles.c");
- while(!feof(fi)) {
- char buf[4096];
- int len = fread(buf,1,4096,fi);
- if(!len)
- break;
- w->write(w, buf, len);
- }
- w->finish(w);
- fclose(fi);
- if(unlink("crnfiles.dat")) {
- perror("crnfiles.dat");
- exit(1);
- }
- if(unlink("crnfiles.7z")) {
- perror("crnfiles.7z");
- exit(1);
- }
-#endif
-
- fi = fopen("crnfiles.c", "ab+");
- fprintf(fi, "\nint crn_decompressed_size=%d;\n", fullsize);
- fclose(fi);
-
- return 0;
}