cli: Drop #ifdefs for CONFIG_AUTO_COMPLETE in cli_readline

Use a static inline and adjust the logic to avoid the need for #ifdefs in
cli_readline_into_buffer()

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2023-10-01 19:13:08 -06:00 committed by Tom Rini
parent 039f8cc375
commit 6321391ac3
2 changed files with 48 additions and 43 deletions

View file

@ -386,27 +386,27 @@ static int cread_line(const char *const prompt, char *buf, unsigned int *len,
REFRESH_TO_EOL();
continue;
}
#ifdef CONFIG_AUTO_COMPLETE
case '\t': {
int num2, col;
case '\t':
if (IS_ENABLED(CONFIG_AUTO_COMPLETE)) {
int num2, col;
/* do not autocomplete when in the middle */
if (num < eol_num) {
getcmd_cbeep();
/* do not autocomplete when in the middle */
if (num < eol_num) {
getcmd_cbeep();
break;
}
buf[num] = '\0';
col = strlen(prompt) + eol_num;
num2 = num;
if (cmd_auto_complete(prompt, buf, &num2, &col)) {
col = num2 - num;
num += col;
eol_num += col;
}
break;
}
buf[num] = '\0';
col = strlen(prompt) + eol_num;
num2 = num;
if (cmd_auto_complete(prompt, buf, &num2, &col)) {
col = num2 - num;
num += col;
eol_num += col;
}
break;
}
#endif
fallthrough;
default:
cread_add_char(ichar, insert, &num, &eol_num, buf,
*len);
@ -519,14 +519,15 @@ static int cread_line_simple(const char *const prompt, char *p)
continue;
default:
/*
* Must be a normal character then
*/
if (n < CONFIG_SYS_CBSIZE-2) {
if (c == '\t') { /* expand TABs */
#ifdef CONFIG_AUTO_COMPLETE
/* Must be a normal character then */
if (n >= CONFIG_SYS_CBSIZE - 2) { /* Buffer full */
putc('\a');
break;
}
if (c == '\t') { /* expand TABs */
if (IS_ENABLED(CONFIG_AUTO_COMPLETE)) {
/*
* if auto completion triggered just
* if auto-completion triggered just
* continue
*/
*p = '\0';
@ -536,26 +537,24 @@ static int cread_line_simple(const char *const prompt, char *p)
p = p_buf + n; /* reset */
continue;
}
#endif
puts(tab_seq + (col & 07));
col += 8 - (col & 07);
} else {
char __maybe_unused buf[2];
/*
* Echo input using puts() to force an
* LCD flush if we are using an LCD
*/
++col;
buf[0] = c;
buf[1] = '\0';
puts(buf);
}
*p++ = c;
++n;
} else { /* Buffer full */
putc('\a');
puts(tab_seq + (col & 07));
col += 8 - (col & 07);
} else {
char __maybe_unused buf[2];
/*
* Echo input using puts() to force an LCD
* flush if we are using an LCD
*/
++col;
buf[0] = c;
buf[1] = '\0';
puts(buf);
}
*p++ = c;
++n;
break;
}
}
}

View file

@ -95,6 +95,12 @@ int var_complete(int argc, char *const argv[], char last_char, int maxv,
char *cmdv[]);
int cmd_auto_complete(const char *const prompt, char *buf, int *np,
int *colp);
#else
static inline int cmd_auto_complete(const char *const prompt, char *buf,
int *np, int *colp)
{
return 0;
}
#endif
/**