This commit allows user to determine whether to have history recording
in command-line. Previously to this commit, the CMD_HISTORY only sets
the compiling of cmd/history.c, and the history code in cli_readline.c
is always compiled and will take a lot of space to store history even if
we say N to CMD_HISTORY.


Signed-off-by: Hanyuan Zhao <hanyua...@qq.com>
---
This is v2 of patch series cli: allow users to disable history if unused at all
---
Changes v1 -> v2:
  - Please ignore the inaccurate description about the history code compilations
in the previous v2 patch: cli: panic when failed.
  - This patch is seperated from the v1 version patch 0001 cli: allow users to
disable history if unused at all, and now be the third of the v2 patches.
  - Move the #ifdef CONFIG_CMD_HISTORY directives to this patch. These 
directives
are still necessary when users are not using the history.
---
 common/cli_readline.c | 37 +++++++++++++++++++++++++------------
 1 file changed, 25 insertions(+), 12 deletions(-)

diff --git a/common/cli_readline.c b/common/cli_readline.c
index cf4339d0e5..9f71b33a01 100644
--- a/common/cli_readline.c
+++ b/common/cli_readline.c
@@ -67,12 +67,14 @@ static char *delete_char (char *buffer, char *p, int *colp, 
int *np, int plen)
 #define CTL_BACKSPACE          ('\b')
 #define DEL                    ((char)255)
 #define DEL7                   ((char)127)
-#define CREAD_HIST_CHAR                ('!')
 
 #define getcmd_putch(ch)       putc(ch)
 #define getcmd_getch()         getchar()
 #define getcmd_cbeep()         getcmd_putch('\a')
 
+#ifdef CONFIG_CMD_HISTORY
+
+#define CREAD_HIST_CHAR                ('!')
 #ifdef CONFIG_SPL_BUILD
 #define HIST_MAX               3
 #define HIST_SIZE              32
@@ -93,14 +95,6 @@ static char *hist_list[HIST_MAX];
 
 #define add_idx_minus_one() ((hist_add_idx == 0) ? hist_max : hist_add_idx-1)
 
-static void getcmd_putchars(int count, int ch)
-{
-       int i;
-
-       for (i = 0; i < count; i++)
-               getcmd_putch(ch);
-}
-
 static int hist_init(void)
 {
        int i;
@@ -201,6 +195,15 @@ void cread_print_hist_list(void)
                i++;
        }
 }
+#endif /* CONFIG_CMD_HISTORY */
+
+static void getcmd_putchars(int count, int ch)
+{
+       int i;
+
+       for (i = 0; i < count; i++)
+               getcmd_putch(ch);
+}
 
 #define BEGINNING_OF_LINE() {                  \
        while (cls->num) {                      \
@@ -374,6 +377,7 @@ int cread_line_process_ch(struct cli_line_state *cls, char 
ichar)
                        cls->eol_num--;
                }
                break;
+#ifdef CONFIG_CMD_HISTORY
        case CTL_CH('p'):
        case CTL_CH('n'):
                if (cls->history) {
@@ -403,6 +407,7 @@ int cread_line_process_ch(struct cli_line_state *cls, char 
ichar)
                        break;
                }
                break;
+#endif
        case '\t':
                if (IS_ENABLED(CONFIG_AUTO_COMPLETE) && cls->cmd_complete) {
                        int num2, col;
@@ -499,19 +504,23 @@ static int cread_line(const char *const prompt, char 
*buf, unsigned int *len,
        }
        *len = cls->eol_num;
 
+#ifdef CONFIG_CMD_HISTORY
        if (buf[0] && buf[0] != CREAD_HIST_CHAR)
                cread_add_to_hist(buf);
        hist_cur = hist_add_idx;
+#endif
 
        return 0;
 }
 
 #else /* !CONFIG_CMDLINE_EDITING */
 
+#ifdef CONFIG_CMD_HISTORY
 static inline int hist_init(void)
 {
        return 0;
 }
+#endif
 
 static int cread_line(const char *const prompt, char *buf, unsigned int *len,
                      int timeout)
@@ -649,7 +658,9 @@ int cli_readline_into_buffer(const char *const prompt, char 
*buffer,
        char *p = buffer;
        uint len = CONFIG_SYS_CBSIZE;
        int rc;
-       static int initted;
+#ifdef CONFIG_CMD_HISTORY
+       static int hist_initted;
+#endif
 
        /*
         * Say N to CMD_HISTORY_USE_CALLOC will skip runtime
@@ -663,11 +674,13 @@ int cli_readline_into_buffer(const char *const prompt, 
char *buffer,
         * or disable CMD_HISTORY.
         */
        if (IS_ENABLED(CONFIG_CMDLINE_EDITING) && (gd->flags & GD_FLG_RELOC)) {
-               if (!initted) {
+#ifdef CONFIG_CMD_HISTORY
+               if (!hist_initted) {
                        rc = hist_init();
                        if (rc == 0)
-                               initted = 1;
+                               hist_initted = 1;
                }
+#endif
 
                if (prompt)
                        puts(prompt);
-- 
2.34.1

Reply via email to