From 9d27aba79e48cdab9d5de3d59f593db29c6a0f1c Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Tue, 1 Jul 2025 14:30:22 -0500 Subject: [PATCH] Remove poke() and friends, just inline the one caller using memcpy(). --- lib/lib.c | 25 ------------------------- lib/lib.h | 3 --- toys/net/ifconfig.c | 9 +++++++-- toys/other/devmem.c | 2 +- 4 files changed, 8 insertions(+), 31 deletions(-) diff --git a/lib/lib.c b/lib/lib.c index c3182dd7..1183435b 100644 --- a/lib/lib.c +++ b/lib/lib.c @@ -714,31 +714,6 @@ long long peek(void *ptr, unsigned size) return (IS_BIG_ENDIAN ? peek_be : peek_le)(ptr, size); } -void poke_le(void *ptr, long long val, unsigned size) -{ - char *c = ptr; - - while (size--) { - *c++ = val&255; - val >>= 8; - } -} - -void poke_be(void *ptr, long long val, unsigned size) -{ - char *c = ptr + size; - - while (size--) { - *--c = val&255; - val >>=8; - } -} - -void poke(void *ptr, long long val, unsigned size) -{ - (IS_BIG_ENDIAN ? poke_be : poke_le)(ptr, val, size); -} - // Iterate through an array of files, opening each one and calling a function // on that filehandle and name. The special filename "-" means stdin if // flags is O_RDONLY, stdout otherwise. An empty argument list calls diff --git a/lib/lib.h b/lib/lib.h index e353921b..0fc9cbe4 100644 --- a/lib/lib.h +++ b/lib/lib.h @@ -213,9 +213,6 @@ int highest_bit(unsigned long l); long long peek_le(void *ptr, unsigned size); long long peek_be(void *ptr, unsigned size); long long peek(void *ptr, unsigned size); -void poke_le(void *ptr, long long val, unsigned size); -void poke_be(void *ptr, long long val, unsigned size); -void poke(void *ptr, long long val, unsigned size); struct string_list *find_in_path(char *path, char *filename); long long estrtol(char *str, char **end, int base); long long xstrtol(char *str, char **end, int base); diff --git a/toys/net/ifconfig.c b/toys/net/ifconfig.c index 632d15dd..e2155082 100644 --- a/toys/net/ifconfig.c +++ b/toys/net/ifconfig.c @@ -508,12 +508,17 @@ void ifconfig_main(void) // Assign value to ifre field and call ioctl? (via IFREQ_OFFSZ.) if (on < 0) { - void *dest = ((on = -on)>>16)+(char *)&ifre; + void *dest = ((on = -on)>>16)+(char *)&ifre, *src; // If we're about to set mem_start/io_addr/irq, get other 2 first if (off == SIOCSIFMAP) xioctl(TT.sockfd, SIOCGIFMAP, &ifre); if (off == SIOCSIFNAME) xstrncpy(dest, *argv, on&0xffff); - else poke(dest, strtoul(*argv, 0, 0), on&15); + else { + long long ll = strtoul(*argv, 0, 0); + + src = ((char *)&ll)+IS_BIG_ENDIAN*(sizeof(long long)-(on&15)); + memcpy(dest, src, on&15); + } xioctl(TT.sockfd, off, &ifre); break; } else { diff --git a/toys/other/devmem.c b/toys/other/devmem.c index 9c579d0a..121b64e1 100644 --- a/toys/other/devmem.c +++ b/toys/other/devmem.c @@ -74,7 +74,7 @@ void devmem_main(void) } } else p = (void *)addr; - // Not using peek()/poke() because registers care about size of read/write. + // Not using peek()/memcpy() because registers care about size of read/write. if (writing) for (ii = 2; ii