settings.h File Reference

Configuration settings. More...

#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 settingsfind_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.


Detailed Description

Configuration settings.

Definition in file settings.h.


Define Documentation

#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 )

Declare a settings applicator.

Definition at line 158 of file settings.h.


Function Documentation

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.

Parameters:
settings Settings block
setting Setting to store
data Setting data, or NULL to clear setting
len Length of setting data
Return values:
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.

Parameters:
settings Settings block
setting Setting to fetch
data Buffer to fill with setting data
len Length of buffer
Return values:
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.

Parameters:
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 }

int register_settings ( struct settings settings,
struct settings parent 
)

Register settings block.

Parameters:
settings Settings block
parent Parent settings block, or NULL
Return values:
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.

Parameters:
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.

Parameters:
settings Settings block, or NULL
setting Setting to store
data Setting data, or NULL to clear setting
len Length of setting data
Return values:
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 }

int fetch_setting ( struct settings settings,
struct setting setting,
void *  data,
size_t  len 
)

Fetch value of setting.

Parameters:
settings Settings block, or NULL to search all blocks
setting Setting to fetch
data Buffer to fill with setting data
len Length of buffer
Return values:
len Length of setting data, or negative error
The actual length of the setting will be returned even if the buffer was too small.

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 }

int fetch_setting_len ( struct settings settings,
struct setting setting 
)

Fetch length of setting.

Parameters:
settings Settings block, or NULL to search all blocks
setting Setting to fetch
Return values:
len Length of setting data, or negative error
This function can also be used as an existence check for the setting.

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.

Parameters:
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
Return values:
len Length of string setting, or negative error
The resulting string is guaranteed to be correctly NUL-terminated. The returned length will be the length of the underlying setting data.

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.

Parameters:
settings Settings block, or NULL to search all blocks
setting Setting to fetch
data Buffer to allocate and fill with setting string data
Return values:
len Length of string setting, or negative error
The resulting string is guaranteed to be correctly NUL-terminated. The returned length will be the length of the underlying setting data. The caller is responsible for eventually freeing the allocated buffer.

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.

Parameters:
settings Settings block, or NULL to search all blocks
setting Setting to fetch
inp IPv4 address to fill in
Return values:
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 }

int fetch_int_setting ( struct settings settings,
struct setting setting,
long *  value 
)

Fetch value of signed integer setting.

Parameters:
settings Settings block, or NULL to search all blocks
setting Setting to fetch
value Integer value to fill in
Return values:
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.

Parameters:
settings Settings block, or NULL to search all blocks
setting Setting to fetch
value Integer value to fill in
Return values:
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 }

long fetch_intz_setting ( struct settings settings,
struct setting setting 
)

Fetch value of signed integer setting, or zero.

Parameters:
settings Settings block, or NULL to search all blocks
setting Setting to fetch
Return values:
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 }

unsigned long fetch_uintz_setting ( struct settings settings,
struct setting setting 
)

Fetch value of unsigned integer setting, or zero.

Parameters:
settings Settings block, or NULL to search all blocks
setting Setting to fetch
Return values:
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 }

int fetch_uuid_setting ( struct settings settings,
struct setting setting,
union uuid uuid 
)

Fetch value of UUID setting.

Parameters:
settings Settings block, or NULL to search all blocks
setting Setting to fetch
uuid UUID to fill in
Return values:
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.

Parameters:
settings Settings block

Definition at line 775 of file settings.c.

References settings_operations::clear, and settings::op.

Referenced by free_netdev().

00775                                                   {
00776         if ( settings->op->clear )
00777                 settings->op->clear ( settings );
00778 }

int setting_cmp ( struct setting a,
struct setting b 
)

Compare two settings.

Parameters:
a Setting to compare
b Setting to compare
Return values:
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.

Parameters:
name Name
Return values:
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 }

int storef_setting ( struct settings settings,
struct setting setting,
const char *  value 
)

Store value of typed setting.

Parameters:
settings Settings block
setting Setting to store
type Settings type
value Formatted setting data, or NULL
Return values:
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.

Parameters:
name Name of setting
value Formatted setting data, or NULL
Return values:
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.

Parameters:
name Name of setting
buf Buffer to contain formatted value
len Length of buffer
Return values:
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.

Parameters:
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.

Parameters:
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 }

static int delete_setting ( struct settings settings,
struct setting setting 
) [inline, static]

Delete setting.

Parameters:
settings Settings block
setting Setting to delete
Return values:
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.

Parameters:
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
Return values:
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().

00309                                                            {
00310         return setting->type->fetchf ( settings, setting, buf, len );
00311 }

static int delete_named_setting ( const char *  name  )  [inline, static]

Delete named setting.

Parameters:
name Name of setting
Return values:
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 }

static int setting_exists ( struct settings settings,
struct setting setting 
) [inline, static]

Check existence of setting.

Parameters:
settings Settings block, or NULL to search all blocks
setting Setting to fetch
Return values:
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 }


Variable Documentation

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.


Generated on Tue Apr 6 20:01:52 2010 for gPXE by  doxygen 1.5.7.1