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>
diff --git a/test/cmd/setexpr.c b/test/cmd/setexpr.c
index 650fbc8..5e9b577 100644
--- a/test/cmd/setexpr.c
+++ b/test/cmd/setexpr.c
@@ -303,7 +303,8 @@
 	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 @@
 {
 	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");