#include <stdint.h>
#include <gpxe/tables.h>
#include <gpxe/list.h>
#include <gpxe/refcnt.h>
Go to the source code of this file.
Data Structures | |
| struct | setting |
| A setting. More... | |
| struct | settings_operations |
| Settings block operations. More... | |
| struct | settings |
| A settings block. More... | |
| struct | setting_type |
| A setting type. More... | |
| struct | settings_applicator |
| A settings applicator. More... | |
| struct | generic_settings |
| A generic settings block. More... | |
Defines | |
| #define | SETTINGS __table ( struct setting, "settings" ) |
| Configuration setting table. | |
| #define | __setting __table_entry ( SETTINGS, 01 ) |
| Declare a configuration setting. | |
| #define | SETTING_TYPES __table ( struct setting_type, "setting_types" ) |
| Configuration setting type table. | |
| #define | __setting_type __table_entry ( SETTING_TYPES, 01 ) |
| Declare a configuration setting type. | |
| #define | SETTINGS_APPLICATORS __table ( struct settings_applicator, "settings_applicators" ) |
| Settings applicator table. | |
| #define | __settings_applicator __table_entry ( SETTINGS_APPLICATORS, 01 ) |
| Declare a settings applicator. | |
Functions | |
| FILE_LICENCE (GPL2_OR_LATER) | |
| int | generic_settings_store (struct settings *settings, struct setting *setting, const void *data, size_t len) |
| Store value of generic setting. | |
| int | generic_settings_fetch (struct settings *settings, struct setting *setting, void *data, size_t len) |
| Fetch value of generic setting. | |
| void | generic_settings_clear (struct settings *settings) |
| Clear generic settings block. | |
| int | register_settings (struct settings *settings, struct settings *parent) |
| Register settings block. | |
| void | unregister_settings (struct settings *settings) |
| Unregister settings block. | |
| int | store_setting (struct settings *settings, struct setting *setting, const void *data, size_t len) |
| Store value of setting. | |
| int | fetch_setting (struct settings *settings, struct setting *setting, void *data, size_t len) |
| Fetch value of setting. | |
| int | fetch_setting_len (struct settings *settings, struct setting *setting) |
| Fetch length of setting. | |
| int | fetch_string_setting (struct settings *settings, struct setting *setting, char *data, size_t len) |
| Fetch value of string setting. | |
| int | fetch_string_setting_copy (struct settings *settings, struct setting *setting, char **data) |
| Fetch value of string setting. | |
| int | fetch_ipv4_setting (struct settings *settings, struct setting *setting, struct in_addr *inp) |
| Fetch value of IPv4 address setting. | |
| int | fetch_int_setting (struct settings *settings, struct setting *setting, long *value) |
| Fetch value of signed integer setting. | |
| int | fetch_uint_setting (struct settings *settings, struct setting *setting, unsigned long *value) |
| Fetch value of unsigned integer setting. | |
| long | fetch_intz_setting (struct settings *settings, struct setting *setting) |
| Fetch value of signed integer setting, or zero. | |
| unsigned long | fetch_uintz_setting (struct settings *settings, struct setting *setting) |
| Fetch value of unsigned integer setting, or zero. | |
| int | fetch_uuid_setting (struct settings *settings, struct setting *setting, union uuid *uuid) |
| Fetch value of UUID setting. | |
| void | clear_settings (struct settings *settings) |
| Clear settings block. | |
| int | setting_cmp (struct setting *a, struct setting *b) |
| Compare two settings. | |
| struct settings * | find_settings (const char *name) |
| Find named settings block. | |
| int | storef_setting (struct settings *settings, struct setting *setting, const char *value) |
| Store value of typed setting. | |
| int | storef_named_setting (const char *name, const char *value) |
| Parse and store value of named setting. | |
| int | fetchf_named_setting (const char *name, char *buf, size_t len) |
| Fetch and format value of named setting. | |
| static void | settings_init (struct settings *settings, struct settings_operations *op, struct refcnt *refcnt, const char *name, unsigned int tag_magic) |
| Initialise a settings block. | |
| static void | generic_settings_init (struct generic_settings *generics, struct refcnt *refcnt, const char *name) |
| Initialise a settings block. | |
| static int | delete_setting (struct settings *settings, struct setting *setting) |
| Delete setting. | |
| static int | fetchf_setting (struct settings *settings, struct setting *setting, char *buf, size_t len) |
| Fetch and format value of setting. | |
| static int | delete_named_setting (const char *name) |
| Delete named setting. | |
| static int | setting_exists (struct settings *settings, struct setting *setting) |
| Check existence of setting. | |
Variables | |
| struct settings_operations | generic_settings_operations |
| Generic settings operations. | |
| struct setting_type setting_type_string | __setting_type |
| A string setting type. | |
| struct setting ip_setting | __setting |
| Hostname setting. | |
Definition in file settings.h.
| #define SETTINGS __table ( struct setting, "settings" ) |
Configuration setting table.
Definition at line 41 of file settings.h.
Referenced by find_setting(), and init_setting_index().
| #define SETTING_TYPES __table ( struct setting_type, "setting_types" ) |
Configuration setting type table.
Definition at line 136 of file settings.h.
Referenced by find_setting_type().
struct setting_type setting_type_uuid __setting_type __table_entry ( SETTING_TYPES, 01 ) [read] |
Declare a configuration setting type.
UUID setting type.
A hex-string setting.
An unsigned 32-bit integer setting type.
An unsigned 16-bit integer setting type.
An unsigned 8-bit integer setting type.
A signed 32-bit integer setting type.
A signed 16-bit integer setting type.
A signed 8-bit integer setting type.
An IPv4 address setting type.
A URI-encoded string setting type.
Definition at line 139 of file settings.h.
| #define SETTINGS_APPLICATORS __table ( struct settings_applicator, "settings_applicators" ) |
Settings applicator table.
Definition at line 154 of file settings.h.
Referenced by apply_settings().
| #define __settings_applicator __table_entry ( SETTINGS_APPLICATORS, 01 ) |
| FILE_LICENCE | ( | GPL2_OR_LATER | ) |
| int generic_settings_store | ( | struct settings * | settings, | |
| struct setting * | setting, | |||
| const void * | data, | |||
| size_t | len | |||
| ) |
Store value of generic setting.
| settings | Settings block | |
| setting | Setting to store | |
| data | Setting data, or NULL to clear setting | |
| len | Length of setting data |
| rc | Return status code |
Definition at line 113 of file settings.c.
References container_of, ENOMEM, find_generic_setting(), free(), generic_setting_data(), generic_setting_name(), generic_settings::list, generic_setting::list, list_add, list_del, memcpy, setting::name, generic_setting::name_len, NULL, strlen(), and zalloc().
Referenced by netdev_store().
00115 { 00116 struct generic_settings *generics = 00117 container_of ( settings, struct generic_settings, settings ); 00118 struct generic_setting *old; 00119 struct generic_setting *new = NULL; 00120 size_t name_len; 00121 00122 /* Identify existing generic setting, if any */ 00123 old = find_generic_setting ( generics, setting ); 00124 00125 /* Create new generic setting, if required */ 00126 if ( len ) { 00127 /* Allocate new generic setting */ 00128 name_len = ( strlen ( setting->name ) + 1 ); 00129 new = zalloc ( sizeof ( *new ) + name_len + len ); 00130 if ( ! new ) 00131 return -ENOMEM; 00132 00133 /* Populate new generic setting */ 00134 new->name_len = name_len; 00135 new->data_len = len; 00136 memcpy ( &new->setting, setting, sizeof ( new->setting ) ); 00137 new->setting.name = generic_setting_name ( new ); 00138 memcpy ( generic_setting_name ( new ), 00139 setting->name, name_len ); 00140 memcpy ( generic_setting_data ( new ), data, len ); 00141 } 00142 00143 /* Delete existing generic setting, if any */ 00144 if ( old ) { 00145 list_del ( &old->list ); 00146 free ( old ); 00147 } 00148 00149 /* Add new setting to list, if any */ 00150 if ( new ) 00151 list_add ( &new->list, &generics->list ); 00152 00153 return 0; 00154 }
| int generic_settings_fetch | ( | struct settings * | settings, | |
| struct setting * | setting, | |||
| void * | data, | |||
| size_t | len | |||
| ) |
Fetch value of generic setting.
| settings | Settings block | |
| setting | Setting to fetch | |
| data | Buffer to fill with setting data | |
| len | Length of buffer |
| len | Length of setting data, or negative error |
Definition at line 165 of file settings.c.
References container_of, ENOENT, find_generic_setting(), generic_setting_data(), and memcpy.
Referenced by netdev_fetch().
00167 { 00168 struct generic_settings *generics = 00169 container_of ( settings, struct generic_settings, settings ); 00170 struct generic_setting *generic; 00171 00172 /* Find generic setting */ 00173 generic = find_generic_setting ( generics, setting ); 00174 if ( ! generic ) 00175 return -ENOENT; 00176 00177 /* Copy out generic setting data */ 00178 if ( len > generic->data_len ) 00179 len = generic->data_len; 00180 memcpy ( data, generic_setting_data ( generic ), len ); 00181 return generic->data_len; 00182 }
| void generic_settings_clear | ( | struct settings * | settings | ) |
Clear generic settings block.
| settings | Settings block |
Definition at line 189 of file settings.c.
References assert, container_of, free(), generic_setting::list, generic_settings::list, list_del, list_empty(), and list_for_each_entry_safe.
Referenced by netdev_clear().
00189 { 00190 struct generic_settings *generics = 00191 container_of ( settings, struct generic_settings, settings ); 00192 struct generic_setting *generic; 00193 struct generic_setting *tmp; 00194 00195 list_for_each_entry_safe ( generic, tmp, &generics->list, list ) { 00196 list_del ( &generic->list ); 00197 free ( generic ); 00198 } 00199 assert ( list_empty ( &generics->list ) ); 00200 }
Register settings block.
| rc | Return status code |
Definition at line 427 of file settings.c.
References apply_settings(), assert, settings::children, DBGC, find_child_settings(), list_add_tail, settings::name, NULL, settings::parent, ref_get(), settings::refcnt, reprioritise_settings(), settings_name(), settings_root, settings::siblings, and unregister_settings().
Referenced by autovivify_child_settings(), dhcp_proxy_rx(), dhcp_pxebs_rx(), dhcp_request_rx(), phantom_probe(), register_netdev(), register_nvo(), smbios_init(), and store_cached_dhcpack().
00427 { 00428 struct settings *old_settings; 00429 00430 /* NULL parent => add to settings root */ 00431 assert ( settings != NULL ); 00432 if ( parent == NULL ) 00433 parent = &settings_root; 00434 00435 /* Remove any existing settings with the same name */ 00436 if ( ( old_settings = find_child_settings ( parent, settings->name ) )) 00437 unregister_settings ( old_settings ); 00438 00439 /* Add to list of settings */ 00440 ref_get ( settings->refcnt ); 00441 ref_get ( parent->refcnt ); 00442 settings->parent = parent; 00443 list_add_tail ( &settings->siblings, &parent->children ); 00444 DBGC ( settings, "Settings %p (\"%s\") registered\n", 00445 settings, settings_name ( settings ) ); 00446 00447 /* Fix up settings priority */ 00448 reprioritise_settings ( settings ); 00449 00450 /* Apply potentially-updated settings */ 00451 apply_settings(); 00452 00453 return 0; 00454 }
| void unregister_settings | ( | struct settings * | settings | ) |
Unregister settings block.
| settings | Settings block |
Definition at line 461 of file settings.c.
References apply_settings(), DBGC, list_del, NULL, settings::parent, ref_put(), settings::refcnt, settings_name(), and settings::siblings.
Referenced by phantom_probe(), phantom_remove(), register_settings(), unregister_netdev(), and unregister_nvo().
00461 { 00462 00463 DBGC ( settings, "Settings %p (\"%s\") unregistered\n", 00464 settings, settings_name ( settings ) ); 00465 00466 /* Remove from list of settings */ 00467 ref_put ( settings->refcnt ); 00468 ref_put ( settings->parent->refcnt ); 00469 settings->parent = NULL; 00470 list_del ( &settings->siblings ); 00471 00472 /* Apply potentially-updated settings */ 00473 apply_settings(); 00474 }
| int store_setting | ( | struct settings * | settings, | |
| struct setting * | setting, | |||
| const void * | data, | |||
| size_t | len | |||
| ) |
Store value of setting.
| settings | Settings block, or NULL | |
| setting | Setting to store | |
| data | Setting data, or NULL to clear setting | |
| len | Length of setting data |
| rc | Return status code |
Definition at line 492 of file settings.c.
References apply_settings(), ENOTSUP, settings::op, settings::parent, reprioritise_settings(), setting_cmp(), settings_root, and settings_operations::store.
Referenced by delete_setting(), login_ui(), storef_hex(), storef_int(), storef_ipv4(), storef_string(), and storef_uristring().
00493 { 00494 int rc; 00495 00496 /* NULL settings implies storing into the global settings root */ 00497 if ( ! settings ) 00498 settings = &settings_root; 00499 00500 /* Sanity check */ 00501 if ( ! settings->op->store ) 00502 return -ENOTSUP; 00503 00504 /* Store setting */ 00505 if ( ( rc = settings->op->store ( settings, setting, 00506 data, len ) ) != 0 ) 00507 return rc; 00508 00509 /* Reprioritise settings if necessary */ 00510 if ( setting_cmp ( setting, &priority_setting ) == 0 ) 00511 reprioritise_settings ( settings ); 00512 00513 /* If these settings are registered, apply potentially-updated 00514 * settings 00515 */ 00516 for ( ; settings ; settings = settings->parent ) { 00517 if ( settings == &settings_root ) { 00518 if ( ( rc = apply_settings() ) != 0 ) 00519 return rc; 00520 break; 00521 } 00522 } 00523 00524 return 0; 00525 }
Fetch value of setting.
| settings | Settings block, or NULL to search all blocks | |
| setting | Setting to fetch | |
| data | Buffer to fill with setting data | |
| len | Length of buffer |
| len | Length of setting data, or negative error |
Definition at line 539 of file settings.c.
References settings::children, ENOENT, ENOTSUP, settings_operations::fetch, fetch_setting(), list_for_each_entry, memset(), settings::op, and settings_root.
Referenced by copy_encap_settings(), dhcp_create_request(), fetch_int_setting(), fetch_ipv4_setting(), fetch_setting(), fetch_setting_len(), fetch_string_setting(), fetch_uuid_setting(), fetchf_hex(), fetchf_uristring(), pxe_menu_parse(), start_pxebs(), trivial_change_key(), and trivial_init().
00540 { 00541 struct settings *child; 00542 int ret; 00543 00544 /* Avoid returning uninitialised data on error */ 00545 memset ( data, 0, len ); 00546 00547 /* NULL settings implies starting at the global settings root */ 00548 if ( ! settings ) 00549 settings = &settings_root; 00550 00551 /* Sanity check */ 00552 if ( ! settings->op->fetch ) 00553 return -ENOTSUP; 00554 00555 /* Try this block first */ 00556 if ( ( ret = settings->op->fetch ( settings, setting, 00557 data, len ) ) >= 0 ) 00558 return ret; 00559 00560 /* Recurse into each child block in turn */ 00561 list_for_each_entry ( child, &settings->children, siblings ) { 00562 if ( ( ret = fetch_setting ( child, setting, 00563 data, len ) ) >= 0 ) 00564 return ret; 00565 } 00566 00567 return -ENOENT; 00568 }
Fetch length of setting.
| len | Length of setting data, or negative error |
Definition at line 580 of file settings.c.
References fetch_setting(), and NULL.
Referenced by apply_iscsi_string_setting(), copy_encap_settings(), dhcp_create_request(), fetch_string_setting_copy(), fetchf_hex(), ibft_set_string_option(), pxe_menu_parse(), setting_exists(), and start_pxebs().
00580 { 00581 return fetch_setting ( settings, setting, NULL, 0 ); 00582 }
| int fetch_string_setting | ( | struct settings * | settings, | |
| struct setting * | setting, | |||
| char * | data, | |||
| size_t | len | |||
| ) |
Fetch value of string setting.
| settings | Settings block, or NULL to search all blocks | |
| setting | Setting to fetch | |
| data | Buffer to fill with setting string data | |
| len | Length of buffer |
| len | Length of string setting, or negative error |
Definition at line 597 of file settings.c.
References fetch_setting(), and memset().
Referenced by apply_iscsi_string_setting(), fetch_string_setting_copy(), fetchf_string(), fetchf_uristring(), ib_sma_node_desc(), ibft_set_string_option(), login_ui(), net80211_autoassociate(), net80211_check_settings_update(), netboot(), pxe_menu_boot(), and wpa_psk_start().
00598 { 00599 memset ( data, 0, len ); 00600 return fetch_setting ( settings, setting, data, 00601 ( ( len > 0 ) ? ( len - 1 ) : 0 ) ); 00602 }
| int fetch_string_setting_copy | ( | struct settings * | settings, | |
| struct setting * | setting, | |||
| char ** | data | |||
| ) |
Fetch value of string setting.
| settings | Settings block, or NULL to search all blocks | |
| setting | Setting to fetch | |
| data | Buffer to allocate and fill with setting string data |
| len | Length of string setting, or negative error |
Definition at line 617 of file settings.c.
References assert, ENOMEM, fetch_setting_len(), fetch_string_setting(), and malloc().
Referenced by apply_dns_settings().
00619 { 00620 int len; 00621 int check_len = 0; 00622 00623 len = fetch_setting_len ( settings, setting ); 00624 if ( len < 0 ) 00625 return len; 00626 00627 *data = malloc ( len + 1 ); 00628 if ( ! *data ) 00629 return -ENOMEM; 00630 00631 check_len = fetch_string_setting ( settings, setting, *data, 00632 ( len + 1 ) ); 00633 assert ( check_len == len ); 00634 return len; 00635 }
| int fetch_ipv4_setting | ( | struct settings * | settings, | |
| struct setting * | setting, | |||
| struct in_addr * | inp | |||
| ) |
Fetch value of IPv4 address setting.
| settings | Settings block, or NULL to search all blocks | |
| setting | Setting to fetch | |
| inp | IPv4 address to fill in |
| len | Length of setting, or negative error |
Definition at line 645 of file settings.c.
References ERANGE, and fetch_setting().
Referenced by apply_dns_settings(), fetchf_ipv4(), gdbudp_configure(), ibft_fill_nic(), ibft_set_ipaddr_option(), ipv4_create_routes(), netboot(), pxe_menu_boot(), start_pxebs(), and tftp_apply_settings().
00646 { 00647 int len; 00648 00649 len = fetch_setting ( settings, setting, inp, sizeof ( *inp ) ); 00650 if ( len < 0 ) 00651 return len; 00652 if ( len < ( int ) sizeof ( *inp ) ) 00653 return -ERANGE; 00654 return len; 00655 }
Fetch value of signed integer setting.
| settings | Settings block, or NULL to search all blocks | |
| setting | Setting to fetch | |
| value | Integer value to fill in |
| len | Length of setting, or negative error |
Definition at line 665 of file settings.c.
References ERANGE, fetch_setting(), and u8.
Referenced by fetch_intz_setting(), fetch_uint_setting(), and fetchf_int().
00666 { 00667 union { 00668 uint8_t u8[ sizeof ( long ) ]; 00669 int8_t s8[ sizeof ( long ) ]; 00670 } buf; 00671 int len; 00672 int i; 00673 00674 /* Avoid returning uninitialised data on error */ 00675 *value = 0; 00676 00677 /* Fetch raw (network-ordered, variable-length) setting */ 00678 len = fetch_setting ( settings, setting, &buf, sizeof ( buf ) ); 00679 if ( len < 0 ) 00680 return len; 00681 if ( len > ( int ) sizeof ( buf ) ) 00682 return -ERANGE; 00683 00684 /* Convert to host-ordered signed long */ 00685 *value = ( ( buf.s8[0] >= 0 ) ? 0 : -1L ); 00686 for ( i = 0 ; i < len ; i++ ) { 00687 *value = ( ( *value << 8 ) | buf.u8[i] ); 00688 } 00689 00690 return len; 00691 }
| int fetch_uint_setting | ( | struct settings * | settings, | |
| struct setting * | setting, | |||
| unsigned long * | value | |||
| ) |
Fetch value of unsigned integer setting.
| settings | Settings block, or NULL to search all blocks | |
| setting | Setting to fetch | |
| value | Integer value to fill in |
| len | Length of setting, or negative error |
Definition at line 701 of file settings.c.
References assert, and fetch_int_setting().
Referenced by fetch_uintz_setting(), and fetchf_uint().
00702 { 00703 long svalue; 00704 int len; 00705 00706 /* Avoid returning uninitialised data on error */ 00707 *value = 0; 00708 00709 /* Fetch as a signed long */ 00710 len = fetch_int_setting ( settings, setting, &svalue ); 00711 if ( len < 0 ) 00712 return len; 00713 00714 /* Mask off sign-extended bits */ 00715 assert ( len <= ( int ) sizeof ( long ) ); 00716 *value = ( svalue & ( -1UL >> ( 8 * ( sizeof ( long ) - len ) ) ) ); 00717 00718 return len; 00719 }
Fetch value of signed integer setting, or zero.
| value | Setting value, or zero |
Definition at line 728 of file settings.c.
References fetch_int_setting().
Referenced by keep_san(), net80211_step_associate(), and reprioritise_settings().
00728 { 00729 long value; 00730 00731 fetch_int_setting ( settings, setting, &value ); 00732 return value; 00733 }
Fetch value of unsigned integer setting, or zero.
| value | Setting value, or zero |
Definition at line 742 of file settings.c.
References fetch_uint_setting().
Referenced by netboot(), start_dhcp(), and start_pxebs().
00743 { 00744 unsigned long value; 00745 00746 fetch_uint_setting ( settings, setting, &value ); 00747 return value; 00748 }
Fetch value of UUID setting.
| settings | Settings block, or NULL to search all blocks | |
| setting | Setting to fetch | |
| uuid | UUID to fill in |
| len | Length of setting, or negative error |
Definition at line 758 of file settings.c.
References ERANGE, and fetch_setting().
Referenced by dhcp_create_request(), and fetchf_uuid().
00759 { 00760 int len; 00761 00762 len = fetch_setting ( settings, setting, uuid, sizeof ( *uuid ) ); 00763 if ( len < 0 ) 00764 return len; 00765 if ( len != sizeof ( *uuid ) ) 00766 return -ERANGE; 00767 return len; 00768 }
| void clear_settings | ( | struct settings * | settings | ) |
Clear settings block.
| settings | Settings block |
Definition at line 775 of file settings.c.
References settings_operations::clear, and settings::op.
Referenced by free_netdev().
Compare two settings.
| a | Setting to compare | |
| b | Setting to compare |
| 0 | Settings are the same | |
| non-zero | Settings are not the same |
Definition at line 788 of file settings.c.
References setting::name, strcmp(), and setting::tag.
Referenced by find_generic_setting(), netdev_fetch(), netdev_store(), phantom_clp_setting(), and store_setting().
00788 { 00789 00790 /* If the settings have tags, compare them */ 00791 if ( a->tag && ( a->tag == b->tag ) ) 00792 return 0; 00793 00794 /* Otherwise, if the settings have names, compare them */ 00795 if ( a->name && b->name && a->name[0] ) 00796 return strcmp ( a->name, b->name ); 00797 00798 /* Otherwise, return a non-match */ 00799 return ( ! 0 ); 00800 }
| struct settings* find_settings | ( | const char * | name | ) | [read] |
Find named settings block.
| name | Name |
| settings | Settings block, or NULL |
Definition at line 358 of file settings.c.
References find_child_settings(), and parse_settings_name().
Referenced by config_exec(), create_fakepxebsack(), and pxe_menu_boot().
00358 { 00359 00360 return parse_settings_name ( name, find_child_settings ); 00361 }
Store value of typed setting.
| settings | Settings block | |
| setting | Setting to store | |
| type | Settings type | |
| value | Formatted setting data, or NULL |
| rc | Return status code |
Definition at line 818 of file settings.c.
References delete_setting(), setting_type::storef, and setting::type.
Referenced by save_setting(), and storef_named_setting().
00819 { 00820 00821 /* NULL value implies deletion. Avoid imposing the burden of 00822 * checking for NULL values on each typed setting's storef() 00823 * method. 00824 */ 00825 if ( ! value ) 00826 return delete_setting ( settings, setting ); 00827 00828 return setting->type->storef ( settings, setting, value ); 00829 }
| int storef_named_setting | ( | const char * | name, | |
| const char * | value | |||
| ) |
Parse and store value of named setting.
| rc | Return status code |
Definition at line 971 of file settings.c.
References autovivify_child_settings(), parse_setting_name(), storef_setting(), and strlen().
Referenced by delete_named_setting(), and set_exec().
00971 { 00972 struct settings *settings; 00973 struct setting setting; 00974 char tmp_name[ strlen ( name ) + 1 ]; 00975 int rc; 00976 00977 if ( ( rc = parse_setting_name ( name, autovivify_child_settings, 00978 &settings, &setting, tmp_name )) != 0) 00979 return rc; 00980 return storef_setting ( settings, &setting, value ); 00981 }
| int fetchf_named_setting | ( | const char * | name, | |
| char * | buf, | |||
| size_t | len | |||
| ) |
Fetch and format value of named setting.
| name | Name of setting | |
| buf | Buffer to contain formatted value | |
| len | Length of buffer |
| len | Length of formatted value, or negative error |
Definition at line 991 of file settings.c.
References fetchf_setting(), find_child_settings(), parse_setting_name(), and strlen().
Referenced by expand_command(), and show_exec().
00991 { 00992 struct settings *settings; 00993 struct setting setting; 00994 char tmp_name[ strlen ( name ) + 1 ]; 00995 int rc; 00996 00997 if ( ( rc = parse_setting_name ( name, find_child_settings, 00998 &settings, &setting, tmp_name )) != 0) 00999 return rc; 01000 return fetchf_setting ( settings, &setting, buf, len ); 01001 }
| static void settings_init | ( | struct settings * | settings, | |
| struct settings_operations * | op, | |||
| struct refcnt * | refcnt, | |||
| const char * | name, | |||
| unsigned int | tag_magic | |||
| ) | [inline, static] |
Initialise a settings block.
| settings | Settings block | |
| op | Settings block operations | |
| refcnt | Containing object reference counter, or NULL | |
| name | Settings block name | |
| tag_magic | Tag magic |
Definition at line 257 of file settings.h.
References settings::children, INIT_LIST_HEAD, settings::name, settings::op, settings::refcnt, settings::siblings, and settings::tag_magic.
Referenced by dhcppkt_init(), generic_settings_init(), nvo_init(), and phantom_probe().
00261 { 00262 INIT_LIST_HEAD ( &settings->siblings ); 00263 INIT_LIST_HEAD ( &settings->children ); 00264 settings->op = op; 00265 settings->refcnt = refcnt; 00266 settings->name = name; 00267 settings->tag_magic = tag_magic; 00268 }
| static void generic_settings_init | ( | struct generic_settings * | generics, | |
| struct refcnt * | refcnt, | |||
| const char * | name | |||
| ) | [inline, static] |
Initialise a settings block.
| generics | Generic settings block | |
| refcnt | Containing object reference counter, or NULL | |
| name | Settings block name |
Definition at line 277 of file settings.h.
References generic_settings_operations, INIT_LIST_HEAD, generic_settings::list, generic_settings::settings, and settings_init().
Referenced by autovivify_child_settings(), and netdev_settings_init().
00279 { 00280 settings_init ( &generics->settings, &generic_settings_operations, 00281 refcnt, name, 0 ); 00282 INIT_LIST_HEAD ( &generics->list ); 00283 }
Delete setting.
| rc | Return status code |
Definition at line 292 of file settings.h.
References NULL, and store_setting().
Referenced by storef_setting().
00293 { 00294 return store_setting ( settings, setting, NULL, 0 ); 00295 }
| static int fetchf_setting | ( | struct settings * | settings, | |
| struct setting * | setting, | |||
| char * | buf, | |||
| size_t | len | |||
| ) | [inline, static] |
Fetch and format value of setting.
| settings | Settings block, or NULL to search all blocks | |
| setting | Setting to fetch | |
| type | Settings type | |
| buf | Buffer to contain formatted value | |
| len | Length of buffer |
| len | Length of formatted value, or negative error |
Definition at line 307 of file settings.h.
References setting_type::fetchf, and setting::type.
Referenced by fetchf_named_setting(), and load_setting().
| static int delete_named_setting | ( | const char * | name | ) | [inline, static] |
Delete named setting.
| name | Name of setting |
| rc | Return status code |
Definition at line 319 of file settings.h.
References NULL, and storef_named_setting().
Referenced by clear_exec().
00319 { 00320 return storef_named_setting ( name, NULL ); 00321 }
Check existence of setting.
| exists | Setting exists |
Definition at line 330 of file settings.h.
References fetch_setting_len().
Referenced by netboot().
00331 { 00332 return ( fetch_setting_len ( settings, setting ) >= 0 ); 00333 }
Generic settings operations.
Definition at line 203 of file settings.c.
Referenced by generic_settings_init().
struct setting_type setting_type_uuid __setting_type [read] |
A string setting type.
UUID setting type.
A hex-string setting.
An unsigned 32-bit integer setting type.
An unsigned 16-bit integer setting type.
An unsigned 8-bit integer setting type.
A signed 32-bit integer setting type.
A signed 16-bit integer setting type.
A signed 8-bit integer setting type.
An IPv4 address setting type.
A URI-encoded string setting type.
Definition at line 221 of file settings.h.
1.5.7.1