cmd/setexpr: support concatenation of direct strings

The setexpr.s command allows to concatenate two strings.

According to the description in doc/usage/cmd/setexpr.rst the parameters
value1 and value2 can be either direct values or pointers to a
memory location holding the values.

Unfortunately `setexpr.s <value1> + <value2>` fails if any of the values
is a direct value. $? is set to false.

* Add support for direct values in setexpr.s.
* Correct the unit test for "setexpr.s fred 0".
* Add a new unit test for "setexpr.s fred '1' + '3'" giving '13'.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
This commit is contained in:
Heinrich Schuchardt
2025-02-07 13:35:23 -06:00
committed by Tom Rini
parent d4265cdcd5
commit af7eca24a7
2 changed files with 44 additions and 17 deletions
+6 -1
View File
@@ -303,7 +303,8 @@ static int setexpr_test_str(struct unit_test_state *uts)
memset(buf, '\xff', BUF_SIZE);
ut_assertok(env_set("fred", "x"));
ut_asserteq(1, run_command("setexpr.s fred 0", 0));
ut_asserteq(0, run_command("setexpr.s fred 0", 0));
ut_asserteq_str("0", env_get("fred"));
strcpy(buf, "hello");
ut_assertok(env_set("fred", "12345"));
@@ -321,6 +322,10 @@ static int setexpr_test_str_oper(struct unit_test_state *uts)
{
char *buf;
/* Test concatenation of strings */
ut_assertok(run_command("setexpr.s fred '1' + '3'", 0));
ut_asserteq_str("13", env_get("fred"));
buf = map_sysmem(0, BUF_SIZE);
memset(buf, '\xff', BUF_SIZE);
strcpy(buf, "hello");