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-03 16:10:29 +01:00
committed by Simon Glass
parent d01eb288cb
commit 0748f66cad
2 changed files with 44 additions and 17 deletions

View File

@@ -302,7 +302,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"));
@@ -320,6 +321,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");