[PATCH 11/36] cli: Allow history to be disabled

Simon Glass sjg at chromium.org
Tue Sep 19 20:08:41 CEST 2023


When inputting text outside the command line we don't want history to be
accessible. Add an option to control this.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

 common/cli_readline.c | 42 ++++++++++++++++++++++--------------------
 include/cli.h         |  2 ++
 2 files changed, 24 insertions(+), 20 deletions(-)

diff --git a/common/cli_readline.c b/common/cli_readline.c
index fdb84d9204f..fa8f525d3a4 100644
--- a/common/cli_readline.c
+++ b/common/cli_readline.c
@@ -361,32 +361,33 @@ int cread_line_process_ch(struct cli_line_state *cls, char ichar)
 		break;
 	case CTL_CH('p'):
 	case CTL_CH('n'):
-	{
-		char *hline;
+		if (cls->history) {
+			char *hline;
 
-		if (ichar == CTL_CH('p'))
-			hline = hist_prev();
-		else
-			hline = hist_next();
+			if (ichar == CTL_CH('p'))
+				hline = hist_prev();
+			else
+				hline = hist_next();
 
-		if (!hline) {
-			getcmd_cbeep();
-			break;
-		}
+			if (!hline) {
+				getcmd_cbeep();
+				break;
+			}
 
-		/* nuke the current line */
-		/* first, go home */
-		BEGINNING_OF_LINE();
+			/* nuke the current line */
+			/* first, go home */
+			BEGINNING_OF_LINE();
 
-		/* erase to end of line */
-		ERASE_TO_EOL();
+			/* erase to end of line */
+			ERASE_TO_EOL();
 
-		/* copy new line into place and display */
-		strcpy(buf, hline);
-		cls->eol_num = strlen(buf);
-		REFRESH_TO_EOL();
+			/* copy new line into place and display */
+			strcpy(buf, hline);
+			cls->eol_num = strlen(buf);
+			REFRESH_TO_EOL();
+			break;
+		}
 		break;
-	}
 	case '\t':
 		if (IS_ENABLED(CONFIG_AUTO_COMPLETE)) {
 			int num2, col;
@@ -438,6 +439,7 @@ static int cread_line(const char *const prompt, char *buf, unsigned int *len,
 	cls->len = *len;
 	cls->prompt = prompt;
 	cls->buf = buf;
+	cls->history = true;
 
 	if (init_len)
 		cread_add_str(buf, init_len, 1, &cls->num, &cls->eol_num, buf,
diff --git a/include/cli.h b/include/cli.h
index bbc53276435..252bdb70ab0 100644
--- a/include/cli.h
+++ b/include/cli.h
@@ -31,6 +31,7 @@ struct cli_ch_state {
  * @num: Current cursor position, where 0 is the start
  * @eol_num: Number of characters in the buffer
  * @insert: true if in 'insert' mode
+ * @history: true if history should be accessible
  * @buf: Buffer containing line
  * @prompt: Prompt for the line
  */
@@ -39,6 +40,7 @@ struct cli_line_state {
 	uint eol_num;
 	uint len;
 	bool insert;
+	bool history;
 	char *buf;
 	const char *prompt;
 };
-- 
2.42.0.459.ge4e396fd5e-goog



More information about the U-Boot mailing list