Merge branch '2023-09-28-assorted-minor-fixes'
[platform/kernel/u-boot.git] / cmd / binop.c
index 787f7a2..592e914 100644 (file)
@@ -2,6 +2,8 @@
 
 #include <common.h>
 #include <command.h>
+#include <env.h>
+#include <hexdump.h>
 #include <malloc.h>
 #include <mapmem.h>
 #include <linux/ctype.h>
@@ -26,43 +28,20 @@ void write_to_env_var(char *varname, u8 *result, ulong len)
                str_ptr += 2;
        }
        *str_ptr = '\0';
-       setenv(varname, str_output);
+       env_set(varname, str_output);
 
        free(str_output);
 }
 
-void decode_hexstring(char *hexstr, u8 *result)
-{
-       int i;
-       int acc = 0;
-
-       for (i = 0; i < strlen(hexstr); ++i) {
-               char d = hexstr[i];
-               int value;
-
-               if (isdigit(d))
-                       value = (d - '0');
-               else
-                       value = (islower(d) ? toupper(d) : d) - 'A' + 10;
-
-               if (i % 2 == 0) {
-                       acc = value * 16;
-               } else {
-                       result[i / 2] = acc + value;
-                       acc = 0;
-               }
-       }
-}
-
 void read_from_env_var(char *varname, u8 *result)
 {
        char *str_value;
 
-       str_value = getenv(varname);
+       str_value = env_get(varname);
        if (str_value)
-               decode_hexstring(str_value, result);
+               hex2bin(result, str_value, strlen(str_value) / 2);
        else
-               decode_hexstring(varname, result);
+               hex2bin(result, varname, strlen(varname) / 2);
 }
 
 void read_from_mem(ulong addr, u8 *result, ulong len)
@@ -79,13 +58,14 @@ void write_to_mem(char *varname, u8 *result, ulong len)
        ulong addr;
        u8 *buf;
 
-       addr = simple_strtoul(varname, NULL, 16);
+       addr = hextoul(varname, NULL);
        buf = map_sysmem(addr, len);
        memcpy(buf, result, len);
        unmap_sysmem(buf);
 }
 
-static int do_binop(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_binop(struct cmd_tbl *cmdtp, int flag, int argc,
+                   char *const argv[])
 {
        ulong len;
        u8 *result, *src1, *src2;
@@ -109,18 +89,18 @@ static int do_binop(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        else
                return CMD_RET_USAGE;
 
-       len = simple_strtoul(lenarg, NULL, 10);
+       len = dectoul(lenarg, NULL);
 
        src1 = malloc(len);
        src2 = malloc(len);
 
        if (*src1arg == '*')
-               read_from_mem(simple_strtoul(src1arg + 1, NULL, 16), src1, len);
+               read_from_mem(hextoul(src1arg + 1, NULL), src1, len);
        else
                read_from_env_var(src1arg, src1);
 
        if (*src2arg == '*')
-               read_from_mem(simple_strtoul(src2arg + 1, NULL, 16), src2, len);
+               read_from_mem(hextoul(src2arg + 1, NULL), src2, len);
        else
                read_from_env_var(src2arg, src2);