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 051B8C43334 for ; Thu, 16 Jun 2022 22:36:17 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id EE502844D4; Fri, 17 Jun 2022 00:34:04 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (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="Du4q+NYg"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 7026A84498; Fri, 17 Jun 2022 00:33:50 +0200 (CEST) Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) (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 C1F2B843E4 for ; Fri, 17 Jun 2022 00:33:18 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=amarulasolutions.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=francis.laniel@amarulasolutions.com Received: by mail-wr1-x430.google.com with SMTP id n1so3295144wrg.12 for ; Thu, 16 Jun 2022 15:33:18 -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=lqcOxzc2TtV9oPRwJFm2a3ba5YLhfDePtMjHL9P897Q=; b=Du4q+NYgZ3VHwu2C8cn05CL+xm7JH34FPlsq1S7ztgSOs09FglHBM6HiaKEggSCMf6 5gs8q8K7F5PujgG8Y0qkIP/iitrcLdykXWDnVEqUMcZy2rkPo++g4cpyL5AQd6sTAatJ w/h2IaKx23eufqlJuFV+Jly7cwGOCW2VeWSiM= 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=lqcOxzc2TtV9oPRwJFm2a3ba5YLhfDePtMjHL9P897Q=; b=zIr3K2QDatyLF+Zi3avmksu3bDpHz88aCpWeCX0ZH5zsxvpTrx9husHlLZDFCcQlzf HwEQ5DIHFZPRgYMzzgQYuTNRefkOZB7p0P2WwhSamZ0RKIfPeDle5kxF4en0/5UP1LpC xttjlrzNR4dMNmh9Va+DkG6o1DzsnuZmbL2zdcZZUf9TfxSeJ5518jAcv8GCqtxXTh0T lm86DQs4B2W4p7GxIrfD2YahJvEEpDGCoafZE0fVVv6Hl9a3ZIphWvP/V9DTtWMmq9Cr YZCCipT+o4nUIXJfgHrfQ8LJTunzMaX3E3dZiLeKlStn7zuGfmmL7nLCe3F25qZ8rBJn MT8g== X-Gm-Message-State: AJIora/ni+OF+cLoQ8+RXqc+u22Jv5aROgLdCROxyKpfSUNyhhkAyYH8 732V0AUnfDK7Ru3mR9DCMQUbMbvOapH+Mg== X-Google-Smtp-Source: AGRyM1uoQ89mFx9KA7ARHtoFWCHSvTrgg+LqcnV5peeKRf+RHY8437FkgqXFis3nqNmJwY1R1Wm9wA== X-Received: by 2002:a5d:588d:0:b0:218:4d0e:b89 with SMTP id n13-20020a5d588d000000b002184d0e0b89mr6465648wrf.58.1655418785231; Thu, 16 Jun 2022 15:33:05 -0700 (PDT) Received: from pwmachine.home (17.pool80-103-97.dynamic.orange.es. [80.103.97.17]) by smtp.gmail.com with ESMTPSA id n4-20020a05600c4f8400b003971fc23185sm7912044wmq.20.2022.06.16.15.33.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Jun 2022 15:33:04 -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 v4 12/28] cmd: Add new parser command. Date: Fri, 17 Jun 2022 00:31:42 +0200 Message-Id: <20220616223158.9225-13-francis.laniel@amarulasolutions.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220616223158.9225-1-francis.laniel@amarulasolutions.com> References: <20220616223158.9225-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 5e43a1e022..11ae749a92 100644 --- a/cmd/Makefile +++ b/cmd/Makefile @@ -205,6 +205,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..4283bc7566 --- /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_get(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(get, 1, 1, do_parser_get, "", ""), + 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[] = + "get - 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