[LTP] [PATCH v4 3/5] shell: add kconfig parse api
xuyang2018.jy@fujitsu.com
xuyang2018.jy@fujitsu.com
Thu Jan 13 10:15:57 CET 2022
Hi Li, Cyril, Petr
Any comment for this patchset?
Best Regards
Yang Xu
> Hi Li
>> On Tue, Jan 11, 2022 at 2:10 PM Yang Xu<xuyang2018.jy@fujitsu.com> wrote:
>>
>>> +++ b/testcases/lib/tst_check_kconfigs.c
>>> @@ -0,0 +1,46 @@
>>> +// SPDX-License-Identifier: GPL-2.0-or-later
>>> +/* Copyright (c) 2022 FUJITSU LIMITED. All rights reserved.*/
>>> +
>>> +#include<stdio.h>
>>> +#include<string.h>
>>> +#include<stdlib.h>
>>> +#include "tst_kconfig.h"
>>> +
>>> +int main(int argc, char *argv[])
>>> +{
>>> + char *str = argv[1];
>>> + char *delim = argv[2];
>>> + unsigned int i, cnt = 1;
>>> + int ret = 0;
>>> +
>>> + if (argc == 2 || strlen(delim) == 0) {
>>
>> I doubt that this syntax really works here.
>>
>> How can we get the strlen(delim) equal to 0? if the argc is
>> not 2, why the length of delimi is zero? but if we change ||
>> to&&, then get a segment fault. I don't understand this.
>
> Sorry, this is ugly code. please see the lastest code.
>>
>>> + delim = ",";
>>> + } else if (argc == 3) {
>>> + if (strlen(delim)> 1) {
>>> + fprintf(stderr, "The delim must be a single character\n");
>>> + return 1;
>>> + }
>>> + } else {
>>> + fprintf(stderr, "Please provide kernel kconfig list and delim "
>>> + "(optinal, default value is ',')\n");
>>> + return 1;
>>> + }
>>> +
>>> + for (i = 0; str[i]; i++) {
>>> + if (str[i] == delim[0])
>>> + cnt++;
>>> + }
>>> +
>>> + char **kconfigs = malloc(++i * sizeof(char *));
>>
>> Shouldn't this be malloc(++cnt * sizeof(char*)) ?
> Oh, yes. Sorry for this typo.
>>
>>> +
>>> + for (i = j0; i< cnt; i++)
>>> + kconfigs[i] = strtok_r(str, delim,&str);
>>> +
>>> + kconfigs[i] = NULL;
> This is also useless.
>
> The lastest code should be as below:
>
> int main(int argc, char *argv[])
> {
> char *str = argv[1];
> char *delim = argv[2];
> unsigned int i, cnt = 1;
> int ret = 0;
>
> if (argc == 2) {
> delim = ",";
> } else if (argc == 3) {
> if (strlen(delim)> 1) {
> fprintf(stderr, "The delim must be a single
> character\n");
> return 1;
> }
> } else {
> fprintf(stderr, "Please provide kernel kconfig list and
> delim "
> "(optinal, default value is ',')\n");
> return 1;
> }
>
> for (i = 0; str[i]; i++) {
> if (str[i] == delim[0])
> cnt++;
> }
>
> char **kconfigs = malloc(++cnt * sizeof(char *));
>
> for (i = 0; i< cnt; i++)
> kconfigs[i] = strtok_r(str, delim,&str);
>
> if (tst_kconfig_check((const char * const*)kconfigs))
> ret = 1;
>
> free(kconfigs);
> return ret;
> }
>
>
> Best Regards
> Yang Xu
>>> +
>>> + if (tst_kconfig_check((const char * const*)kconfigs))
>>> + ret = 1;
>>> +
>>> + free(kconfigs);
>>> + return ret;
>>> +}
>>
>
More information about the ltp
mailing list