From a03007c188526140195e3640808afd6a093258bb Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 10 Oct 2023 12:12:18 -0700 Subject: [PATCH] devmem: unify error reporting. --- toys/other/devmem.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/toys/other/devmem.c b/toys/other/devmem.c index ce158c2c..43ddacd2 100644 --- a/toys/other/devmem.c +++ b/toys/other/devmem.c @@ -17,13 +17,16 @@ config DEVMEM #define FOR_devmem #include "toys.h" -unsigned long atolu(char *str) +unsigned long xatolu(char *str, int bytes) { char *end = str; unsigned long lu; errno = 0; lu = strtoul(str, &end, 0); + // Report out of range values as errors rather than truncating. + if (errno == ERANGE || lu > (~0UL)>>(sizeof(long)-bytes)*8) + error_exit("%s>%d bytes", str, bytes); if (*end || errno) perror_exit("bad %s", str); return lu; @@ -32,7 +35,8 @@ unsigned long atolu(char *str) void devmem_main(void) { int writing = toys.optc == 3, page_size = sysconf(_SC_PAGESIZE), bytes = 4,fd; - unsigned long data = 0, map_off, map_len, addr = atolu(*toys.optargs); + unsigned long data = 0, map_off, map_len, + addr = xatolu(*toys.optargs, sizeof(long)); char *sizes = sizeof(long)==8 ? "1248" : "124"; void *map, *p; @@ -45,9 +49,8 @@ void devmem_main(void) bytes = 1<(~0UL)>>(sizeof(long)-bytes)*8) - error_exit("%lx>%d bytes", data, bytes); + // DATA? + if (writing) data = xatolu(toys.optargs[2], bytes); // Map in just enough. if (CFG_TOYBOX_FORK) { -- 2.39.2