[PATCH v2 13/36] cli: Add a function to set up a new cread
Simon Glass
sjg at chromium.org
Mon Oct 2 03:13:17 CEST 2023
Create a init function so that it is easy to use command-line reading.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
(no changes since v1)
common/cli_readline.c | 24 +++++++++++++++---------
include/cli.h | 17 ++++++++++++++++-
2 files changed, 31 insertions(+), 10 deletions(-)
diff --git a/common/cli_readline.c b/common/cli_readline.c
index 23913a857a99..06b8d4650447 100644
--- a/common/cli_readline.c
+++ b/common/cli_readline.c
@@ -424,28 +424,34 @@ int cread_line_process_ch(struct cli_line_state *cls, char ichar)
return -EAGAIN;
}
+void cli_cread_init(struct cli_line_state *cls, char *buf, uint buf_size)
+{
+ int init_len = strlen(buf);
+
+ memset(cls, '\0', sizeof(struct cli_line_state));
+ cls->insert = true;
+ cls->buf = buf;
+ cls->len = buf_size;
+
+ if (init_len)
+ cread_add_str(buf, init_len, 0, &cls->num, &cls->eol_num, buf,
+ buf_size);
+}
+
static int cread_line(const char *const prompt, char *buf, unsigned int *len,
int timeout)
{
struct cli_ch_state s_cch, *cch = &s_cch;
struct cli_line_state s_cls, *cls = &s_cls;
char ichar;
- int init_len = strlen(buf);
int first = 1;
cli_ch_init(cch);
- memset(cls, '\0', sizeof(struct cli_line_state));
- cls->insert = true;
- cls->len = *len;
+ cli_cread_init(cls, buf, *len);
cls->prompt = prompt;
- cls->buf = buf;
cls->history = true;
cls->cmd_complete = true;
- if (init_len)
- cread_add_str(buf, init_len, 1, &cls->num, &cls->eol_num, buf,
- *len);
-
while (1) {
int ret;
diff --git a/include/cli.h b/include/cli.h
index ad3cb4499fe1..e183d5613697 100644
--- a/include/cli.h
+++ b/include/cli.h
@@ -32,7 +32,8 @@ struct cli_ch_state {
* @eol_num: Number of characters in the buffer
* @insert: true if in 'insert' mode
* @history: true if history should be accessible
- * @cmd_complete: true if tab completion should be enabled
+ * @cmd_complete: true if tab completion should be enabled (requires @prompt to
+ * be set)
* @buf: Buffer containing line
* @prompt: Prompt for the line
*/
@@ -262,6 +263,20 @@ int cli_ch_process(struct cli_ch_state *cch, int ichar);
*/
int cread_line_process_ch(struct cli_line_state *cls, char ichar);
+/**
+ * cli_cread_init() - Set up a new cread struct
+ *
+ * Sets up a new cread state, with history and cmd_complete set to false
+ *
+ * After calling this, you can use cread_line_process_ch() to process characters
+ * received from the user.
+ *
+ * @cls: CLI line state
+ * @buf: Text buffer containing the initial text
+ * @buf_size: Buffer size, including nul terminator
+ */
+void cli_cread_init(struct cli_line_state *cls, char *buf, uint buf_size);
+
/** cread_print_hist_list() - Print the command-line history list */
void cread_print_hist_list(void);
--
2.42.0.582.g8ccd20d70d-goog
More information about the U-Boot
mailing list