diff options
| author | Leah Rowe <leah@libreboot.org> | 2026-03-03 18:47:14 +0000 |
|---|---|---|
| committer | Leah Rowe <leah@libreboot.org> | 2026-03-03 18:47:14 +0000 |
| commit | 634f4a685d3eca54b5934bb6004500e8707c4baa (patch) | |
| tree | dd8ef498f7da4055d05015135385a8e711621822 /util/nvmutil | |
| parent | 3af94efc16562dc1f2e359064f6cb1eb60f45c80 (diff) | |
util/nvmutil: always exit non-zero on err
the way err works here now is very different than
the bsd one. here, we ALWAYS exit with EXIT_FAILURE,
and we call set_err with, as argument, the first
argument given to err.
this then sets errno, but the exit value is always
consistent.
that's what happens when i control err(). i make it
even better. the original bsd one is too conservative.
Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'util/nvmutil')
| -rw-r--r-- | util/nvmutil/nvmutil.c | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/util/nvmutil/nvmutil.c b/util/nvmutil/nvmutil.c index 07f3dc03..bc95e05b 100644 --- a/util/nvmutil/nvmutil.c +++ b/util/nvmutil/nvmutil.c @@ -47,7 +47,7 @@ static void usage(void); static void err_if(int); static void err(int, const char *, ...); static const char *getnvmprogname(void); -static int set_err(int); +static void set_err(int); #define NVM_CHECKSUM 0xBABA #define NVM_CHECKSUM_WORD 0x3F @@ -152,7 +152,7 @@ set_cmd(int argc, char *argv[]) cmd = ops[i].cmd; break; } - err(set_err(EINVAL), "Too few args on command '%s'", + err(EINVAL, "Too few args on command '%s'", ops[i].str); } } @@ -172,11 +172,11 @@ check_cmd_args(int argc, char *argv[]) } else if ((cmd != NULL) && (argc > 3)) { /* user-supplied partnum */ part = argv[3][0] - '0'; if (!((part == 0 || part == 1) && argv[3][1] == '\0')) - err(set_err(EINVAL), "Bad partnum: %s", argv[3]); + err(EINVAL, "Bad partnum: %s", argv[3]); } if (cmd == NULL) - err(set_err(EINVAL), "Bad command"); + err(EINVAL, "Bad command"); } static void @@ -210,7 +210,7 @@ open_files(void) partsize = st.st_size >> 1; break; default: - err(set_err(ECANCELED), "Invalid file size (not 8/16/128KiB)"); + err(ECANCELED, "Invalid file size (not 8/16/128KiB)"); break; } } @@ -220,18 +220,18 @@ checkdir(const char *path) { struct stat st; if (stat(path, &st) == -1) - err(set_err(ECANCELED), "%s", path); + err(ECANCELED, "%s", path); if (S_ISDIR(st.st_mode)) - err(set_err(EISDIR), "%s", path); + err(EISDIR, "%s", path); } static void xopen(int *f, const char *l, int p, struct stat *st) { if ((*f = open(l, p)) == -1) - err(set_err(ECANCELED), "%s", l); + err(ECANCELED, "%s", l); if (fstat(*f, st) == -1) - err(set_err(ECANCELED), "%s", l); + err(ECANCELED, "%s", l); } static void @@ -262,7 +262,7 @@ read_gbe_part(int p, int invert) { if (pread(fd, buf + (SIZE_4KB * (p ^ invert)), SIZE_4KB, p * partsize) != SIZE_4KB) - err(set_err(ECANCELED), + err(ECANCELED, "Can't read %d b from '%s' p%d", SIZE_4KB, fname, p); swap(p ^ invert); /* handle big-endian host CPU */ } @@ -289,15 +289,15 @@ parse_mac_string(void) uint64_t total = 0; if (strnlen(mac, 20) != 17) - err(set_err(EINVAL), "Invalid MAC address string length"); + err(EINVAL, "Invalid MAC address string length"); for (mac_pos = 0; mac_pos < 16; mac_pos += 3) set_mac_byte(mac_pos, &total); if (total == 0) - err(set_err(EINVAL), "Invalid MAC (all-zero MAC address)"); + err(EINVAL, "Invalid MAC (all-zero MAC address)"); if (macbuf[0] & 1) - err(set_err(EINVAL), "Invalid MAC (multicast bit set)"); + err(EINVAL, "Invalid MAC (multicast bit set)"); } static void @@ -321,7 +321,7 @@ check_mac_separator(int mac_pos) if ((separator = mac[mac_pos + 2]) == ':') return; - err(set_err(EINVAL), "Invalid MAC address separator '%c'", separator); + err(EINVAL, "Invalid MAC address separator '%c'", separator); } static void @@ -330,7 +330,7 @@ set_mac_nib(int mac_pos, int nib, uint8_t *h) int byte = mac_pos / 3; if ((*h = hextonum(mac[mac_pos + nib])) > 15) - err(set_err(EINVAL), "Invalid character '%c'", + err(EINVAL, "Invalid character '%c'", mac[mac_pos + nib]); /* If random, ensure that local/unicast bits are set */ @@ -493,7 +493,7 @@ good_checksum(int partnum) fprintf(stderr, "WARNING: BAD checksum in part %d\n", partnum ^ invert); - (void) set_err(ECANCELED); + set_err(ECANCELED); return 0; } @@ -516,9 +516,9 @@ static void check_bound(int c, int p) { if ((p != 0) && (p != 1)) - err(set_err(EINVAL), "check_bound: invalid partnum %d", p); + err(EINVAL, "check_bound: invalid partnum %d", p); if ((c < 0) || (c >= (SIZE_4KB >> 1))) - err(set_err(EINVAL), "check_bound: out of bounds %d", c); + err(EINVAL, "check_bound: out of bounds %d", c); } static void @@ -542,7 +542,7 @@ write_gbe_part(int p) if (pwrite(fd, buf + (SIZE_4KB * p), SIZE_4KB, p * partsize) != SIZE_4KB) { - err(set_err(ECANCELED), + err(ECANCELED, "Can't write %d b to '%s' p%d", SIZE_4KB, fname, p); } } @@ -589,18 +589,18 @@ usage(void) "\t%s FILE brick 0|1\n" "\t%s FILE setchecksum 0|1\n", util, util, util, util, util, util, util); - err(set_err(ECANCELED), "Too few arguments"); + err(ECANCELED, "Too few arguments"); } static void err_if(int x) { if (x) - err(set_err(ECANCELED), "%s", fname); + err(ECANCELED, "%s", fname); } static void -err(int rval, const char *msg, ...) +err(int errval, const char *msg, ...) { va_list args; @@ -610,11 +610,11 @@ err(int rval, const char *msg, ...) vfprintf(stderr, msg, args); va_end(args); - (void) set_err(ECANCELED); + set_err(errval); fprintf(stderr, ": %s", strerror(errno)); fprintf(stderr, "\n"); - exit(rval); + exit(EXIT_FAILURE); } static const char * @@ -631,9 +631,8 @@ getnvmprogname(void) return argv0; } -static int +static void set_err(int x) { errno = errno ? errno : x; - return EXIT_FAILURE; } |
