summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeert Uytterhoeven <geert@linux-m68k.org>2010-06-16 10:34:02 +0200
committerGeert Uytterhoeven <geert@linux-m68k.org>2010-06-16 10:38:06 +0200
commit8494133bbade430b82d8fba6038fbbef11fbc83e (patch)
treeb1c3ff2d808497f33c0bc2856721066485538dae
parent2b0710f20f0733ce037398900e179bf5fa18a525 (diff)
downloadamiga-nvram-8494133bbade430b82d8fba6038fbbef11fbc83e.tar.gz
Close NVRAM file on read/write failure
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
-rw-r--r--amiga-nvram.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/amiga-nvram.c b/amiga-nvram.c
index e71612a..e5a4404 100644
--- a/amiga-nvram.c
+++ b/amiga-nvram.c
@@ -63,29 +63,32 @@ static int nvram_read(void)
file = open(opt_nvram, O_RDONLY);
if (file < 0) {
perror("Cannot open NVRAM for reading");
- return file;
+ return -1;
}
n = read(file, &nvram, sizeof(nvram));
if (n < 0) {
perror("Cannot read NVRAM");
- return n;
+ goto failed;
}
if (n < sizeof(nvram.bytes)) {
fprintf(stderr, "Could read only %zu NVRAM bytes\n", n);
- return -1;
+ goto failed;
}
if (n < sizeof(nvram)) {
fprintf(stderr,
"Warning: Could not read checksum, assuming zero\n");
nvram.checksum = 0;
- return 0;
}
close(file);
memcpy(&backup, &nvram, sizeof(nvram));
return 0;
+
+failed:
+ close(file);
+ return -1;
}
@@ -97,21 +100,25 @@ static int nvram_write(void)
file = open(opt_nvram, O_WRONLY);
if (file < 0) {
perror("Cannot open NVRAM for writing");
- return file;
+ return -1;
}
n = write(file, &nvram, sizeof(nvram));
if (n < 0) {
perror("Cannot write NVRAM");
- return n;
+ goto failed;
}
if (n < sizeof(nvram)) {
fprintf(stderr, "Could write only %zu NVRAM bytes\n", n);
- return -1;
+ goto failed;
}
close(file);
return 0;
+
+failed:
+ close(file);
+ return -1;
}