fixed bug in jpeg2000 decoding
[swftools.git] / installer / mkarchive.c
index bec26cb..7dab4e0 100644 (file)
@@ -1,3 +1,23 @@
+/* mkarchive.c
+
+   Part of the rfx installer (Main program).
+   
+   Copyright (c) 2004-2008 Matthias Kramm <kramm@quiss.org> 
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <unistd.h>
@@ -36,6 +56,10 @@ writer_t*writer_init_filewriter(char*filename)
 {
     writer_t*w = malloc(sizeof(writer_t));
     FILE*fi = fopen(filename, "wb");
+    if(!fi) {
+       perror(filename);
+       return 0;
+    }
     filewrite_t *mr = (filewrite_t *)malloc(sizeof(filewrite_t));
     mr->fi = fi;
     memset(w, 0, sizeof(writer_t));
@@ -260,6 +284,7 @@ int main (int argn, char*argv[])
 {
     int t;
     char buf[320];
+    int num = 0;
 
     int fullsize = 0;
     for(t=1;t<argn;t++)
@@ -267,10 +292,13 @@ int main (int argn, char*argv[])
        if(argv[t][0]!='-')
        {
            FILE*fi=fopen(argv[t],"rb");
-           fseek(fi,0,SEEK_END);
-           long l=ftell(fi);
-           fclose(fi);
-           fullsize += l;
+           if(fi) {
+               fseek(fi,0,SEEK_END);
+               long l=ftell(fi);
+               fclose(fi);
+               fullsize += l;
+               num++;
+           }
        }
     }
 
@@ -284,6 +312,14 @@ int main (int argn, char*argv[])
     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);
 
@@ -309,6 +345,7 @@ int main (int argn, char*argv[])
                            else if(strstr(argv[t],".jpeg")) id="PIC";
                            else if(strstr(argv[t],".jpg")) id="PIC";
                            else if(strstr(argv[t],".tif")) id="PIC";
+                           else if(strstr(argv[t],".ico")) id="PIC";
                            else if(strstr(argv[t],".c")) id="SRC";
                            else if(strstr(argv[t],".cc")) id="SRC";
                            else if(strstr(argv[t],".cpp")) id="SRC";
@@ -322,6 +359,7 @@ int main (int argn, char*argv[])
                            else if(strstr(argv[t],".afm")) id="FON";
                            else if(strstr(argv[t],".1")) id="DOC";
                            else if(strstr(argv[t],".doc")) id="DOC";
+                           else if(strstr(argv[t],".txt")) id="TXT";
                            else if(strstr(argv[t],".hlp")) id="DOC";
                            else if(strstr(argv[t],".dll")) id="DLL";