From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 41000C433EF for ; Thu, 31 Mar 2022 23:40:07 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 2826A842CD; Fri, 1 Apr 2022 01:31:59 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=amarulasolutions.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=amarulasolutions.com header.i=@amarulasolutions.com header.b="nf0mE99E"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 81D0F842D1; Fri, 1 Apr 2022 01:31:46 +0200 (CEST) Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id E61F38432A for ; Fri, 1 Apr 2022 01:28:14 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=amarulasolutions.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=francis.laniel@amarulasolutions.com Received: by mail-wm1-x342.google.com with SMTP id r64so688180wmr.4 for ; Thu, 31 Mar 2022 16:28:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=RxcH8VDMVrCJTEikm+NHIIQ0mOqb1YtBfM8+RFOTTbo=; b=nf0mE99EJJ+raNVMp1V/IHTOokQ+J+hTTPOnNVxIOl/eQoD2Nyp+cBbcT5v279t8hs V4Mtq/3kS/N1LZdb/NUhjh/SV6YqMHvXF0zimosymZ9JAOPRSmtCd0udEKLPdk3qwOd0 VzEc7W8alaO7+ljEM5jkyVkr9hwJyORw1oDlE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=RxcH8VDMVrCJTEikm+NHIIQ0mOqb1YtBfM8+RFOTTbo=; b=bUurs5uJDwFQwgIAfw+JhKbvnVAhZ9kOQSNwkCG+iuXz270HQZNhEzcr00kqXqXXt7 vRSabErqPDOHt0pomuC7KMh11+WcwPyzqV3eoih//ae4Qa2FlA0OgMFZUnEMeVxSY43e M8wm+fjSUryYAXs/Yg5228l1PcFiTbb8fVjqZBwcwN+d8fu95OQVU0ivM/ZkqVzsNrxj kNQFbL7tijmWoMP/hJn5vL2wAndErdOK5jxvbvHLur6mye8TRVMlFTOnwompszy3nEzb cFN6b3JocVPS8e9lE2z00uf41ntU64A1yhOTX7MOrP9wjvSx1BT7TweaPAUj/tcZvroC vf5A== X-Gm-Message-State: AOAM531RV+QzmJd+BKF8q3+kEexEBXtY2Ni3VIXEnSSit8XcyjZhu+iy /Aw2oYKR0cG2GgUjaXoK8+rAnH8kugdpEYz4 X-Google-Smtp-Source: ABdhPJxxrIoshS2RRKry759H8lJeZQpr5X7XRLcGo1VVyC5E/FjW67sfEdEbBiOZkpoWPjl8556f2g== X-Received: by 2002:a05:600c:229a:b0:38e:4a0f:ca24 with SMTP id 26-20020a05600c229a00b0038e4a0fca24mr3791264wmf.121.1648769294486; Thu, 31 Mar 2022 16:28:14 -0700 (PDT) Received: from pwmachine.home ([92.186.13.154]) by smtp.gmail.com with ESMTPSA id l20-20020a05600c1d1400b0038cba2f88c0sm11646395wms.26.2022.03.31.16.28.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 31 Mar 2022 16:28:13 -0700 (PDT) From: Francis Laniel To: u-boot@lists.denx.de Cc: Marek Behun , Michael Nazzareno Trimarchi , Simon Glass , Wolfgang Denk , Harald Seiler , Tom Rini , Francis Laniel Subject: [RFC PATCH v3 12/23] cmd: Add new parser command. Date: Fri, 1 Apr 2022 01:27:05 +0200 Message-Id: <20220331232716.241283-13-francis.laniel@amarulasolutions.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220331232716.241283-1-francis.laniel@amarulasolutions.com> References: <20220331232716.241283-1-francis.laniel@amarulasolutions.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.5 at phobos.denx.de X-Virus-Status: Clean This command can be used to print the current parser with 'parser print'. It can also be used to set the current parser with 'parser set'. For the moment, only one value is valid for set: old. Signed-off-by: Francis Laniel --- cmd/Makefile | 2 + cmd/parser.c | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++ common/cli.c | 3 +- 3 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 cmd/parser.c diff --git a/cmd/Makefile b/cmd/Makefile index 166c652d98..aa980c8e26 100644 --- a/cmd/Makefile +++ b/cmd/Makefile @@ -200,6 +200,8 @@ obj-$(CONFIG_CMD_AVB) += avb.o # Foundries.IO SCP03 obj-$(CONFIG_CMD_SCP03) += scp03.o +obj-$(CONFIG_HUSH_PARSER) += parser.o + obj-$(CONFIG_ARM) += arm/ obj-$(CONFIG_RISCV) += riscv/ obj-$(CONFIG_SANDBOX) += sandbox/ diff --git a/cmd/parser.c b/cmd/parser.c new file mode 100644 index 0000000000..bd9961c829 --- /dev/null +++ b/cmd/parser.c @@ -0,0 +1,113 @@ +// SPDX-License-Identifier: GPL-2.0+ + +#include +#include +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +static const char *gd_flags_to_parser(void) +{ + if (gd->flags & GD_FLG_HUSH_OLD_PARSER) + return "old"; + return NULL; +} + +static int do_parser_print(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + const char *current = gd_flags_to_parser(); + + if (!current) { + printf("current parser value is not valid, this should not happen!\n"); + return CMD_RET_FAILURE; + } + + printf("%s\n", current); + + return CMD_RET_SUCCESS; +} + +static int parser_string_to_gd_flags(const char *parser) +{ + if (!strcmp(parser, "old")) + return GD_FLG_HUSH_OLD_PARSER; + return -1; +} + +static void reset_parser_gd_flags(void) +{ + gd->flags &= ~GD_FLG_HUSH_OLD_PARSER; +} + +static int do_parser_set(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + char *parser_name; + int parser_flag; + + if (argc < 2) + return CMD_RET_USAGE; + + parser_name = argv[1]; + + parser_flag = parser_string_to_gd_flags(parser_name); + if (parser_flag == -1) { + printf("Bad value for parser name: %s\n", parser_name); + return CMD_RET_USAGE; + } + + if (parser_flag == GD_FLG_HUSH_OLD_PARSER + && !CONFIG_IS_ENABLED(HUSH_OLD_PARSER)) { + printf("Want to set current parser to old, but its code was not compiled!\n"); + return CMD_RET_FAILURE; + } + reset_parser_gd_flags(); + gd->flags |= parser_flag; + + cli_init(); + cli_loop(); + + /* cli_loop() should never return. */ + return CMD_RET_FAILURE; +} + +static struct cmd_tbl parser_sub[] = { + U_BOOT_CMD_MKENT(print, 1, 1, do_parser_print, "", ""), + U_BOOT_CMD_MKENT(set, 2, 1, do_parser_set, "", ""), +}; + +static int do_parser(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + struct cmd_tbl *cp; + + if (argc < 2) + return CMD_RET_USAGE; + + /* drop initial "parser" arg */ + argc--; + argv++; + + cp = find_cmd_tbl(argv[0], parser_sub, ARRAY_SIZE(parser_sub)); + if (cp) + return cp->cmd(cmdtp, flag, argc, argv); + + return CMD_RET_USAGE; +} + +#if CONFIG_IS_ENABLED(SYS_LONGHELP) +static char parser_help_text[] = + "print - print current parser\n" + "set - set the current parser, possible value is: old" + ; +#endif + +U_BOOT_CMD(parser, 3, 1, do_parser, + "parser", +#if CONFIG_IS_ENABLED(SYS_LONGHELP) + parser_help_text +#endif +); diff --git a/common/cli.c b/common/cli.c index ef967f4f9e..82c69e5573 100644 --- a/common/cli.c +++ b/common/cli.c @@ -239,7 +239,8 @@ void cli_loop(void) void cli_init(void) { #ifdef CONFIG_HUSH_PARSER - if (!(gd->flags & GD_FLG_HUSH_OLD_PARSER)) + if (!(gd->flags & GD_FLG_HUSH_OLD_PARSER) + && CONFIG_IS_ENABLED(HUSH_OLD_PARSER)) gd->flags |= GD_FLG_HUSH_OLD_PARSER; u_boot_hush_start(); #endif -- 2.25.1