diff options
author | Michael Brown | 2012-10-25 05:42:21 +0200 |
---|---|---|
committer | Michael Brown | 2012-10-25 05:47:39 +0200 |
commit | 34863a51c27164fd9a9f83dda45ff2a79131c42e (patch) | |
tree | 9c09a9e9b870d25ba8a59e0d287a2d98c3d88b5f /src/hci/commands | |
parent | [readline] Allow a prefilled input string to be provided (diff) | |
download | ipxe-34863a51c27164fd9a9f83dda45ff2a79131c42e.tar.gz ipxe-34863a51c27164fd9a9f83dda45ff2a79131c42e.tar.xz ipxe-34863a51c27164fd9a9f83dda45ff2a79131c42e.zip |
[settings] Prefill existing setting value in "read" command
When prompting the user to enter a setting value via the "read"
command, prefill the input buffer with the setting's current value.
Requested-by: Ján Ondrej (SAL) <ondrejj@salstar.ks>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/hci/commands')
-rw-r--r-- | src/hci/commands/nvo_cmd.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/src/hci/commands/nvo_cmd.c b/src/hci/commands/nvo_cmd.c index fb8ec876..b3775d09 100644 --- a/src/hci/commands/nvo_cmd.c +++ b/src/hci/commands/nvo_cmd.c @@ -109,7 +109,8 @@ static struct command_descriptor clear_read_cmd = */ static int set_core_exec ( int argc, char **argv, struct command_descriptor *cmd, - int ( * get_value ) ( char **args, char **value ) ) { + int ( * get_value ) ( const char *name, + char **args, char **value ) ) { struct set_core_options opts; const char *name; char *value; @@ -123,7 +124,7 @@ static int set_core_exec ( int argc, char **argv, name = argv[optind]; /* Parse setting value */ - if ( ( rc = get_value ( &argv[ optind + 1 ], &value ) ) != 0 ) + if ( ( rc = get_value ( name, &argv[ optind + 1 ], &value ) ) != 0 ) goto err_get_value; /* Determine total length of command line */ @@ -147,11 +148,12 @@ static int set_core_exec ( int argc, char **argv, /** * Get setting value for "set" command * + * @v name Setting name * @v args Remaining arguments * @ret value Setting value * @ret rc Return status code */ -static int set_value ( char **args, char **value ) { +static int set_value ( const char *name __unused, char **args, char **value ) { *value = concat_args ( args ); if ( ! *value ) @@ -174,11 +176,13 @@ static int set_exec ( int argc, char **argv ) { /** * Get setting value for "clear" command * + * @v name Setting name * @v args Remaining arguments * @ret value Setting value * @ret rc Return status code */ -static int clear_value ( char **args __unused, char **value ) { +static int clear_value ( const char *name __unused, char **args __unused, + char **value ) { *value = NULL; return 0; @@ -198,14 +202,24 @@ static int clear_exec ( int argc, char **argv ) { /** * Get setting value for "read" command * + * @v name Setting name + * @v args Remaining arguments * @ret value Setting value * @ret rc Return status code */ -static int read_value ( char **args __unused, char **value ) { +static int read_value ( const char *name, char **args __unused, char **value ) { + char *existing; + int rc; - *value = readline ( NULL ); - if ( ! *value ) - return -ENOMEM; + /* Read existing value */ + if ( ( rc = fetchf_named_setting_copy ( name, &existing ) ) < 0 ) + return rc; + + /* Read new value */ + *value = readline_history ( NULL, existing, NULL ); + + /* Free existing value */ + free ( existing ); return 0; } |