summaryrefslogtreecommitdiffstats
path: root/src/hci
diff options
context:
space:
mode:
authorMichael Brown2012-10-25 05:16:15 +0200
committerMichael Brown2012-10-25 05:42:42 +0200
commit4dedccfa1fece8d8e2d6d22c81023817aebd7e2e (patch)
treebd448b2fce7ae26286df576241d6e170464a2d9f /src/hci
parent[settings] Add fetchf_named_setting_copy() (diff)
downloadipxe-4dedccfa1fece8d8e2d6d22c81023817aebd7e2e.tar.gz
ipxe-4dedccfa1fece8d8e2d6d22c81023817aebd7e2e.tar.xz
ipxe-4dedccfa1fece8d8e2d6d22c81023817aebd7e2e.zip
[readline] Allow a prefilled input string to be provided
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/hci')
-rw-r--r--src/hci/readline.c11
-rw-r--r--src/hci/shell.c2
2 files changed, 10 insertions, 3 deletions
diff --git a/src/hci/readline.c b/src/hci/readline.c
index 2ecb8f27..a199fb0e 100644
--- a/src/hci/readline.c
+++ b/src/hci/readline.c
@@ -241,13 +241,14 @@ void history_free ( struct readline_history *history ) {
* Read line from console (with history)
*
* @v prompt Prompt string
+ * @v prefill Prefill string, or NULL for no prefill
* @v history History buffer, or NULL for no history
* @ret line Line read from console (excluding terminating newline)
*
* The returned line is allocated with malloc(); the caller must
* eventually call free() to release the storage.
*/
-char * readline_history ( const char *prompt,
+char * readline_history ( const char *prompt, const char *prefill,
struct readline_history *history ) {
char buf[READLINE_MAX];
struct edit_string string;
@@ -265,6 +266,12 @@ char * readline_history ( const char *prompt,
init_editstring ( &string, buf, sizeof ( buf ) );
buf[0] = '\0';
+ /* Prefill string, if applicable */
+ if ( prefill ) {
+ replace_string ( &string, prefill );
+ sync_console ( &string );
+ }
+
while ( 1 ) {
/* Handle keypress */
key = edit_string ( &string, getkey ( 0 ) );
@@ -321,5 +328,5 @@ char * readline_history ( const char *prompt,
* eventually call free() to release the storage.
*/
char * readline ( const char *prompt ) {
- return readline_history ( prompt, NULL );
+ return readline_history ( prompt, NULL, NULL );
}
diff --git a/src/hci/shell.c b/src/hci/shell.c
index 33438da0..f4cf9bc8 100644
--- a/src/hci/shell.c
+++ b/src/hci/shell.c
@@ -86,7 +86,7 @@ int shell ( void ) {
/* Read and execute commands */
do {
- line = readline_history ( shell_prompt, &history );
+ line = readline_history ( shell_prompt, NULL, &history );
if ( line ) {
rc = system ( line );
free ( line );