Module Name: src Committed By: wiz Date: Wed Jan 5 15:48:01 UTC 2011
Modified Files: src/games/tetris: scores.c Log Message: Fix fd leak in error cases. Found by cppcheck. To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.20 src/games/tetris/scores.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/games/tetris/scores.c diff -u src/games/tetris/scores.c:1.19 src/games/tetris/scores.c:1.20 --- src/games/tetris/scores.c:1.19 Wed Feb 3 15:34:39 2010 +++ src/games/tetris/scores.c Wed Jan 5 15:48:00 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: scores.c,v 1.19 2010/02/03 15:34:39 roy Exp $ */ +/* $NetBSD: scores.c,v 1.20 2011/01/05 15:48:00 wiz Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -458,8 +458,7 @@ result = read(sd, &header, sizeof(header)); if (result < 0) { warn("Score file %s: read", _PATH_SCOREFILE); - close(sd); - goto fail; + goto sdfail; } if (result != 0 && (size_t)result != sizeof(header)) { warnx("Score file %s: read: unexpected EOF", _PATH_SCOREFILE); @@ -470,13 +469,12 @@ if (lseek(sd, 0, SEEK_SET) < 0) { /* ? */ warn("Score file %s: lseek", _PATH_SCOREFILE); - goto fail; + goto sdfail; } if (ftruncate(sd, 0) == 0) { result = 0; } else { - close(sd); - goto fail; + goto sdfail; } } @@ -501,17 +499,17 @@ } else { warnx("Score file %s: Unknown endian tag %u", _PATH_SCOREFILE, header.hsh_endiantag); - goto fail; + goto sdfail; } if (header.hsh_version != HSH_VERSION) { warnx("Score file %s: Unknown version code %u", _PATH_SCOREFILE, header.hsh_version); - goto fail; + goto sdfail; } if (readscores(sd, doflip) < 0) { - goto fail; + goto sdfail; } } else { /* @@ -521,7 +519,7 @@ result = scorefile_probe(sd); if (lseek(sd, 0, SEEK_SET) < 0) { warn("Score file %s: lseek", _PATH_SCOREFILE); - goto fail; + goto sdfail; } switch (result) { case SCOREFILE_CURRENT: @@ -543,10 +541,10 @@ result = readscores50(sd, 1 /* do flip */); break; default: - goto fail; + goto sdfail; } if (result < 0) { - goto fail; + goto sdfail; } } } @@ -559,6 +557,8 @@ return; +sdfail: + close(sd); fail: if (fdp != NULL) { *fdp = -1;