From: Simon Glass <simon.glass@canonical.com>
Move the initial-text output from cli_cread_init() into a new function
cli_cread_add_initial(). This allows callers to set up additional state
(like the putch callback) before the initial text is output.
Update cread_line() and scene_txtin_open() to call the new function.
Co-developed-by: Claude Opus 4.5 <noreply@anthropic.com>
Signed-off-by: Simon Glass <simon.glass@canonical.com>
---
boot/scene_txtin.c | 1 +
common/cli_readline.c | 12 ++++++++----
include/cli.h | 10 ++++++++++
3 files changed, 19 insertions(+), 4 deletions(-)
@@ -131,6 +131,7 @@ int scene_txtin_open(struct scene *scn, struct scene_obj *obj,
cli_cread_init(&scn->cls, abuf_data(&tin->buf), tin->line_chars);
scn->cls.insert = true;
scn->cls.putch = scene_txtin_putch;
+ cli_cread_add_initial(&scn->cls);
ret = vidconsole_entry_save(cons, &scn->entry_save);
if (ret)
return log_msg_ret("sav", ret);
@@ -470,16 +470,19 @@ int cread_line_process_ch(struct cli_line_state *cls, char ichar)
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;
+}
+
+void cli_cread_add_initial(struct cli_line_state *cls)
+{
+ int init_len = strlen(cls->buf);
if (init_len)
- cread_add_str(cls, buf, init_len, 0, &cls->num, &cls->eol_num,
- buf, buf_size);
+ cread_add_str(cls, cls->buf, init_len, 0, &cls->num,
+ &cls->eol_num, cls->buf, cls->len);
}
static int cread_line(const char *const prompt, char *buf, unsigned int *len,
@@ -492,6 +495,7 @@ static int cread_line(const char *const prompt, char *buf, unsigned int *len,
cli_ch_init(cch);
cli_cread_init(cls, buf, *len);
+ cli_cread_add_initial(cls);
cls->prompt = prompt;
cls->history = true;
cls->cmd_complete = true;
@@ -279,6 +279,16 @@ int cread_line_process_ch(struct cli_line_state *cls, char ichar);
*/
void cli_cread_init(struct cli_line_state *cls, char *buf, uint buf_size);
+/**
+ * cli_cread_add_initial() - Output initial buffer contents
+ *
+ * Called after cli_cread_init() to output the initial text in the buffer and
+ * set up the line state accordingly
+ *
+ * @cls: CLI line state
+ */
+void cli_cread_add_initial(struct cli_line_state *cls);
+
/** cread_print_hist_list() - Print the command-line history list */
void cread_print_hist_list(void);