/*
-Copyright (C) 2004-2010 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
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);
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], ¶m[0], ¶m[1]);
data = new Data();
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);
{
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));
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));
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);
if (!fp)
{
- graphics.showErrorAndExit("File write error whilst saving game", "");
+ return graphics.showErrorAndExit("File write error whilst saving game", "");
}
createPersistantMapData();