]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
cli: Add a function to set up a new cread
authorSimon Glass <sjg@chromium.org>
Mon, 2 Oct 2023 01:13:17 +0000 (19:13 -0600)
committerTom Rini <trini@konsulko.com>
Wed, 11 Oct 2023 19:43:54 +0000 (15:43 -0400)
Create a init function so that it is easy to use command-line reading.

Signed-off-by: Simon Glass <sjg@chromium.org>
common/cli_readline.c
include/cli.h

index 23913a857a995f54bb68beeda00fc9900bc60089..06b8d46504472bcb9defe668fe07ae7ca1bbb698 100644 (file)
@@ -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;
 
index ad3cb4499fe12e91544855478ea6c18b68c9ec67..e183d5613697cf99c6944f3e5f4f6ed0d9001035 100644 (file)
@@ -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);