[PATCH 5/5] cmd: Convert part uuid to use cmd_result

Sean Anderson seanga2 at gmail.com
Mon Mar 1 01:12:24 CET 2021


On 2/28/21 7:07 PM, Heinrich Schuchardt wrote:
> Am 1. März 2021 01:03:43 MEZ schrieb Heinrich Schuchardt <xypron.glpk at gmx.de>:
>> Am 1. März 2021 00:47:18 MEZ schrieb Sean Anderson <seanga2 at 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 <seanga2 at 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[])
> 




More information about the U-Boot mailing list