]> git.mxchange.org Git - quix0rs-blobwars.git/blobdiff - src/loadSave.cpp
Added .gitignore to ignore certain files + fixed access rights on Makefile* as
[quix0rs-blobwars.git] / src / loadSave.cpp
index 14cbd7f129f3933b8c3c22868a67a2c05d77ee09..3dfc2e18e8b8426d1dd31ea02bf377d67c87722d 100644 (file)
@@ -1,5 +1,6 @@
 /*
-Copyright (C) 2004 Parallel Realities
+Copyright (C) 2004-2011 Parallel Realities
+Copyright (C) 2011-2015 Perpendicular Dimensions
 
 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License
@@ -106,7 +107,7 @@ bool loadGame(int slot)
        if (fread(&game, sizeof(Game), 1, fp) != 1)
        {
                fclose(fp);
-               graphics.showErrorAndExit("The save data loaded was not in the format expected", "");
+               return graphics.showErrorAndExit("The save data loaded was not in the format expected", ""), false;
        }
        
        fclose(fp);
@@ -122,8 +123,11 @@ bool loadGame(int slot)
        
        while (true)
        {
-               fgets(line, 1024, fp);
-               
+               if (!fgets(line, 1024, fp)) {
+                       fclose(fp);
+                       return graphics.showErrorAndExit("Unexpected end of file reading save data", ""), false;
+               }
+
                sscanf(line, "%*c %[^\"] %*c %*c %[^\"] %*c %d %d", string[0], string[1], &param[0], &param[1]);
                
                data = new Data();
@@ -160,8 +164,11 @@ bool loadGame(int slot)
        
        while (true)
        {
-               fgets(line, 1024, fp);
-               
+               if (!fgets(line, 1024, fp)) {
+                       fclose(fp);
+                       graphics.showErrorAndExit("Unexpected end of file reading save data", "");
+               }
+
                sscanf(line, "%[^\n\r]", string[0]);
                strlcpy(stageName, string[0], sizeof stageName);
                
@@ -169,8 +176,11 @@ bool loadGame(int slot)
                {
                        break;
                }
-               
-               fgets(line, 1024, fp);
+
+               if (!fgets(line, 1024, fp)) {
+                       fclose(fp);
+                       graphics.showErrorAndExit("Unexpected end of file reading save data", "");
+               }
                sscanf(line, "%d", &numberOfLines);
                
                debug(("Read %s with %d lines.\n", stageName, numberOfLines));
@@ -180,9 +190,12 @@ bool loadGame(int slot)
                for (int i = 0 ; i < numberOfLines ; i++)
                {
                        persistData = new PersistData();
-                       
-                       fgets(line, 1024, fp);
-                       
+
+                       if (!fgets(line, 1024, fp)) {
+                               fclose(fp);
+                               graphics.showErrorAndExit("Unexpected end of file reading save data", "");
+                       }
+
                        strlcpy(persistData->data, line, sizeof persistData->data);
                        
                        //debug(("Read %d: %s", i, persistData->data));
@@ -343,10 +356,14 @@ void saveGame()
        
        if (!fp)
        {
-               graphics.showErrorAndExit("File write error whilst saving game", "");
+               return graphics.showErrorAndExit("File write error whilst saving game", "");
        }
 
-       fwrite(&game, sizeof(Game), 1, fp);
+       if (fwrite(&game, sizeof(Game), 1, fp) != 1)
+       {
+               fclose(fp);
+               return graphics.showErrorAndExit("File write error whilst saving game", strerror(errno));
+       }
        
        fclose(fp);
        
@@ -356,7 +373,7 @@ void saveGame()
        
        if (!fp)
        {
-               graphics.showErrorAndExit("File write error whilst saving game", "");
+               return graphics.showErrorAndExit("File write error whilst saving game", "");
        }
        
        createPersistantMapData();