[PATCH v2 1/1] cli: compile history code if and only if history config is selected
Hanyuan Zhao
hanyuan-z at qq.com
Tue Mar 5 02:35:47 CET 2024
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 <hanyuan-z at 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
More information about the U-Boot
mailing list