mirror of https://github.com/ipxe/ipxe.git
[cmdline] Allow "show" to display multiple settings at once
For convenience, it is now possible to display a whole set of options at once, by specifying the scope name, including trailing slash. Before: iPXE> show net0/ip net0/ip:ipv4 = 1.2.3.4 iPXE> show net0/netmask net0/netmask:ipv4 = 255.255.255.0 After: iPXE> show net0/ net0/busid = 01:80:86:10:0e net0/busloc = 0x10 net0/bustype = PCI net0/chip = 82540em net0/hwaddr = 52:54:00:12:34:56 net0/ifname = net0 net0/mac = 52:54:00:12:34:56 net0/ip = 1.2.3.4 net0/netmask = 255.255.255.0 net0/ip6 = fe80::5054:ff:fe12:3456 net0/len6 = 64 Signed-off-by: Christian Iversen <ci@iversenit.dk>pull/232/head
parent
a08244ecc4
commit
6733296243
|
@ -63,6 +63,7 @@ static int show_exec ( int argc, char **argv ) {
|
|||
struct named_setting setting;
|
||||
struct settings *origin;
|
||||
struct setting fetched;
|
||||
struct setting *iter;
|
||||
char name_buf[32];
|
||||
char *value;
|
||||
int len;
|
||||
|
@ -76,18 +77,35 @@ static int show_exec ( int argc, char **argv ) {
|
|||
if ( ( rc = parse_existing_setting ( argv[optind], &setting ) ) != 0 )
|
||||
goto err_parse_setting;
|
||||
|
||||
/* Fetch formatted setting value */
|
||||
if ( ( len = fetchf_setting_copy ( setting.settings, &setting.setting,
|
||||
&origin, &fetched, &value ) ) < 0 ) {
|
||||
rc = len;
|
||||
printf ( "Could not find \"%s\": %s\n",
|
||||
setting.setting.name, strerror ( rc ) );
|
||||
goto err_fetchf;
|
||||
}
|
||||
if ( setting.settings && setting.setting.name[0] == 0 ) {
|
||||
/* The user requested a scope name (e.g. "show net1/"). Iterate
|
||||
* over all settings and show relevant ones, similar to how the
|
||||
* config interface would present it. */
|
||||
for_each_table_entry ( iter, SETTINGS ) {
|
||||
if ( ! setting_applies ( setting.settings, iter ) )
|
||||
continue;
|
||||
|
||||
/* Print setting value */
|
||||
setting_name ( origin, &fetched, name_buf, sizeof ( name_buf ) );
|
||||
printf ( "%s = %s\n", name_buf, value );
|
||||
if ( fetchf_setting_copy ( setting.settings, iter,
|
||||
&origin, &fetched, &value ) < 0 )
|
||||
continue;
|
||||
|
||||
setting_name ( origin, &fetched, name_buf, sizeof ( name_buf ) );
|
||||
printf ( "%s/%s = %s\n", setting.settings->name, iter->name, value );
|
||||
}
|
||||
} else {
|
||||
/* Fetch formatted setting value */
|
||||
if ( ( len = fetchf_setting_copy ( setting.settings, &setting.setting,
|
||||
&origin, &fetched, &value ) ) < 0 ) {
|
||||
rc = len;
|
||||
printf ( "Could not find \"%s\": %s\n",
|
||||
setting.setting.name, strerror ( rc ) );
|
||||
goto err_fetchf;
|
||||
}
|
||||
|
||||
/* Print setting value */
|
||||
setting_name ( origin, &fetched, name_buf, sizeof ( name_buf ) );
|
||||
printf ( "%s = %s\n", name_buf, value );
|
||||
}
|
||||
|
||||
/* Success */
|
||||
rc = 0;
|
||||
|
|
Loading…
Reference in New Issue