On 2/28/21 7:07 PM, Heinrich Schuchardt wrote:
Am 1. März 2021 01:03:43 MEZ schrieb Heinrich Schuchardt <xypron.g...@gmx.de>:
Am 1. März 2021 00:47:18 MEZ schrieb Sean Anderson <sean...@gmail.com>:
This is fairly straightforward. This allows
        part uuid mmc 0 foo
To be rewritten as
        env set foo $(part uuid mmc 0)
or even (if the variable is not required to be environmental)
        foo=$(part uuid mmc 0)

Who needs this? Why?

This is a consistent (and familiar) syntax for the many commands which
set environmental variables.


Where do you document it?

It's undocumented at the moment. Will be fixed in v2.


Where are the tests?

There's (a) test in patch 3. Though I forgot to add a test for this
command. Will be done in v2.


Best regards

Heinrich



Signed-off-by: Sean Anderson <sean...@gmail.com>
---

cmd/part.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/cmd/part.c b/cmd/part.c
index 3395c17b89..97e70d79ff 100644
--- a/cmd/part.c
+++ b/cmd/part.c
@@ -19,9 +19,12 @@
#include <config.h>
#include <command.h>
#include <env.h>
+#include <malloc.h>
#include <part.h>
#include <vsprintf.h>

+DECLARE_GLOBAL_DATA_PTR;
+
enum cmd_part_info {
        CMD_PART_INFO_START = 0,
        CMD_PART_INFO_SIZE,
@@ -43,12 +46,19 @@ static int do_part_uuid(int argc, char *const
argv[])
        if (part < 0)
                return 1;

-       if (argc > 2)
+       if (argc > 2) {
                env_set(argv[2], info.uuid);
-       else
-               printf("%s\n", info.uuid);
+       } else {
+               size_t result_size = sizeof(info.uuid) + 1;

-       return 0;
+               gd->cmd_result = malloc(result_size);

This is a memory leak. How about realloc?

This is not a memory leak. See patch 2 for semantics.

--Sean



+               if (!gd->cmd_result)
+                       return CMD_RET_FAILURE;
+
+               snprintf(gd->cmd_result, result_size, "%s\n", info.uuid);
+       }
+
+       return CMD_RET_SUCCESS;
}

static int do_part_list(int argc, char *const argv[])



Reply via email to