From 39f27126609c9c80dea1ab3d95240f4de6c240f9 Mon Sep 17 00:00:00 2001 From: Hans de Goede 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 #include #include #include 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