From 39f27126609c9c80dea1ab3d95240f4de6c240f9 Mon Sep 17 00:00:00 2001
From: Hans de Goede <hdegoede@redhat.com>
Date: Mon, 14 Feb 2011 12:22:07 +0100
Subject: [PATCH 2/2] Fix -Wunused-result compiler warnings
Fedora uses -Wunused-result when building packages, combined with the -Werror
from the makefile, this causes compile errors in various places because
of not properly error checking various file io actions. This patch fixes this.
---
src/CConfig.cpp | 29 ++++++++++++++++++++---------
src/CEngine.cpp | 22 ++++++++++++++++------
src/CPak.cpp | 18 +++++++++++++++---
src/CReplayData.cpp | 17 +++++++++++++++--
src/headers.h | 1 +
src/init.cpp | 18 +++++++++++++++---
src/loadSave.cpp | 36 ++++++++++++++++++++++++++----------
src/pak.cpp | 33 +++++++++++++++++++++++++++++----
8 files changed, 137 insertions(+), 37 deletions(-)
diff --git a/src/CConfig.cpp b/src/CConfig.cpp
index ef997bd..5121c7f 100644
--- a/src/CConfig.cpp
+++ b/src/CConfig.cpp
@@ -113,6 +113,7 @@ bool Config::loadJoystickConfig()
bool Config::saveJoystickConfig()
{
+ bool ret = true;
char filename[PATH_MAX];
snprintf(filename, sizeof filename, "%sjoystick.cfg", engine->userHomeDirectory);
@@ -122,15 +123,19 @@ bool Config::saveJoystickConfig()
if (!fp)
{
- debug(("WARNING: Couldn't save joystick config\n"));
+ debug(("WARNING: Couldn't save joystick config: %s\n", strerror(errno)));
return false;
}
-
- fwrite(&joystick, sizeof(Joystick), 1, fp);
-
+
+ if (fwrite(&joystick, sizeof(Joystick), 1, fp) != 1)
+ {
+ debug(("WARNING: Couldn't save joystick config: %s\n", strerror(errno)));
+ ret = false;
+ }
+
fclose(fp);
- return true;
+ return ret;
}
bool Config::loadKeyConfig()
@@ -163,6 +168,7 @@ bool Config::loadKeyConfig()
bool Config::saveKeyConfig()
{
+ bool ret = true;
char filename[PATH_MAX];
snprintf(filename, sizeof filename, "%skeyboard.cfg", engine->userHomeDirectory);
@@ -172,14 +178,19 @@ bool Config::saveKeyConfig()
if (!fp)
{
+ debug(("WARNING: Couldn't save keyboard config: %s\n", strerror(errno)));
return false;
}
-
- fwrite(&keyboard, sizeof(keyboard), 1, fp);
-
+
+ if (fwrite(&keyboard, sizeof(keyboard), 1, fp) != 1)
+ {
+ debug(("WARNING: Couldn't save keyboard config: %s\n", strerror(errno)));
+ ret = false;
+ }
+
fclose(fp);
- return true;
+ return ret;
}
void Config::restoreKeyDefaults()
diff --git a/src/CEngine.cpp b/src/CEngine.cpp
index 7017039..a0deaaf 100644
--- a/src/CEngine.cpp
+++ b/src/CEngine.cpp
@@ -330,6 +330,8 @@ since SDL currently provides no means to load music directly from memory
*/
bool Engine::unpack(const char *filename, int fileType)
{
+ bool ret = true;
+
if (fileType == PAK_DATA)
{
delete[] dataBuffer;
@@ -396,17 +398,23 @@ bool Engine::unpack(const char *filename, int fileType)
return false;
}
- fwrite(binaryBuffer, 1, pak.getUncompressedSize(), fp);
+ if (fwrite(binaryBuffer, 1, pak.getUncompressedSize(), fp) != pak.getUncompressedSize())
+ {
+ printf("Fatal Error: could not write to %s: %s", tempPath, strerror(errno));
+ ret = false;
+ }
fclose(fp);
}
- debug(("unpack() : Loaded %s (%d)\n", filename, pak.getUncompressedSize()));
+ debug(("unpack() : Loaded %s (%d), ret: %d\n", filename, pak.getUncompressedSize(), (int)ret));
- return true;
+ return ret;
}
bool Engine::loadData(const char *filename)
{
+ bool ret = true;
+
delete[] dataBuffer;
dataBuffer = NULL;
@@ -427,14 +435,16 @@ bool Engine::loadData(const char *filename)
dataBuffer = new unsigned char[fSize + 1];
- fread(dataBuffer, 1, fSize, fp);
+ if (fread(dataBuffer, 1, fSize, fp) != (size_t)fSize)
+ ret = false;
+
dataBuffer[fSize] = 0;
fclose(fp);
- debug(("loadData() : Loaded %s (%d)\n", filename, fSize));
+ debug(("loadData() : Loaded %s (%d), ret: %d\n", filename, fSize, (int)ret));
- return true;
+ return ret;
}
void Engine::reportFontFailure()
diff --git a/src/CPak.cpp b/src/CPak.cpp
index ff29cef..f630867 100644
--- a/src/CPak.cpp
+++ b/src/CPak.cpp
@@ -66,8 +66,16 @@ void Pak::setPakFile(const char *pakFilename)
}
fseek(pak, (-sizeof(Uint32)) * 2, SEEK_END);
- fread(&listPos, sizeof(Uint32), 1, pak);
- fread(&numberOfFiles, sizeof(Uint32), 1, pak);
+ if (fread(&listPos, sizeof(Uint32), 1, pak) != 1)
+ {
+ fclose(pak);
+ showPakErrorAndExit();
+ }
+ if (fread(&numberOfFiles, sizeof(Uint32), 1, pak) != 1)
+ {
+ fclose(pak);
+ showPakErrorAndExit();
+ }
debug(("Pak : File list resides at %d\n", (int)listPos));
debug(("Pak : Number of files are %d\n", (int)numberOfFiles));
@@ -130,7 +138,11 @@ bool Pak::unpack(const char *filename, unsigned char **buffer)
input = new unsigned char[(int)(currentFile->cSize * 1.01) + 12];
*buffer = new unsigned char[currentFile->fSize + 1];
- fread(input, 1, currentFile->cSize, pak);
+ if (fread(input, 1, currentFile->cSize, pak) != currentFile->cSize)
+ {
+ fclose(pak);
+ showPakErrorAndExit();
+ }
uLongf fSize = (uLongf)currentFile->fSize;
diff --git a/src/CReplayData.cpp b/src/CReplayData.cpp
index 6af8492..51c1834 100644
--- a/src/CReplayData.cpp
+++ b/src/CReplayData.cpp
@@ -22,7 +22,12 @@ ReplayData::~ReplayData()
{
save();
rewind(fp);
- fwrite(&header, sizeof(ReplayDataHeader), 1, fp);
+ int size = fwrite(&header, sizeof(ReplayDataHeader), 1, fp);
+ if (size != 1)
+ {
+ printf("Error saving replay data: %s\n", strerror(errno));
+ exit(1);
+ }
}
if (replayMode != REPLAY_MODE::NONE)
@@ -98,7 +103,15 @@ void ReplayData::setMode(REPLAY_MODE::TYPE replayMode)
swapHeaderEndians();
- fwrite(&header, sizeof(ReplayDataHeader), 1, fp);
+ int size = fwrite(&header, sizeof(ReplayDataHeader), 1, fp);
+ if (size != 1)
+ {
+ printf("Error writing replay data header: %s\n", strerror(errno));
+ replayMode = REPLAY_MODE::NONE;
+ fclose(fp);
+ fp = NULL;
+ return;
+ }
reset();
}
diff --git a/src/headers.h b/src/headers.h
index be31931..d679809 100644
--- a/src/headers.h
+++ b/src/headers.h
@@ -18,6 +18,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
+#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
diff --git a/src/init.cpp b/src/init.cpp
index 46ac381..b12cba6 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -144,7 +144,10 @@ bool loadConfig()
return true;
}
- fscanf(fp, "%10f %10d", &version, &release);
+ if (fscanf(fp, "%10f %10d", &version, &release) != 2)
+ {
+ rtn = true;
+ }
debug(("Version = %.2f - Expected %.2f\n", version, VERSION));
debug(("Release = %d - Expected %d\n", release, RELEASE));
@@ -154,7 +157,10 @@ bool loadConfig()
rtn = true;
}
- fscanf(fp, "%10d %10d %10d %10d %10d %10d %10d", &engine.fullScreen, &game.musicVol, &game.soundVol, &game.output, &game.brightness, &engine.extremeAvailable, &game.gore);
+ if (fscanf(fp, "%10d %10d %10d %10d %10d %10d %10d", &engine.fullScreen, &game.musicVol, &game.soundVol, &game.output, &game.brightness, &engine.extremeAvailable, &game.gore) != 7)
+ {
+ rtn = true;
+ }
fclose(fp);
@@ -223,7 +229,13 @@ int initMedalService(void *data)
return 0;
}
- fscanf(fp, "%19s", privateKey);
+ if (fscanf(fp, "%19s", privateKey) != 1)
+ {
+ graphics.showMedalMessage(-1, "Medal Key file corrupt - Online functions disabled");
+ SDL_mutexV(medalServer.lock);
+ fclose(fp);
+ return 0;
+ }
fclose(fp);
diff --git a/src/loadSave.cpp b/src/loadSave.cpp
index 73f5384..9489f5e 100644
--- a/src/loadSave.cpp
+++ b/src/loadSave.cpp
@@ -122,8 +122,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, "%*c %[^\"] %*c %*c %[^\"] %*c %d %d", string[0], string[1], ¶m[0], ¶m[1]);
data = new Data();
@@ -160,8 +163,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 +175,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 +189,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));
@@ -346,7 +358,11 @@ void saveGame()
graphics.showErrorAndExit("File write error whilst saving game", "");
}
- fwrite(&game, sizeof(Game), 1, fp);
+ if (fwrite(&game, sizeof(Game), 1, fp) != 1)
+ {
+ fclose(fp);
+ graphics.showErrorAndExit("File write error whilst saving game", strerror(errno));
+ }
fclose(fp);
diff --git a/src/pak.cpp b/src/pak.cpp
index d70fe57..226afe4 100644
--- a/src/pak.cpp
+++ b/src/pak.cpp
@@ -154,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++;
@@ -183,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++)
{
@@ -211,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);
--
1.7.3.2