mirror of
https://github.com/ipxe/ipxe
synced 2025-12-23 13:30:57 +03:00
[settings] Use a generic setting's own type as its default type
When fetching a named setting using a name that does not explicitly
specify a type, default to using the type stored when the setting was
created, rather than always defaulting to "string". This allows the
behaviour of user-defined settings to match the behaviour of
predefined settings (which have a sensible default type).
For example:
set server:ipv4 192.168.0.1
echo ${server}
will now print "192.168.0.1", rather than trying to print out the raw
IPv4 address bytes as a string.
The downside of this change is that existing tricks for printing
special characters within scripts may require (backwards-compatible)
modification. For example, the "clear screen" sequence:
set esc:hex 1b
set cls ${esc}[2J
echo ${cls}
will now have to become
set esc:hex 1b
set cls ${esc:string}[2J # Must now explicitly specify ":string"
echo ${cls}
Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -249,7 +249,8 @@ static int choose_exec ( int argc, char **argv ) {
|
||||
goto err_show_menu;
|
||||
|
||||
/* Store setting */
|
||||
if ( ( rc = storef_named_setting ( setting, item->label ) ) != 0 ) {
|
||||
if ( ( rc = storef_named_setting ( setting, &setting_type_string,
|
||||
item->label ) ) != 0 ) {
|
||||
printf ( "Could not store \"%s\": %s\n",
|
||||
setting, strerror ( rc ) );
|
||||
goto err_store;
|
||||
|
||||
@@ -127,7 +127,8 @@ static int set_core_exec ( int argc, char **argv,
|
||||
goto err_get_value;
|
||||
|
||||
/* Determine total length of command line */
|
||||
if ( ( rc = storef_named_setting ( name, value ) ) != 0 ) {
|
||||
if ( ( rc = storef_named_setting ( name, &setting_type_string,
|
||||
value ) ) != 0 ) {
|
||||
printf ( "Could not %s \"%s\": %s\n",
|
||||
argv[0], name, strerror ( rc ) );
|
||||
goto err_store;
|
||||
|
||||
Reference in New Issue
Block a user