diff options
author | Geert Uytterhoeven <geert@linux-m68k.org> | 2010-06-16 10:34:02 +0200 |
---|---|---|
committer | Geert Uytterhoeven <geert@linux-m68k.org> | 2010-06-16 10:38:06 +0200 |
commit | 8494133bbade430b82d8fba6038fbbef11fbc83e (patch) | |
tree | b1c3ff2d808497f33c0bc2856721066485538dae | |
parent | 2b0710f20f0733ce037398900e179bf5fa18a525 (diff) | |
download | amiga-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.c | 21 |
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; } |