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 AF137C433F5 for ; Thu, 31 Mar 2022 23:42:03 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id B96A38433A; Fri, 1 Apr 2022 01:32:11 +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="j0lkaiEa"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 659D88426A; Fri, 1 Apr 2022 01:31:56 +0200 (CEST) Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) (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 A864D84338 for ; Fri, 1 Apr 2022 01:28:21 +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-wr1-x42a.google.com with SMTP id i4so1829601wrb.5 for ; Thu, 31 Mar 2022 16:28:21 -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=NOxzkhjPvdN3gBMXaJsi2eMnEBd3Bwe24zh8yW855AY=; b=j0lkaiEawCWwkcr414WV6J/HFxFy/7A+QvdJOweK3CvcVNmR3GcrTtZbwo76gEMaXc rxrRmAtXxQ1ux9Eb1CkGsu0K71yRotxfOLL5MEWfqYIi5CcZs2w2xEhcZ3S0hQFc1/N4 ge1R8jfvHycybBm+uw+HUOaqmdZNgGahvSq2A= 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=NOxzkhjPvdN3gBMXaJsi2eMnEBd3Bwe24zh8yW855AY=; b=dC0uvP0UZh02LzsgOs7/8hgt7y8Hu0uyxEMDYZejg0KjwEBKHrpNVpWVLbW7iP8v0S FZLJ9d2waLpQbLiSbA50DoQU9OShYRCOLpcFt7ku1sQohYCNUp1q95OtYopizpgcvX5W ZJK+/wEIs0CqninUSc7M8PRX5b89uiaKauhQxMaVoRSIf1r9DioqmJFR1bmf5hbu7Ok0 calCvWxYZWMCXejfkbSi++bPm0P2EhpbAwRonYP1NyVPrmk47gXb8OpXyyh8bRUyl04j 1ppoge/Qc+JXEyT0FW3ObXIYYTqBOXzp7UR58iol/iP9tyk1YDjQv2b2O81wZPlH24vs twDA== X-Gm-Message-State: AOAM533G3z4Qy6hAoiXAHzPlZnqwpzdHmJTMtucKUU5QjaVXrHcfWzO7 kfdO23uwW/RIPvpSPtyOk3KZenbVyuTBeLxG X-Google-Smtp-Source: ABdhPJywL/fgyHhrAlqX/G6vhTZNPhtGp9zd9wnwHJN0zg1t5s6a7pdcKUMy2OoKJwD87WiT8E1vRQ== X-Received: by 2002:a5d:66ca:0:b0:203:fb72:a223 with SMTP id k10-20020a5d66ca000000b00203fb72a223mr5530871wrw.12.1648769296311; Thu, 31 Mar 2022 16:28:16 -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.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 31 Mar 2022 16:28:15 -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 13/23] cli: Enables using hush 2021 parser as command line parser Date: Fri, 1 Apr 2022 01:27:06 +0200 Message-Id: <20220331232716.241283-14-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 If one defines HUSH_2021_PARSER, it is then possible to use 2021 parser with: => parser print old => parser set 2021 2021> parser get 2021 Signed-off-by: Francis Laniel --- cmd/parser.c | 14 ++++++++- common/cli.c | 38 ++++++++++++++++++++---- include/asm-generic/global_data.h | 4 +++ include/cli_hush.h | 49 ++++++++++++++++++++++++++++++- 4 files changed, 97 insertions(+), 8 deletions(-) diff --git a/cmd/parser.c b/cmd/parser.c index bd9961c829..ab1b6c0c3f 100644 --- a/cmd/parser.c +++ b/cmd/parser.c @@ -12,6 +12,8 @@ static const char *gd_flags_to_parser(void) { if (gd->flags & GD_FLG_HUSH_OLD_PARSER) return "old"; + if (gd->flags & GD_FLG_HUSH_2021_PARSER) + return "2021"; return NULL; } @@ -34,12 +36,15 @@ static int parser_string_to_gd_flags(const char *parser) { if (!strcmp(parser, "old")) return GD_FLG_HUSH_OLD_PARSER; + if (!strcmp(parser, "2021")) + return GD_FLG_HUSH_2021_PARSER; return -1; } static void reset_parser_gd_flags(void) { gd->flags &= ~GD_FLG_HUSH_OLD_PARSER; + gd->flags &= ~GD_FLG_HUSH_2021_PARSER; } static int do_parser_set(struct cmd_tbl *cmdtp, int flag, int argc, @@ -64,6 +69,13 @@ static int do_parser_set(struct cmd_tbl *cmdtp, int flag, int argc, printf("Want to set current parser to old, but its code was not compiled!\n"); return CMD_RET_FAILURE; } + + if (parser_flag == GD_FLG_HUSH_2021_PARSER + && !CONFIG_IS_ENABLED(HUSH_2021_PARSER)) { + printf("Want to set current parser to 2021, but its code was not compiled!\n"); + return CMD_RET_FAILURE; + } + reset_parser_gd_flags(); gd->flags |= parser_flag; @@ -101,7 +113,7 @@ static int do_parser(struct cmd_tbl *cmdtp, int flag, int argc, #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" + "set - set the current parser, possible values are: old, 2021" ; #endif diff --git a/common/cli.c b/common/cli.c index 82c69e5573..bff4a68640 100644 --- a/common/cli.c +++ b/common/cli.c @@ -40,12 +40,15 @@ int run_command(const char *cmd, int flag) return 1; return 0; -#else +#elif CONFIG_IS_ENABLED(HUSH_OLD_PARSER) int hush_flags = FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP; if (flag & CMD_FLAG_ENV) hush_flags |= FLAG_CONT_ON_NEWLINE; return parse_string_outer(cmd, hush_flags); +#else /* HUSH_2021_PARSER */ + /* Not yet implemented. */ + return 1; #endif } @@ -105,7 +108,12 @@ int run_command_list(const char *cmd, int len, int flag) buff[len] = '\0'; } #ifdef CONFIG_HUSH_PARSER +#if CONFIG_IS_ENABLED(HUSH_OLD_PARSER) rcode = parse_string_outer(buff, FLAG_PARSE_SEMICOLON); +#else /* HUSH_2021_PARSER */ + /* Not yet implemented. */ + rcode = 1; +#endif #else /* * This function will overwrite any \n it sees with a \0, which @@ -225,8 +233,13 @@ err: void cli_loop(void) { bootstage_mark(BOOTSTAGE_ID_ENTER_CLI_LOOP); -#ifdef CONFIG_HUSH_PARSER - parse_file_outer(); +#if CONFIG_IS_ENABLED(HUSH_PARSER) + if (gd->flags & GD_FLG_HUSH_2021_PARSER) + parse_and_run_file(); + else if (gd->flags & GD_FLG_HUSH_OLD_PARSER) + parse_file_outer(); + + printf("Problem\n"); /* This point is never reached */ for (;;); #elif defined(CONFIG_CMDLINE) @@ -239,10 +252,23 @@ void cli_loop(void) void cli_init(void) { #ifdef CONFIG_HUSH_PARSER + /* This if block is used to initialize hush parser gd flag. */ 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(); + && !(gd->flags & GD_FLG_HUSH_2021_PARSER)) { + if (CONFIG_IS_ENABLED(HUSH_OLD_PARSER)) + gd->flags |= GD_FLG_HUSH_OLD_PARSER; + else if (CONFIG_IS_ENABLED(HUSH_2021_PARSER)) + gd->flags |= GD_FLG_HUSH_2021_PARSER; + } + + if (gd->flags & GD_FLG_HUSH_OLD_PARSER) { + u_boot_hush_start(); + } else if (gd->flags & GD_FLG_HUSH_2021_PARSER) { + u_boot_hush_start_2021(); + } else { + printf("No valid hush parser to use, cli will not initialized!\n"); + return; + } #endif #if defined(CONFIG_HUSH_INIT_VAR) diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h index 5166022788..1c57999cdc 100644 --- a/include/asm-generic/global_data.h +++ b/include/asm-generic/global_data.h @@ -622,6 +622,10 @@ enum gd_flags { * @GD_FLG_HUSH_OLD_PARSER: Use hush old parser. */ GD_FLG_HUSH_OLD_PARSER = 0x100000, + /** + * @GD_FLG_HUSH_2021_PARSER: Use hush 2021 parser. + */ + GD_FLG_HUSH_2021_PARSER = 0x200000 }; #endif /* __ASSEMBLY__ */ diff --git a/include/cli_hush.h b/include/cli_hush.h index 2bd35670c7..6261aa1806 100644 --- a/include/cli_hush.h +++ b/include/cli_hush.h @@ -12,11 +12,58 @@ #define FLAG_REPARSING (1 << 2) /* >=2nd pass */ #define FLAG_CONT_ON_NEWLINE (1 << 3) /* continue when we see \n */ +#if CONFIG_IS_ENABLED(HUSH_OLD_PARSER) extern int u_boot_hush_start(void); extern int parse_string_outer(const char *, int); extern int parse_file_outer(void); - int set_local_var(const char *s, int flg_export); +#else +static inline int u_boot_hush_start(void) +{ + return 0; +} + +static inline int parse_string_outer(const char* str, int flag) +{ + return 1; +} + +static inline int parse_file_outer(void) +{ + return 0; +} + +static inline int set_local_var(const char *s, int flg_export) +{ + return 0; +} +#endif +#if CONFIG_IS_ENABLED(HUSH_2021_PARSER) +extern int u_boot_hush_start_2021(void); +extern int parse_string_outer_2021(const char *, int); +extern void parse_and_run_file(void); +int set_local_var_2021(char *s, int flg_export); +#else +static inline int u_boot_hush_start_2021(void) +{ + return 0; +} + +static inline int parse_string_outer_2021(const char* str, int flag) +{ + return 1; +} + +static inline void parse_and_run_file(void) +{ +} + +static inline int set_local_var_2021(char *s, int flg_export) +{ + return 0; +} +#endif + void unset_local_var(const char *name); char *get_local_var(const char *s); -- 2.25.1