]> git.mxchange.org Git - quix0rs-blobwars.git/blobdiff - src/pak.cpp
Prevent a segmentation fault when using the -map option without specifying a map.
[quix0rs-blobwars.git] / src / pak.cpp
index 257908a702d8b45b3028b4d1561848b56fb964d6..16beab2b1ee0c05b047be699b780c0f999524b33 100644 (file)
@@ -30,15 +30,8 @@ FileData *fileData = NULL;
 
 void cleanup()
 {
-       if (buffer != NULL)
-       {
-               delete[] buffer;
-       }
-       
-       if (output != NULL)
-       {
-               delete[] output;
-       }
+       delete[] buffer;
+       delete[] output;
 }
 
 void countFiles(const char *dirName)
@@ -126,7 +119,7 @@ void recurseDirectory(const char *dirName)
                        {
                                printf("Couldn't open %s for reading!\n", filename);
                                closedir(dirp);
-                               gzclose(pak);
+                               fclose(pak);
                                exit(1);
                        }
                        
@@ -136,20 +129,10 @@ void recurseDirectory(const char *dirName)
                        
                        fclose(infile);
                        
-                       if (buffer != NULL)
-                       {
-                               delete[] buffer;
-                               buffer = NULL;
-                       }
-                       
+                       delete[] buffer;
                        buffer = new unsigned char[filesize];
                        
-                       if (output != NULL)
-                       {
-                               delete[] output;
-                               output = NULL;
-                       }
-                       
+                       delete[] output;
                        output = new unsigned char[(int)(filesize * 1.01) + 12];
                        
                        fp = gzopen(filename, "rb");
@@ -158,7 +141,7 @@ void recurseDirectory(const char *dirName)
                        {
                                printf("Couldn't open %s for reading!\n", filename);
                                closedir(dirp);
-                               gzclose(pak);
+                               fclose(pak);
                                exit(1);
                        }
                        else
@@ -171,7 +154,12 @@ void recurseDirectory(const char *dirName)
                                
                                fileData[files].set(filename, fSize, cSize, ftell(pak));
 
-                               fwrite(output, 1, cSize, pak);
+                               if (fwrite(output, 1, cSize, pak) != cSize)
+                               {
+                                       fprintf(stderr, "Error writing to pakfile: %s\n", strerror(errno));
+                                       fclose(pak);
+                                       exit(1);
+                               }
 
                                files++;
                                
@@ -200,6 +188,11 @@ int main(int argc, char *argv[])
        }
 
        pak = fopen(argv[argc - 1], "wb");
+       if (!pak)
+       {
+               fprintf(stderr, "Error opening %s: %s\n", argv[argc - 1], strerror(errno));
+               return 1;
+       }
        
        for (int i = 1 ; i < (argc - 1) ; i++)
        {
@@ -228,13 +221,28 @@ int main(int argc, char *argv[])
                        break;
                }
 
-               fwrite(&fileData[i], sizeof(FileData), 1, pak);
+               if (fwrite(&fileData[i], sizeof(FileData), 1, pak) != 1)
+               {
+                       fprintf(stderr, "Error writing to %s: %s\n", argv[argc - 1], strerror(errno));
+                       fclose(pak);
+                       return 1;
+               }
        }
        
        unsigned int numberOfFiles = totalFiles;
 
-       fwrite(&pos, sizeof(unsigned int), 1, pak);
-       fwrite(&numberOfFiles, sizeof(unsigned int), 1, pak);
+       if (fwrite(&pos, sizeof(unsigned int), 1, pak) != 1)
+       {
+               fprintf(stderr, "Error writing to %s: %s\n", argv[argc - 1], strerror(errno));
+               fclose(pak);
+               return 1;
+       }
+       if (fwrite(&numberOfFiles, sizeof(unsigned int), 1, pak) != 1)
+       {
+               fprintf(stderr, "Error writing to %s: %s\n", argv[argc - 1], strerror(errno));
+               fclose(pak);
+               return 1;
+       }
 
        fclose(pak);