iPXE
settings.c File Reference

Configuration settings. More...

#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <byteswap.h>
#include <errno.h>
#include <assert.h>
#include <time.h>
#include <ipxe/in.h>
#include <ipxe/ip.h>
#include <ipxe/ipv6.h>
#include <ipxe/vsprintf.h>
#include <ipxe/dhcp.h>
#include <ipxe/uuid.h>
#include <ipxe/uri.h>
#include <ipxe/base16.h>
#include <ipxe/base64.h>
#include <ipxe/pci.h>
#include <ipxe/init.h>
#include <ipxe/version.h>
#include <ipxe/settings.h>

Go to the source code of this file.

Data Structures

struct  generic_setting
 A generic setting. More...
struct  autovivified_settings
 Autovivified settings block. More...

Macros

#define settings_root   generic_settings_root.settings
 Root settings block.
#define SETTING_TYPE_UINT_NAME(index)
 Get unsigned integer setting type name.
#define SETTING_TYPE_INT_NAME(index)
 Get signed integer setting type name.
#define SETTING_TYPE_INT(index)
 Define a signed integer setting type.
#define SETTING_TYPE_UINT(index)
 Define an unsigned integer setting type.

Enumerations

enum  setting_type_int_index { SETTING_TYPE_INT8 = 0 , SETTING_TYPE_INT16 = 1 , SETTING_TYPE_INT32 = 2 }
 Integer setting type indices. More...

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 FILE_SECBOOT (PERMITTED)
static void * generic_setting_name (struct generic_setting *generic)
 Get generic setting name.
static void * generic_setting_data (struct generic_setting *generic)
 Get generic setting data.
static struct generic_settingfind_generic_setting (struct generic_settings *generics, const struct setting *setting)
 Find generic setting.
int generic_settings_store (struct settings *settings, const 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.
static void autovivified_settings_free (struct refcnt *refcnt)
 Free autovivified settings block.
struct settingsfind_child_settings (struct settings *parent, const char *name)
 Find child settings block.
struct settingsautovivify_child_settings (struct settings *parent, const char *name)
 Find or create child settings block.
const char * settings_name (struct settings *settings)
 Return settings block name.
static struct settingsparse_settings_name (const char *name, get_child_settings_t get_child)
 Parse settings block name.
struct settingsfind_settings (const char *name)
 Find settings block.
static void apply_settings (void)
 Apply all settings.
static void reprioritise_settings (struct settings *settings)
 Reprioritise settings.
int register_settings (struct settings *settings, struct settings *parent, const char *name)
 Register settings block.
void unregister_settings (struct settings *settings)
 Unregister settings block.
struct settingssettings_target (struct settings *settings)
 Redirect to target settings block.
int setting_applies (struct settings *settings, const struct setting *setting)
 Check applicability of setting.
static const struct settingapplicable_setting (struct settings *settings, const struct setting *setting)
 Find setting applicable to settings block, if any.
int store_setting (struct settings *settings, const struct setting *setting, const void *data, size_t len)
 Store value of setting.
int fetch_setting (struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, void *data, size_t len)
 Fetch setting.
static int fetch_setting_alloc (struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, void **data, void *(*alloc)(size_t len))
 Fetch allocated copy of setting.
int fetch_setting_copy (struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, void **data)
 Fetch copy of setting.
int fetch_raw_setting (struct settings *settings, const struct setting *setting, void *data, size_t len)
 Fetch value of setting.
int fetch_raw_setting_copy (struct settings *settings, const struct setting *setting, void **data)
 Fetch value of setting.
int fetch_string_setting (struct settings *settings, const struct setting *setting, char *data, size_t len)
 Fetch value of string setting.
static void * fetch_string_setting_copy_alloc (size_t len)
 Allocate memory for copy of string setting.
int fetch_string_setting_copy (struct settings *settings, const struct setting *setting, char **data)
 Fetch value of string setting.
int fetch_ipv4_array_setting (struct settings *settings, const struct setting *setting, struct in_addr *inp, unsigned int count)
 Fetch value of IPv4 address setting.
int fetch_ipv4_setting (struct settings *settings, const struct setting *setting, struct in_addr *inp)
 Fetch value of IPv4 address setting.
int fetch_ipv6_array_setting (struct settings *settings, const struct setting *setting, struct in6_addr *inp, unsigned int count)
 Fetch value of IPv6 address setting.
int fetch_ipv6_setting (struct settings *settings, const struct setting *setting, struct in6_addr *inp)
 Fetch value of IPv6 address setting.
static int numeric_setting_value (int is_signed, const void *raw, size_t len, unsigned long *value)
 Extract numeric value of setting.
int fetch_numeric_setting (struct settings *settings, const struct setting *setting, unsigned long *value, int is_signed)
 Fetch value of numeric setting.
int fetch_int_setting (struct settings *settings, const struct setting *setting, long *value)
 Fetch value of signed integer setting.
int fetch_uint_setting (struct settings *settings, const struct setting *setting, unsigned long *value)
 Fetch value of unsigned integer setting.
long fetch_intz_setting (struct settings *settings, const struct setting *setting)
 Fetch value of signed integer setting, or zero.
unsigned long fetch_uintz_setting (struct settings *settings, const struct setting *setting)
 Fetch value of unsigned integer setting, or zero.
int fetch_uuid_setting (struct settings *settings, const struct setting *setting, union uuid *uuid)
 Fetch value of UUID setting.
void clear_settings (struct settings *settings)
 Clear settings block.
int setting_cmp (const struct setting *a, const struct setting *b)
 Compare two settings.
int setting_format (const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len)
 Format setting value as a string.
int setting_parse (const struct setting_type *type, const char *value, void *buf, size_t len)
 Parse formatted string to setting value.
int setting_numerate (const struct setting_type *type, const void *raw, size_t raw_len, unsigned long *value)
 Convert setting value to number.
int setting_denumerate (const struct setting_type *type, unsigned long value, void *buf, size_t len)
 Convert number to setting value.
int fetchf_setting (struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, char *buf, size_t len)
 Fetch formatted value of setting.
int fetchf_setting_copy (struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, char **value)
 Fetch copy of formatted value of setting.
int storef_setting (struct settings *settings, const struct setting *setting, const char *value)
 Store formatted value of setting.
int fetchn_setting (struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, unsigned long *value)
 Fetch numeric value of setting.
int storen_setting (struct settings *settings, const struct setting *setting, unsigned long value)
 Store numeric value of setting.
struct settingfind_setting (const char *name)
 Find predefined setting.
static uint64_t parse_setting_tag (const char *name)
 Parse setting name as tag number.
static const struct setting_typefind_setting_type (const char *name)
 Find setting type.
int parse_setting_name (char *name, get_child_settings_t get_child, struct settings **settings, struct setting *setting)
 Parse setting name.
int setting_name (struct settings *settings, const struct setting *setting, char *buf, size_t len)
 Return full setting name.
static int parse_string_setting (const struct setting_type *type __unused, const char *value, void *buf, size_t len)
 Parse string setting value.
static int format_string_setting (const struct setting_type *type __unused, const void *raw, size_t raw_len, char *buf, size_t len)
 Format string setting value.
static int parse_uristring_setting (const struct setting_type *type __unused, const char *value, void *buf, size_t len)
 Parse URI-encoded string setting value.
static int format_uristring_setting (const struct setting_type *type __unused, const void *raw, size_t raw_len, char *buf, size_t len)
 Format URI-encoded string setting value.
__weak int parse_ipv4_setting (const struct setting_type *type __unused, const char *value __unused, void *buf __unused, size_t len __unused)
 Parse IPv4 address setting value (when IPv4 support is not present).
__weak int format_ipv4_setting (const struct setting_type *type __unused, const void *raw __unused, size_t raw_len __unused, char *buf __unused, size_t len __unused)
 Format IPv4 address setting value (when IPv4 support is not present).
__weak int parse_ipv6_setting (const struct setting_type *type __unused, const char *value __unused, void *buf __unused, size_t len __unused)
 Parse IPv6 address setting value (when IPv6 support is not present).
__weak int format_ipv6_setting (const struct setting_type *type __unused, const void *raw __unused, size_t raw_len __unused, char *buf __unused, size_t len __unused)
 Format IPv6 address setting value (when IPv6 support is not present).
static unsigned int setting_type_int_index (const struct setting_type *type)
 Get integer setting type index.
static unsigned int setting_type_int_width (const struct setting_type *type)
 Get integer setting type width.
static int setting_type_int_is_signed (const struct setting_type *type)
 Get integer setting type signedness.
static int denumerate_int_setting (const struct setting_type *type, unsigned long value, void *buf, size_t len)
 Convert number to setting value.
static int numerate_int_setting (const struct setting_type *type, const void *raw, size_t raw_len, unsigned long *value)
 Convert setting value to number.
static int parse_int_setting (const struct setting_type *type, const char *value, void *buf, size_t len)
 Parse integer setting value.
static int format_int_setting (const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len)
 Format signed integer setting value.
static int format_uint_setting (const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len)
 Format unsigned integer setting value.
static int parse_hex_setting (const struct setting_type *type __unused, const char *value, void *buf, size_t len)
 Parse hex string setting value (using colon delimiter).
static int format_hex_colon_setting (const struct setting_type *type __unused, const void *raw, size_t raw_len, char *buf, size_t len)
 Format hex string setting value (using colon delimiter).
static int parse_hex_hyphen_setting (const struct setting_type *type __unused, const char *value, void *buf, size_t len)
 Parse hex string setting value (using hyphen delimiter).
static int format_hex_hyphen_setting (const struct setting_type *type __unused, const void *raw, size_t raw_len, char *buf, size_t len)
 Format hex string setting value (using hyphen delimiter).
static int parse_hex_raw_setting (const struct setting_type *type __unused, const char *value, void *buf, size_t len)
 Parse hex string setting value (using no delimiter).
static int format_hex_raw_setting (const struct setting_type *type __unused, const void *raw, size_t raw_len, char *buf, size_t len)
 Format hex string setting value (using no delimiter).
static int parse_base64_setting (const struct setting_type *type __unused, const char *value, void *buf, size_t len)
 Parse Base64-encoded setting value.
static int format_base64_setting (const struct setting_type *type __unused, const void *raw, size_t raw_len, char *buf, size_t len)
 Format Base64-encoded setting value.
static int parse_uuid_setting (const struct setting_type *type, const char *value, void *buf, size_t len)
 Parse UUID/GUID setting value.
static int format_uuid_setting (const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len)
 Format UUID/GUID setting value.
static int format_busdevfn_setting (const struct setting_type *type __unused, const void *raw, size_t raw_len, char *buf, size_t len)
 Format PCI bus:dev.fn setting value.
char * expand_settings (const char *string)
 Expand variables within string.
const struct setting hostname_setting __setting (SETTING_HOST, hostname)
 Hostname setting.
const struct setting domain_setting __setting (SETTING_IP_EXTRA, domain)
 Domain name setting.
const struct setting next_server_setting __setting (SETTING_BOOT, next-server)
 TFTP server setting.
const struct setting filename_setting __setting (SETTING_BOOT, filename)
 Filename setting.
const struct setting root_path_setting __setting (SETTING_SANBOOT, root-path)
 Root path setting.
const struct setting san_filename_setting __setting (SETTING_SANBOOT, san-filename)
 SAN filename setting.
const struct setting username_setting __setting (SETTING_AUTH, username)
 Username setting.
const struct setting password_setting __setting (SETTING_AUTH, password)
 Password setting.
const struct setting priority_setting __setting (SETTING_MISC, priority)
 Priority setting.
const struct setting user_class_setting __setting (SETTING_HOST_EXTRA, user-class)
 DHCP user class setting.
const struct setting vendor_class_setting __setting (SETTING_HOST_EXTRA, vendor-class)
 DHCP vendor class setting.
static int errno_fetch (void *data, size_t len)
 Fetch error number setting.
const struct setting errno_setting __setting (SETTING_MISC, errno)
 Error number setting.
static int buildarch_fetch (void *data, size_t len)
 Fetch build architecture setting.
const struct setting buildarch_setting __setting (SETTING_MISC, buildarch)
 Build architecture setting.
static int platform_fetch (void *data, size_t len)
 Fetch platform setting.
const struct setting platform_setting __setting (SETTING_MISC, platform)
 Platform setting.
static int version_fetch (void *data, size_t len)
 Fetch version setting.
const struct setting version_setting __setting (SETTING_MISC, version)
 Version setting.
static int unixtime_fetch (void *data, size_t len)
 Fetch current time setting.
static int unixtime_store (const void *data, size_t len)
 Store current time setting.
const struct setting unixtime_setting __setting (SETTING_MISC, unixtime)
 Current time setting.
static int cwuri_fetch_uri (void *data, size_t len, const char *rel)
 Fetch current working URI-related setting.
static int cwuri_fetch (void *data, size_t len)
 Fetch current working URI setting.
static int cwduri_fetch (void *data, size_t len)
 Fetch current working directory URI setting.
const struct setting cwuri_setting __setting (SETTING_MISC, cwuri)
 Current working URI setting.
const struct setting cwduri_setting __setting (SETTING_MISC, cwduri)
 Current working directory URI setting.
static int builtin_store (struct settings *settings __unused, const struct setting *setting, const void *data, size_t len)
 Store built-in setting.
static int builtin_fetch (struct settings *settings __unused, struct setting *setting, void *data, size_t len)
 Fetch built-in setting.
static int builtin_applies (struct settings *settings __unused, const struct setting *setting)
 Check applicability of built-in setting.
static void builtin_init (void)
 Initialise built-in settings.
struct init_fn builtin_init_fn __init_fn (INIT_NORMAL)
 Built-in settings initialiser.

Variables

struct settings_operations generic_settings_operations
 Generic settings operations.
struct generic_settings generic_settings_root
 Root generic settings block.
const struct setting_type setting_type_string __setting_type
 A string setting type.
const struct settings_scope dhcpv6_scope
 IPv6 settings scope.
static const char setting_type_int_name [][8]
 Integer setting type names.
const struct settings_scope builtin_scope
 Built-in setting scope.
struct builtin_setting errno_builtin_setting __builtin_setting
 Error number built-in setting.
static struct settings_operations builtin_settings_operations
 Built-in settings operations.
static struct settings builtin_settings
 Built-in settings.

Detailed Description

Configuration settings.

Definition in file settings.c.

Macro Definition Documentation

◆ settings_root

#define settings_root   generic_settings_root.settings

Root settings block.

Definition at line 250 of file settings.c.

Referenced by parse_setting_name(), parse_settings_name(), settings_target(), and store_setting().

◆ SETTING_TYPE_UINT_NAME

#define SETTING_TYPE_UINT_NAME ( index)
Value:
long index
Definition bigint.h:30
static const char setting_type_int_name[][8]
Integer setting type names.
Definition settings.c:1826

Get unsigned integer setting type name.

Parameters
indexInteger setting type index
Return values
nameSetting type name

Definition at line 1838 of file settings.c.

◆ SETTING_TYPE_INT_NAME

#define SETTING_TYPE_INT_NAME ( index)
Value:

Get signed integer setting type name.

Parameters
indexInteger setting type index
Return values
nameSetting type name

Definition at line 1846 of file settings.c.

◆ SETTING_TYPE_INT

#define SETTING_TYPE_INT ( index)
Value:
{ \
.parse = parse_int_setting, \
.format = format_int_setting, \
.denumerate = denumerate_int_setting, \
.numerate = numerate_int_setting, \
}
static int numerate_int_setting(const struct setting_type *type, const void *raw, size_t raw_len, unsigned long *value)
Convert setting value to number.
Definition settings.c:1916
#define SETTING_TYPE_INT_NAME(index)
Get signed integer setting type name.
Definition settings.c:1846
static int parse_int_setting(const struct setting_type *type, const char *value, void *buf, size_t len)
Parse integer setting value.
Definition settings.c:1940
static int format_int_setting(const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len)
Format signed integer setting value.
Definition settings.c:1963
static int denumerate_int_setting(const struct setting_type *type, unsigned long value, void *buf, size_t len)
Convert number to setting value.
Definition settings.c:1890

Define a signed integer setting type.

Parameters
indexInteger setting type index
Return values
typeSetting type

Definition at line 2007 of file settings.c.

2007#define SETTING_TYPE_INT( index ) { \
2008 .name = SETTING_TYPE_INT_NAME ( index ), \
2009 .parse = parse_int_setting, \
2010 .format = format_int_setting, \
2011 .denumerate = denumerate_int_setting, \
2012 .numerate = numerate_int_setting, \
2013}

◆ SETTING_TYPE_UINT

#define SETTING_TYPE_UINT ( index)
Value:
{ \
.parse = parse_int_setting, \
.format = format_uint_setting, \
.denumerate = denumerate_int_setting, \
.numerate = numerate_int_setting, \
}
static int format_uint_setting(const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len)
Format unsigned integer setting value.
Definition settings.c:1987
#define SETTING_TYPE_UINT_NAME(index)
Get unsigned integer setting type name.
Definition settings.c:1838

Define an unsigned integer setting type.

Parameters
indexInteger setting type index
Return values
typeSetting type

Definition at line 2021 of file settings.c.

2021#define SETTING_TYPE_UINT( index ) { \
2022 .name = SETTING_TYPE_UINT_NAME ( index ), \
2023 .parse = parse_int_setting, \
2024 .format = format_uint_setting, \
2025 .denumerate = denumerate_int_setting, \
2026 .numerate = numerate_int_setting, \
2027}

Enumeration Type Documentation

◆ setting_type_int_index

Integer setting type indices.

These indexes are defined such that (1<<index) gives the width of the integer, in bytes.

Enumerator
SETTING_TYPE_INT8 
SETTING_TYPE_INT16 
SETTING_TYPE_INT32 

Definition at line 1811 of file settings.c.

1811 {
1815};
@ SETTING_TYPE_INT8
Definition settings.c:1812
@ SETTING_TYPE_INT16
Definition settings.c:1813
@ SETTING_TYPE_INT32
Definition settings.c:1814

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED )

◆ generic_setting_name()

void * generic_setting_name ( struct generic_setting * generic)
inlinestatic

Get generic setting name.

Parameters
genericGeneric setting
Return values
nameGeneric setting name

Definition at line 84 of file settings.c.

84 {
85 return ( ( ( void * ) generic ) + sizeof ( *generic ) );
86}
struct arbelprm_event_queue_entry generic
Definition arbel.h:0

References generic.

Referenced by generic_settings_store().

◆ generic_setting_data()

void * generic_setting_data ( struct generic_setting * generic)
inlinestatic

Get generic setting data.

Parameters
genericGeneric setting
Return values
dataGeneric setting data

Definition at line 94 of file settings.c.

94 {
95 return ( ( ( void * ) generic ) + sizeof ( *generic ) +
96 generic->name_len );
97}

References generic.

Referenced by generic_settings_fetch(), and generic_settings_store().

◆ find_generic_setting()

struct generic_setting * find_generic_setting ( struct generic_settings * generics,
const struct setting * setting )
static

Find generic setting.

Parameters
genericsGeneric settings block
settingSetting to find
Return values
genericGeneric setting, or NULL

Definition at line 107 of file settings.c.

108 {
109 struct generic_setting *generic;
110
111 list_for_each_entry ( generic, &generics->list, list ) {
112 if ( setting_cmp ( &generic->setting, setting ) == 0 )
113 return generic;
114 }
115 return NULL;
116}
#define NULL
NULL pointer (VOID *).
Definition Base.h:321
#define list_for_each_entry(pos, head, member)
Iterate over entries in a list.
Definition list.h:432
int setting_cmp(const struct setting *a, const struct setting *b)
Compare two settings.
Definition settings.c:1131
A generic setting.
Definition settings.c:67
struct list_head list
List of generic settings.
Definition settings.c:69
struct list_head list
List of generic settings.
Definition settings.h:311
A setting.
Definition settings.h:24

References generic, generic_setting::list, generic_settings::list, list_for_each_entry, NULL, and setting_cmp().

Referenced by generic_settings_fetch(), and generic_settings_store().

◆ generic_settings_store()

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

Store value of generic setting.

Parameters
settingsSettings block
settingSetting to store
dataSetting data, or NULL to clear setting
lenLength of setting data
Return values
rcReturn status code

Definition at line 127 of file settings.c.

129 {
130 struct generic_settings *generics =
132 struct generic_setting *old;
133 struct generic_setting *new = NULL;
134 size_t name_len;
135
136 /* Identify existing generic setting, if any */
137 old = find_generic_setting ( generics, setting );
138
139 /* Create new generic setting, if required */
140 if ( len ) {
141 /* Allocate new generic setting */
142 name_len = ( strlen ( setting->name ) + 1 );
143 new = zalloc ( sizeof ( *new ) + name_len + len );
144 if ( ! new )
145 return -ENOMEM;
146
147 /* Populate new generic setting */
148 new->name_len = name_len;
149 new->data_len = len;
150 memcpy ( &new->setting, setting, sizeof ( new->setting ) );
151 new->setting.name = generic_setting_name ( new );
154 memcpy ( generic_setting_data ( new ), data, len );
155 }
156
157 /* Delete existing generic setting, if any */
158 if ( old ) {
159 list_del ( &old->list );
160 free ( old );
161 }
162
163 /* Add new setting to list, if any */
164 if ( new )
165 list_add ( &new->list, &generics->list );
166
167 return 0;
168}
int old
Definition bitops.h:65
ring len
Length.
Definition dwmac.h:226
uint8_t data[48]
Additional event data.
Definition ena.h:11
#define ENOMEM
Not enough space.
Definition errno.h:578
void * memcpy(void *dest, const void *src, size_t len) __nonnull
#define list_del(list)
Delete an entry from a list.
Definition list.h:120
#define list_add(new, head)
Add a new entry to the head of a list.
Definition list.h:70
void * zalloc(size_t size)
Allocate cleared memory.
Definition malloc.c:718
static void(* free)(struct refcnt *refcnt))
Definition refcnt.h:55
static struct generic_setting * find_generic_setting(struct generic_settings *generics, const struct setting *setting)
Find generic setting.
Definition settings.c:107
static void * generic_setting_data(struct generic_setting *generic)
Get generic setting data.
Definition settings.c:94
static void * generic_setting_name(struct generic_setting *generic)
Get generic setting name.
Definition settings.c:84
#define container_of(ptr, type, field)
Get containing structure.
Definition stddef.h:36
size_t strlen(const char *src)
Get length of string.
Definition string.c:244
size_t name_len
Size of setting name.
Definition settings.c:73
A generic settings block.
Definition settings.h:307
const char * name
Name.
Definition settings.h:29
A settings block.
Definition settings.h:133

References container_of, data, ENOMEM, find_generic_setting(), free, generic_setting_data(), generic_setting_name(), len, generic_settings::list, list_add, list_del, memcpy(), setting::name, generic_setting::name_len, NULL, old, strlen(), and zalloc().

Referenced by netdev_store().

◆ generic_settings_fetch()

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

Fetch value of generic setting.

Parameters
settingsSettings block
settingSetting to fetch
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 179 of file settings.c.

181 {
182 struct generic_settings *generics =
184 struct generic_setting *generic;
185
186 /* Find generic setting */
187 generic = find_generic_setting ( generics, setting );
188 if ( ! generic )
189 return -ENOENT;
190
191 /* Copy out generic setting data */
192 if ( len > generic->data_len )
193 len = generic->data_len;
195
196 /* Set setting type, if not yet specified */
197 if ( ! setting->type )
198 setting->type = generic->setting.type;
199
200 return generic->data_len;
201}
#define ENOENT
No such file or directory.
Definition errno.h:558
const struct setting_type * type
Setting type.
Definition settings.h:37

References container_of, data, ENOENT, find_generic_setting(), generic, generic_setting_data(), len, memcpy(), and setting::type.

Referenced by netdev_fetch().

◆ generic_settings_clear()

void generic_settings_clear ( struct settings * settings)

Clear generic settings block.

Parameters
settingsSettings block

Definition at line 208 of file settings.c.

208 {
209 struct generic_settings *generics =
211 struct generic_setting *generic;
212 struct generic_setting *tmp;
213
214 list_for_each_entry_safe ( generic, tmp, &generics->list, list ) {
215 list_del ( &generic->list );
216 free ( generic );
217 }
218 assert ( list_empty ( &generics->list ) );
219}
#define assert(condition)
Assert a condition at run-time.
Definition assert.h:61
unsigned long tmp
Definition linux_pci.h:65
#define list_for_each_entry_safe(pos, tmp, head, member)
Iterate over entries in a list, safe against deletion of the current entry.
Definition list.h:459
#define list_empty(list)
Test whether a list is empty.
Definition list.h:137

References assert, container_of, free, generic, generic_setting::list, generic_settings::list, list_del, list_empty, list_for_each_entry_safe, and tmp.

Referenced by autovivified_settings_free(), and netdev_clear().

◆ autovivified_settings_free()

void autovivified_settings_free ( struct refcnt * refcnt)
static

Free autovivified settings block.

Parameters
refcntReference count

Definition at line 265 of file settings.c.

265 {
266 struct autovivified_settings *autovivified =
268
269 generic_settings_clear ( &autovivified->generic.settings );
270 free ( autovivified );
271}
void generic_settings_clear(struct settings *settings)
Clear generic settings block.
Definition settings.c:208
Autovivified settings block.
Definition settings.c:253
struct generic_settings generic
Generic settings block.
Definition settings.c:257
struct settings settings
Settings block.
Definition settings.h:309
A reference counter.
Definition refcnt.h:27

References container_of, free, autovivified_settings::generic, generic_settings_clear(), and generic_settings::settings.

Referenced by autovivify_child_settings().

◆ find_child_settings()

struct settings * find_child_settings ( struct settings * parent,
const char * name )

Find child settings block.

Parameters
parentParent settings block
nameName within this parent
Return values
settingsSettings block, or NULL

Definition at line 280 of file settings.c.

281 {
282 struct settings *settings;
283
284 /* Find target parent settings block */
286
287 /* Treat empty name as meaning "this block" */
288 if ( ! *name )
289 return parent;
290
291 /* Look for child with matching name */
293 if ( strcmp ( settings->name, name ) == 0 )
294 return settings_target ( settings );
295 }
296
297 return NULL;
298}
const char * name
Definition ath9k_hw.c:1986
struct settings * settings_target(struct settings *settings)
Redirect to target settings block.
Definition settings.c:550
int strcmp(const char *first, const char *second)
Compare strings.
Definition string.c:174
struct list_head children
Child settings blocks.
Definition settings.h:143
const char * name
Name.
Definition settings.h:137
struct settings * parent
Parent settings block.
Definition settings.h:139
struct list_head siblings
Sibling settings blocks.
Definition settings.h:141

References settings::children, list_for_each_entry, name, settings::name, NULL, settings_target(), and strcmp().

Referenced by autovivify_child_settings(), cachedhcp_recycle(), efi_path_net_probe(), efi_snp_hii_settings(), expand_settings(), find_settings(), parse_existing_setting(), and register_settings().

◆ autovivify_child_settings()

struct settings * autovivify_child_settings ( struct settings * parent,
const char * name )

Find or create child settings block.

Parameters
parentParent settings block
nameName within this parent
Return values
settingsSettings block, or NULL

Definition at line 307 of file settings.c.

308 {
309 struct {
310 struct autovivified_settings autovivified;
311 char name[ strlen ( name ) + 1 /* NUL */ ];
312 } *new_child;
313 struct settings *settings;
314
315 /* Find target parent settings block */
317
318 /* Return existing settings, if existent */
319 if ( ( settings = find_child_settings ( parent, name ) ) != NULL )
320 return settings;
321
322 /* Create new generic settings block */
323 new_child = zalloc ( sizeof ( *new_child ) );
324 if ( ! new_child ) {
325 DBGC ( parent, "Settings %p could not create child %s\n",
326 parent, name );
327 return NULL;
328 }
329 memcpy ( new_child->name, name, sizeof ( new_child->name ) );
330 ref_init ( &new_child->autovivified.refcnt,
332 generic_settings_init ( &new_child->autovivified.generic,
333 &new_child->autovivified.refcnt );
334 settings = &new_child->autovivified.generic.settings;
335 register_settings ( settings, parent, new_child->name );
337 return settings;
338}
#define DBGC(...)
Definition compiler.h:530
static void generic_settings_init(struct generic_settings *generics, struct refcnt *refcnt)
Initialise a settings block.
Definition settings.h:528
#define ref_put(refcnt)
Drop reference to object.
Definition refcnt.h:107
#define ref_init(refcnt, free)
Initialise a reference counter.
Definition refcnt.h:65
int register_settings(struct settings *settings, struct settings *parent, const char *name)
Register settings block.
Definition settings.c:476
static void autovivified_settings_free(struct refcnt *refcnt)
Free autovivified settings block.
Definition settings.c:265
struct settings * find_child_settings(struct settings *parent, const char *name)
Find child settings block.
Definition settings.c:280
struct refcnt * refcnt
Reference counter.
Definition settings.h:135

References autovivified_settings_free(), DBGC, find_child_settings(), generic_settings_init(), memcpy(), name, settings::name, NULL, ref_init, ref_put, settings::refcnt, register_settings(), settings_target(), strlen(), and zalloc().

Referenced by nslookup_resolv_done(), parse_autovivified_setting(), parse_names(), and testnet_set_okx().

◆ settings_name()

const char * settings_name ( struct settings * settings)

Return settings block name.

Parameters
settingsSettings block
Return values
nameSettings block name

Definition at line 346 of file settings.c.

346 {
347 static char buf[16];
348 char tmp[ 1 /* '.' */ + sizeof ( buf ) ];
349
350 /* Find target settings block */
352
353 /* Construct name */
354 buf[0] = '\0';
355 tmp[0] = '\0';
356 for ( ; settings->parent ; settings = settings->parent ) {
357 memcpy ( ( tmp + 1 ), buf, ( sizeof ( tmp ) - 1 ) );
358 snprintf ( buf, sizeof ( buf ), "%s%s", settings->name, tmp );
359 tmp[0] = '.';
360 }
361 return buf;
362}
int snprintf(char *buf, size_t size, const char *fmt,...)
Write a formatted string to a buffer.
Definition vsprintf.c:383

References memcpy(), settings::name, settings::parent, settings_target(), snprintf(), and tmp.

Referenced by draw_title_row(), parse_setting_name(), register_settings(), setting_name(), and unregister_settings().

◆ parse_settings_name()

struct settings * parse_settings_name ( const char * name,
get_child_settings_t get_child )
static

Parse settings block name.

Parameters
nameName
get_childFunction to find or create child settings block
Return values
settingsSettings block, or NULL

Definition at line 372 of file settings.c.

372 {
374 char *name_copy;
375 char *subname;
376 char *remainder;
377
378 /* Create modifiable copy of name */
379 name_copy = strdup ( name );
380 if ( ! name_copy )
381 return NULL;
382 remainder = name_copy;
383
384 /* Parse each name component in turn */
385 while ( remainder ) {
386 subname = remainder;
387 remainder = strchr ( subname, '.' );
388 if ( remainder )
389 *(remainder++) = '\0';
390 settings = get_child ( settings, subname );
391 if ( ! settings )
392 break;
393 }
394
395 /* Free modifiable copy of name */
396 free ( name_copy );
397
398 return settings;
399}
#define settings_root
Root settings block.
Definition settings.c:250
char * strchr(const char *src, int character)
Find character within a string.
Definition string.c:288
char * strdup(const char *src)
Duplicate string.
Definition string.c:425

References free, name, NULL, settings_root, strchr(), and strdup().

Referenced by find_settings(), and parse_setting_name().

◆ find_settings()

struct settings * find_settings ( const char * name)

Find settings block.

Parameters
nameName
Return values
settingsSettings block, or NULL

Definition at line 407 of file settings.c.

407 {
408
410}
static struct settings * parse_settings_name(const char *name, get_child_settings_t get_child)
Parse settings block name.
Definition settings.c:372

References find_child_settings(), name, and parse_settings_name().

Referenced by create_fakepxebsack(), dhcp_request_rx(), parse_settings(), and pxe_menu_boot().

◆ apply_settings()

void apply_settings ( void )
static

Apply all settings.

Definition at line 416 of file settings.c.

416 {
417 struct settings_applicator *applicator;
418 int rc;
419
420 /* Call all settings applicators */
422 if ( ( rc = applicator->apply() ) != 0 ) {
423 DBG ( "Could not apply settings using applicator "
424 "%p: %s\n", applicator, strerror ( rc ) );
425 /* Continue to apply remaining settings */
426 }
427 }
428}
struct arbelprm_rc_send_wqe rc
Definition arbel.h:3
#define DBG(...)
Print a debugging message.
Definition compiler.h:523
#define SETTINGS_APPLICATORS
Settings applicator table.
Definition settings.h:261
char * strerror(int errno)
Retrieve string representation of error number.
Definition strerror.c:79
A settings applicator.
Definition settings.h:252
int(* apply)(void)
Apply updated settings.
Definition settings.h:257
#define for_each_table_entry(pointer, table)
Iterate through all entries within a linker table.
Definition tables.h:386

References settings_applicator::apply, DBG, for_each_table_entry, rc, SETTINGS_APPLICATORS, and strerror().

Referenced by register_settings(), store_setting(), and unregister_settings().

◆ reprioritise_settings()

void reprioritise_settings ( struct settings * settings)
static

Reprioritise settings.

Parameters
settingsSettings block

Reorders the settings block amongst its siblings according to its priority.

Definition at line 438 of file settings.c.

438 {
439 struct settings *parent = settings->parent;
440 long priority;
441 struct settings *tmp;
442 long tmp_priority;
443
444 /* Stop when we reach the top of the tree */
445 if ( ! parent )
446 return;
447
448 /* Read priority, if present */
449 priority = fetch_intz_setting ( settings, &priority_setting );
450
451 /* Remove from siblings list */
453
454 /* Reinsert after any existing blocks which have a higher priority */
456 tmp_priority = fetch_intz_setting ( tmp, &priority_setting );
457 if ( priority > tmp_priority )
458 break;
459 if ( settings->order > tmp->order )
460 break;
461 }
462 list_add_tail ( &settings->siblings, &tmp->siblings );
463
464 /* Recurse up the tree */
466}
#define list_add_tail(new, head)
Add a new entry to the tail of a list.
Definition list.h:94
static void reprioritise_settings(struct settings *settings)
Reprioritise settings.
Definition settings.c:438
long fetch_intz_setting(struct settings *settings, const struct setting *setting)
Fetch value of signed integer setting, or zero.
Definition settings.c:1064
uint16_t priority
Priotity.
Definition stp.h:1
int order
Sibling ordering.
Definition settings.h:149

References settings::children, fetch_intz_setting(), list_add_tail, list_del, list_for_each_entry, settings::order, settings::parent, priority, reprioritise_settings(), settings::siblings, and tmp.

Referenced by register_settings(), reprioritise_settings(), and store_setting().

◆ register_settings()

int register_settings ( struct settings * settings,
struct settings * parent,
const char * name )

Register settings block.

Parameters
settingsSettings block
parentParent settings block, or NULL
nameSettings block name
Return values
rcReturn status code

Definition at line 476 of file settings.c.

477 {
478 struct settings *old_settings;
479
480 /* Sanity check */
481 assert ( settings != NULL );
482
483 /* Find target parent settings block */
485
486 /* Apply settings block name */
487 settings->name = name;
488
489 /* Remove any existing settings with the same name */
490 if ( ( old_settings = find_child_settings ( parent, settings->name ) ))
491 unregister_settings ( old_settings );
492
493 /* Add to list of settings */
495 ref_get ( parent->refcnt );
498 DBGC ( settings, "Settings %p (\"%s\") registered\n",
500
501 /* Fix up settings priority */
503
504 /* Apply potentially-updated settings */
506
507 return 0;
508}
#define ref_get(refcnt)
Get additional reference to object.
Definition refcnt.h:93
void unregister_settings(struct settings *settings)
Unregister settings block.
Definition settings.c:515
static void apply_settings(void)
Apply all settings.
Definition settings.c:416
const char * settings_name(struct settings *settings)
Return settings block name.
Definition settings.c:346

References apply_settings(), assert, settings::children, DBGC, find_child_settings(), list_add_tail, name, settings::name, NULL, settings::parent, ref_get, settings::refcnt, reprioritise_settings(), settings_name(), settings_target(), settings::siblings, and unregister_settings().

Referenced by acpi_settings_init(), autovivify_child_settings(), builtin_init(), cachedhcp_apply(), cpuid_settings_init(), dhcp_proxy_rx(), dhcp_pxebs_rx(), dhcp_request_rx(), dhcpv6_register(), efi_path_net_probe(), efivars_init(), guestinfo_init(), guestinfo_net_probe(), ipv6_register_settings(), lldp_probe(), memmap_settings_init(), ndp_register_settings(), netdev_redirect_settings_init(), pci_settings_init(), phantom_probe(), register_netdev(), register_nvo(), settings_test_exec(), smbios_init(), and usb_settings_init().

◆ unregister_settings()

void unregister_settings ( struct settings * settings)

Unregister settings block.

Parameters
settingsSettings block

Definition at line 515 of file settings.c.

515 {
516 struct settings *child;
517
518 /* Unregister child settings */
519 while ( ( child = list_first_entry ( &settings->children,
520 struct settings, siblings ) ) ) {
521 unregister_settings ( child );
522 }
523
524 DBGC ( settings, "Settings %p (\"%s\") unregistered\n",
526
527 /* Remove from list of settings */
532
533 /* Apply potentially-updated settings */
535}
#define list_first_entry(list, type, member)
Get the container of the first entry in a list.
Definition list.h:334

References apply_settings(), settings::children, DBGC, list_del, list_first_entry, NULL, settings::parent, ref_put, settings::refcnt, settings_name(), settings::siblings, and unregister_settings().

Referenced by cachedhcp_recycle(), dhcp_request_rx(), lldp_probe(), lldp_remove(), ndp_register_settings(), phantom_probe(), phantom_remove(), register_netdev(), register_settings(), settings_test_exec(), unregister_netdev(), unregister_nvo(), and unregister_settings().

◆ settings_target()

struct settings * settings_target ( struct settings * settings)

Redirect to target settings block.

Parameters
settingsSettings block, or NULL
Return values
settingsUnderlying settings block

Definition at line 550 of file settings.c.

550 {
551
552 /* NULL settings implies the global settings root */
553 if ( ! settings )
555
556 /* Redirect to underlying settings block, if applicable */
557 if ( settings->op->redirect )
558 return settings->op->redirect ( settings );
559
560 /* Otherwise, return this settings block */
561 return settings;
562}
struct settings *(* redirect)(struct settings *settings)
Redirect to underlying settings block (if applicable).
Definition settings.h:92
struct settings_operations * op
Settings block operations.
Definition settings.h:145

References settings::op, settings_operations::redirect, and settings_root.

Referenced by autovivify_child_settings(), clear_settings(), fetch_setting(), find_child_settings(), register_settings(), select_settings(), setting_applies(), setting_name(), settings_name(), and store_setting().

◆ setting_applies()

int setting_applies ( struct settings * settings,
const struct setting * setting )

Check applicability of setting.

Parameters
settingsSettings block
settingSetting
Return values
appliesSetting applies within this settings block

Definition at line 571 of file settings.c.

572 {
573
574 /* Find target settings block */
576
577 /* Check applicability of setting */
578 return ( settings->op->applies ?
579 settings->op->applies ( settings, setting ) : 1 );
580}
int(* applies)(struct settings *settings, const struct setting *setting)
Check applicability of setting.
Definition settings.h:99

References settings_operations::applies, settings::op, and settings_target().

Referenced by applicable_setting(), select_setting_row(), and store_setting().

◆ applicable_setting()

const struct setting * applicable_setting ( struct settings * settings,
const struct setting * setting )
static

Find setting applicable to settings block, if any.

Parameters
settingsSettings block
settingSetting
Return values
settingApplicable setting, if any

Definition at line 590 of file settings.c.

590 {
591 const struct setting *applicable;
592
593 /* If setting is already applicable, use it */
595 return setting;
596
597 /* Otherwise, look for a matching predefined setting which does apply */
598 for_each_table_entry ( applicable, SETTINGS ) {
599 if ( ( setting_cmp ( setting, applicable ) == 0 ) &&
600 ( setting_applies ( settings, applicable ) ) )
601 return applicable;
602 }
603
604 return NULL;
605}
#define SETTINGS
Configuration setting table.
Definition settings.h:54
int setting_applies(struct settings *settings, const struct setting *setting)
Check applicability of setting.
Definition settings.c:571

References for_each_table_entry, NULL, setting_applies(), setting_cmp(), and SETTINGS.

Referenced by fetch_setting().

◆ store_setting()

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

Store value of setting.

Parameters
settingsSettings block, or NULL
settingSetting to store
dataSetting data, or NULL to clear setting
lenLength of setting data
Return values
rcReturn status code

Definition at line 616 of file settings.c.

617 {
618 int rc;
619
620 /* Find target settings block */
622
623 /* Fail if setting does not apply to this settings block */
624 if ( ! setting_applies ( settings, setting ) )
625 return -ENOTTY;
626
627 /* Sanity check */
628 if ( ! settings->op->store )
629 return -ENOTSUP;
630
631 /* Store setting */
632 if ( ( rc = settings->op->store ( settings, setting,
633 data, len ) ) != 0 )
634 return rc;
635
636 /* Reprioritise settings if necessary */
637 if ( setting_cmp ( setting, &priority_setting ) == 0 )
639
640 /* If these settings are registered, apply potentially-updated
641 * settings
642 */
643 for ( ; settings ; settings = settings->parent ) {
644 if ( settings == &settings_root ) {
646 break;
647 }
648 }
649
650 return 0;
651}
#define ENOTSUP
Operation not supported.
Definition errno.h:633
#define ENOTTY
Inappropriate I/O control operation.
Definition errno.h:638
int(* store)(struct settings *settings, const struct setting *setting, const void *data, size_t len)
Store value of setting.
Definition settings.h:109

References apply_settings(), data, ENOTSUP, ENOTTY, len, settings::op, settings::parent, rc, reprioritise_settings(), setting_applies(), setting_cmp(), settings_root, settings_target(), and settings_operations::store.

Referenced by delete_setting(), digest_exec(), imgset_exec(), nslookup_resolv_done(), storef_setting(), and storen_setting().

◆ fetch_setting()

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

Fetch setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
originOrigin of setting to fill in, or NULL
fetchedFetched setting to fill in, or NULL
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength 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 667 of file settings.c.

669 {
670 const struct setting *applicable;
671 struct settings *child;
672 struct setting tmp;
673 int ret;
674
675 /* Avoid returning uninitialised data on error */
676 memset ( data, 0, len );
677 if ( origin )
678 *origin = NULL;
679 if ( fetched )
680 memcpy ( fetched, setting, sizeof ( *fetched ) );
681
682 /* Find target settings block */
684
685 /* Sanity check */
686 if ( ! settings->op->fetch )
687 return -ENOTSUP;
688
689 /* Try this block first, if an applicable setting exists */
690 if ( ( applicable = applicable_setting ( settings, setting ) ) ) {
691
692 /* Create modifiable copy of setting */
693 memcpy ( &tmp, applicable, sizeof ( tmp ) );
694 if ( ( ret = settings->op->fetch ( settings, &tmp,
695 data, len ) ) >= 0 ) {
696
697 /* Default to string type, if not yet specified */
698 if ( ! tmp.type )
699 tmp.type = &setting_type_string;
700
701 /* Record origin, if applicable */
702 if ( origin )
703 *origin = settings;
704
705 /* Record fetched setting, if applicable */
706 if ( fetched )
707 memcpy ( fetched, &tmp, sizeof ( *fetched ) );
708
709 return ret;
710 }
711 }
712
713 /* Recurse into each child block in turn */
714 list_for_each_entry ( child, &settings->children, siblings ) {
715 if ( ( ret = fetch_setting ( child, setting, origin, fetched,
716 data, len ) ) >= 0 )
717 return ret;
718 }
719
720 return -ENOENT;
721}
uint64_t origin
Origin.
Definition hyperv.h:9
void * memset(void *dest, int character, size_t len) __nonnull
int fetch_setting(struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, void *data, size_t len)
Fetch setting.
Definition settings.c:667
static const struct setting * applicable_setting(struct settings *settings, const struct setting *setting)
Find setting applicable to settings block, if any.
Definition settings.c:590
int(* fetch)(struct settings *settings, struct setting *setting, void *data, size_t len)
Fetch value of setting.
Definition settings.h:123

References applicable_setting(), settings::children, data, ENOENT, ENOTSUP, settings_operations::fetch, fetch_setting(), len, list_for_each_entry, memcpy(), memset(), NULL, settings::op, origin, settings_target(), and tmp.

Referenced by fetch_next_server_and_filename(), fetch_raw_setting(), fetch_setting(), fetch_setting_alloc(), ibft_fill_nic(), ibft_set_string_setting(), ipv6_create_routes(), and setting_exists().

◆ fetch_setting_alloc()

int fetch_setting_alloc ( struct settings * settings,
const struct setting * setting,
struct settings ** origin,
struct setting * fetched,
void ** data,
void *(* alloc )(size_t len) )
static

Fetch allocated copy of setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
originOrigin of setting to fill in, or NULL
fetchedFetched setting to fill in, or NULL
dataBuffer to allocate and fill with setting data
allocAllocation function
Return values
lenLength of setting, or negative error

The caller is responsible for eventually freeing the allocated buffer.

Definition at line 737 of file settings.c.

742 {
743 struct settings *tmp_origin;
744 struct setting tmp_fetched;
745 int len;
746 int check_len;
747
748 /* Use local buffers if necessary */
749 if ( ! origin )
750 origin = &tmp_origin;
751 if ( ! fetched )
752 fetched = &tmp_fetched;
753
754 /* Avoid returning uninitialised data on error */
755 *data = NULL;
756
757 /* Check existence, and fetch setting length */
758 len = fetch_setting ( settings, setting, origin, fetched, NULL, 0 );
759 if ( len < 0 )
760 return len;
761
762 /* Allocate buffer */
763 *data = alloc ( len );
764 if ( ! *data )
765 return -ENOMEM;
766
767 /* Fetch setting value */
768 check_len = fetch_setting ( *origin, fetched, NULL, NULL, *data, len );
769 assert ( check_len == len );
770 return len;
771}

References assert, data, ENOMEM, fetch_setting(), len, NULL, and origin.

Referenced by fetch_setting_copy(), and fetch_string_setting_copy().

◆ fetch_setting_copy()

int fetch_setting_copy ( struct settings * settings,
const struct setting * setting,
struct settings ** origin,
struct setting * fetched,
void ** data )

Fetch copy of setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
originOrigin of setting to fill in, or NULL
fetchedFetched setting to fill in, or NULL
dataBuffer to allocate and fill with setting data
Return values
lenLength of setting, or negative error

The caller is responsible for eventually freeing the allocated buffer.

Definition at line 786 of file settings.c.

789 {
790
791 return fetch_setting_alloc ( settings, setting, origin, fetched,
792 data, malloc );
793}
void * malloc(size_t size)
Allocate memory.
Definition malloc.c:677
static int fetch_setting_alloc(struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, void **data, void *(*alloc)(size_t len))
Fetch allocated copy of setting.
Definition settings.c:737

References data, fetch_setting_alloc(), malloc(), and origin.

Referenced by fetch_raw_setting_copy(), fetchf_setting(), and fetchn_setting().

◆ fetch_raw_setting()

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

Fetch value of setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
dataBuffer to fill with setting string data
lenLength of buffer
Return values
lenLength of setting, or negative error

Definition at line 804 of file settings.c.

806 {
807
809}

References data, fetch_setting(), len, and NULL.

Referenced by dhcp_create_request(), dhcpv6_user_class(), fetch_ipv4_array_setting(), fetch_ipv6_array_setting(), fetch_string_setting(), fetch_uuid_setting(), pxe_menu_parse(), start_pxebs(), trivial_change_key(), and trivial_init().

◆ fetch_raw_setting_copy()

int fetch_raw_setting_copy ( struct settings * settings,
const struct setting * setting,
void ** data )

Fetch value of setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
dataBuffer to allocate and fill with setting data
Return values
lenLength of setting, or negative error

The caller is responsible for eventually freeing the allocated buffer.

Definition at line 822 of file settings.c.

824 {
825
827}
int fetch_setting_copy(struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, void **data)
Fetch copy of setting.
Definition settings.c:786

References data, fetch_setting_copy(), and NULL.

Referenced by apply_dns_search(), apply_dns_servers(), certstore_apply_settings(), copy_encap_settings(), dhcp_create_request(), eap_rx_identity(), eap_rx_md5(), fetch_numeric_setting(), ipv4_add_miniroutes(), privkey_apply_settings(), and rootcert_init().

◆ fetch_string_setting()

int fetch_string_setting ( struct settings * settings,
const struct setting * setting,
char * data,
size_t len )

Fetch value of string setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
dataBuffer to fill with setting string data
lenLength of buffer
Return values
lenLength 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 842 of file settings.c.

844 {
845
846 memset ( data, 0, len );
848 ( ( len > 0 ) ? ( len - 1 ) : 0 ) );
849}
int fetch_raw_setting(struct settings *settings, const struct setting *setting, void *data, size_t len)
Fetch value of setting.
Definition settings.c:804

References data, fetch_raw_setting(), len, and memset().

Referenced by have_pxe_menu(), ib_sma_node_desc(), ibft_set_string_setting(), net80211_autoassociate(), net80211_check_settings_update(), wpa_psk_start(), and xsigo_xds_complete().

◆ fetch_string_setting_copy_alloc()

void * fetch_string_setting_copy_alloc ( size_t len)
static

Allocate memory for copy of string setting.

Parameters
lenLength of setting
Return values
ptrAllocated memory

Definition at line 857 of file settings.c.

857 {
858 return zalloc ( len + 1 /* NUL */ );
859}

References len, and zalloc().

Referenced by fetch_string_setting_copy().

◆ fetch_string_setting_copy()

int fetch_string_setting_copy ( struct settings * settings,
const struct setting * setting,
char ** data )

Fetch value of string setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
dataBuffer to allocate and fill with setting string data
Return values
lenLength 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 874 of file settings.c.

875 {
876
878 ( ( void ** ) data ),
880}
static void * fetch_string_setting_copy_alloc(size_t len)
Allocate memory for copy of string setting.
Definition settings.c:857

References data, fetch_setting_alloc(), fetch_string_setting_copy_alloc(), and NULL.

Referenced by apply_dns_search(), apply_peerdisc_settings(), apply_syslog_settings(), apply_syslogs_settings(), cachedhcp_uri(), eap_rx_mschapv2_request(), efi_veto(), fetch_next_server_and_filename(), fetch_root_path(), fetch_san_filename(), ipxe(), iscsi_fetch_settings(), keymap_apply(), oncrpc_init_cred_sys(), and validator_start_download().

◆ fetch_ipv4_array_setting()

int fetch_ipv4_array_setting ( struct settings * settings,
const struct setting * setting,
struct in_addr * inp,
unsigned int count )

Fetch value of IPv4 address setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
inpIPv4 addresses to fill in
countMaximum number of IPv4 addresses
Return values
lenLength of setting, or negative error

Definition at line 891 of file settings.c.

893 {
894 int len;
895
897 ( sizeof ( *inp ) * count ) );
898 if ( len < 0 )
899 return len;
900 if ( ( len % sizeof ( *inp ) ) != 0 )
901 return -ERANGE;
902 return len;
903}
static unsigned int count
Number of entries.
Definition dwmac.h:220
#define ERANGE
Result too large.
Definition errno.h:683

References count, ERANGE, fetch_raw_setting(), and len.

Referenced by fetch_ipv4_setting(), and ibft_set_ipaddr_setting().

◆ fetch_ipv4_setting()

int fetch_ipv4_setting ( struct settings * settings,
const struct setting * setting,
struct in_addr * inp )

Fetch value of IPv4 address setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
inpIPv4 address to fill in
Return values
lenLength of setting, or negative error

Definition at line 913 of file settings.c.

915 {
916
917 return fetch_ipv4_array_setting ( settings, setting, inp, 1 );
918}
int fetch_ipv4_array_setting(struct settings *settings, const struct setting *setting, struct in_addr *inp, unsigned int count)
Fetch value of IPv4 address setting.
Definition settings.c:891

References fetch_ipv4_array_setting().

Referenced by apply_syslog_settings(), cachedhcp_uri(), create_fakepxebsack(), efi_pxe_install(), efi_pxe_ip(), fetch_next_server_and_filename(), gdbudp_configure(), ibft_fill_nic(), ipv4_add_miniroutes(), ipv4_settings(), start_pxebs(), and tftp_apply_settings().

◆ fetch_ipv6_array_setting()

int fetch_ipv6_array_setting ( struct settings * settings,
const struct setting * setting,
struct in6_addr * inp,
unsigned int count )

Fetch value of IPv6 address setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
inpIPv6 addresses to fill in
countMaximum number of IPv6 addresses
Return values
lenLength of setting, or negative error

Definition at line 929 of file settings.c.

931 {
932 int len;
933
935 ( sizeof ( *inp ) * count ) );
936 if ( len < 0 )
937 return len;
938 if ( ( len % sizeof ( *inp ) ) != 0 )
939 return -ERANGE;
940 return len;
941}

References count, ERANGE, fetch_raw_setting(), and len.

Referenced by fetch_ipv6_setting().

◆ fetch_ipv6_setting()

int fetch_ipv6_setting ( struct settings * settings,
const struct setting * setting,
struct in6_addr * inp )

Fetch value of IPv6 address setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
inpIPv6 address to fill in
Return values
lenLength of setting, or negative error

Definition at line 951 of file settings.c.

953 {
954
955 return fetch_ipv6_array_setting ( settings, setting, inp, 1 );
956}
int fetch_ipv6_array_setting(struct settings *settings, const struct setting *setting, struct in6_addr *inp, unsigned int count)
Fetch value of IPv6 address setting.
Definition settings.c:929

References fetch_ipv6_array_setting().

Referenced by apply_syslog_settings().

◆ numeric_setting_value()

int numeric_setting_value ( int is_signed,
const void * raw,
size_t len,
unsigned long * value )
static

Extract numeric value of setting.

Parameters
is_signedTreat value as a signed integer
rawRaw setting data
lenLength of raw setting data
Return values
valueNumeric value
lenLength of setting, or negative error

Definition at line 967 of file settings.c.

968 {
969 const uint8_t *unsigned_bytes = raw;
970 const int8_t *signed_bytes = raw;
971 int is_negative;
972 unsigned int i;
973 uint8_t pad;
975
976 /* Convert to host-ordered longs */
977 is_negative = ( len && ( signed_bytes[0] < 0 ) );
978 *value = ( ( is_signed && is_negative ) ? -1L : 0 );
979 pad = *value;
980 for ( i = 0 ; i < len ; i++ ) {
981 byte = unsigned_bytes[i];
982 *value = ( ( *value << 8 ) | byte );
983 if ( ( ( i + sizeof ( *value ) ) < len ) && ( byte != pad ) )
984 return -ERANGE;
985 }
986
987 return len;
988}
__be32 raw[7]
Definition CIB_PRM.h:0
u32 pad[9]
Padding.
Definition ar9003_mac.h:23
pseudo_bit_t value[0x00020]
Definition arbel.h:2
unsigned char uint8_t
Definition stdint.h:10
signed char int8_t
Definition stdint.h:15
unsigned char byte
Definition smc9000.h:38

References ERANGE, len, pad, raw, and value.

Referenced by fetch_numeric_setting(), format_busdevfn_setting(), numerate_int_setting(), and unixtime_store().

◆ fetch_numeric_setting()

int fetch_numeric_setting ( struct settings * settings,
const struct setting * setting,
unsigned long * value,
int is_signed )

Fetch value of numeric setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
valueInteger value to fill in
Return values
lenLength of setting, or negative error

Definition at line 998 of file settings.c.

1000 {
1001 void *raw;
1002 int raw_len;
1003 int len;
1004
1005 /* Avoid returning uninitialised data on error */
1006 *value = 0;
1007
1008 /* Fetch raw (network-ordered, variable-length) setting */
1010 if ( raw_len < 0 ) {
1011 len = raw_len;
1012 goto err_fetch_copy;
1013 }
1014
1015 /* Extract numeric value */
1016 len = numeric_setting_value ( is_signed, raw, raw_len, value );
1017 if ( len < 0 )
1018 goto err_value;
1019
1020 err_value:
1021 free ( raw );
1022 err_fetch_copy:
1023 return len;
1024}
static size_t raw_len
Definition base16.h:54
int fetch_raw_setting_copy(struct settings *settings, const struct setting *setting, void **data)
Fetch value of setting.
Definition settings.c:822
static int numeric_setting_value(int is_signed, const void *raw, size_t len, unsigned long *value)
Extract numeric value of setting.
Definition settings.c:967

References fetch_raw_setting_copy(), free, len, numeric_setting_value(), raw, raw_len, and value.

Referenced by fetch_int_setting(), fetch_intz_setting(), fetch_uint_setting(), and fetch_uintz_setting().

◆ fetch_int_setting()

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

Fetch value of signed integer setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
valueInteger value to fill in
Return values
lenLength of setting, or negative error

Definition at line 1034 of file settings.c.

1036 {
1037
1039 ( ( unsigned long * ) value ), 1 );
1040}
int fetch_numeric_setting(struct settings *settings, const struct setting *setting, unsigned long *value, int is_signed)
Fetch value of numeric setting.
Definition settings.c:998

References fetch_numeric_setting(), and value.

Referenced by apply_peerdist_settings().

◆ fetch_uint_setting()

int fetch_uint_setting ( struct settings * settings,
const struct setting * setting,
unsigned long * value )

Fetch value of unsigned integer setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
valueInteger value to fill in
Return values
lenLength of setting, or negative error

Definition at line 1050 of file settings.c.

1052 {
1053
1055}

References fetch_numeric_setting(), and value.

Referenced by san_default_drive(), and sandev_apply().

◆ fetch_intz_setting()

long fetch_intz_setting ( struct settings * settings,
const struct setting * setting )

Fetch value of signed integer setting, or zero.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
Return values
valueSetting value, or zero

Definition at line 1064 of file settings.c.

1065 {
1066 unsigned long value;
1067
1069 return value;
1070}

References fetch_numeric_setting(), and value.

Referenced by net80211_step_associate(), reprioritise_settings(), and uriboot().

◆ fetch_uintz_setting()

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

Fetch value of unsigned integer setting, or zero.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
Return values
valueSetting value, or zero

Definition at line 1079 of file settings.c.

1080 {
1081 unsigned long value;
1082
1084 return value;
1085}

References fetch_numeric_setting(), and value.

Referenced by apply_netdev_settings(), have_pxe_menu(), oncrpc_init_cred_sys(), and start_pxebs().

◆ fetch_uuid_setting()

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

Fetch value of UUID setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
uuidUUID to fill in
Return values
lenLength of setting, or negative error

Definition at line 1095 of file settings.c.

1097 {
1098 int len;
1099
1100 len = fetch_raw_setting ( settings, setting, uuid, sizeof ( *uuid ) );
1101 if ( len < 0 )
1102 return len;
1103 if ( len != sizeof ( *uuid ) )
1104 return -ERANGE;
1105 return len;
1106}
A universally unique ID.
Definition uuid.h:16

References ERANGE, fetch_raw_setting(), and len.

Referenced by dhcp_create_request(), iscsi_fetch_settings(), rbg_startup(), and start_dhcpv6().

◆ clear_settings()

void clear_settings ( struct settings * settings)

Clear settings block.

Parameters
settingsSettings block

Definition at line 1113 of file settings.c.

1113 {
1114
1115 /* Find target settings block */
1117
1118 /* Clear settings, if applicable */
1119 if ( settings->op->clear )
1120 settings->op->clear ( settings );
1121}
void(* clear)(struct settings *settings)
Clear settings block.
Definition settings.h:129

References settings_operations::clear, settings::op, and settings_target().

Referenced by free_netdev(), register_netdev(), settings_test_exec(), and unregister_netdev().

◆ setting_cmp()

int setting_cmp ( const struct setting * a,
const struct setting * b )

Compare two settings.

Parameters
aSetting to compare
bSetting to compare
Return values
0Settings are the same
non-zeroSettings are not the same

Definition at line 1131 of file settings.c.

1131 {
1132
1133 /* If the settings have tags, compare them */
1134 if ( a->tag && ( a->tag == b->tag ) && ( a->scope == b->scope ) )
1135 return 0;
1136
1137 /* Otherwise, if the settings have names, compare them */
1138 if ( a->name && b->name && a->name[0] )
1139 return strcmp ( a->name, b->name );
1140
1141 /* Otherwise, return a non-match */
1142 return ( ! 0 );
1143}
const struct settings_scope * scope
Setting scope (or NULL).
Definition settings.h:50
uint64_t tag
Setting tag, if applicable.
Definition settings.h:44

References setting::name, setting::scope, strcmp(), and setting::tag.

Referenced by applicable_setting(), builtin_fetch(), builtin_store(), dhcpv6_fetch(), efi_path_fetch(), efi_snp_hii_questions(), find_generic_setting(), ipv6_fetch(), ndp_prefix_fetch(), netdev_fetch(), netdev_store(), parse_setting_name(), phantom_clp_setting(), select_setting_row(), and store_setting().

◆ setting_format()

int setting_format ( const struct setting_type * type,
const void * raw,
size_t raw_len,
char * buf,
size_t len )

Format setting value as a string.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 1162 of file settings.c.

1163 {
1164
1165 /* Sanity check */
1166 if ( ! type->format )
1167 return -ENOTSUP;
1168
1169 return type->format ( type, raw, raw_len, buf, len );
1170}
uint32_t type
Operating system type.
Definition ena.h:1

References ENOTSUP, len, raw, raw_len, and type.

Referenced by fetchf_setting().

◆ setting_parse()

int setting_parse ( const struct setting_type * type,
const char * value,
void * buf,
size_t len )

Parse formatted string to setting value.

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
Return values
lenLength of raw value, or negative error

Definition at line 1181 of file settings.c.

1182 {
1183
1184 /* Sanity check */
1185 if ( ! type->parse )
1186 return -ENOTSUP;
1187
1188 return type->parse ( type, value, buf, len );
1189}

References ENOTSUP, len, type, and value.

Referenced by guestinfo_fetch_type(), and storef_setting().

◆ setting_numerate()

int setting_numerate ( const struct setting_type * type,
const void * raw,
size_t raw_len,
unsigned long * value )

Convert setting value to number.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
Return values
valueNumeric value
rcReturn status code

Definition at line 1200 of file settings.c.

1201 {
1202
1203 /* Sanity check */
1204 if ( ! type->numerate )
1205 return -ENOTSUP;
1206
1207 return type->numerate ( type, raw, raw_len, value );
1208}

References ENOTSUP, raw, raw_len, type, and value.

Referenced by fetchn_setting().

◆ setting_denumerate()

int setting_denumerate ( const struct setting_type * type,
unsigned long value,
void * buf,
size_t len )

Convert number to setting value.

Parameters
typeSetting type
valueNumeric value
bufBuffer to contain raw value
lenLength of buffer
Return values
lenLength of raw value, or negative error

Definition at line 1219 of file settings.c.

1220 {
1221
1222 /* Sanity check */
1223 if ( ! type->denumerate )
1224 return -ENOTSUP;
1225
1226 return type->denumerate ( type, value, buf, len );
1227}

References ENOTSUP, len, type, and value.

Referenced by storen_setting().

◆ fetchf_setting()

int fetchf_setting ( struct settings * settings,
const struct setting * setting,
struct settings ** origin,
struct setting * fetched,
char * buf,
size_t len )

Fetch formatted value of setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
originOrigin of setting to fill in, or NULL
fetchedFetched setting to fill in, or NULL
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 1240 of file settings.c.

1242 {
1243 struct setting tmp_fetched;
1244 void *raw;
1245 int raw_len;
1246 int ret;
1247
1248 /* Use local buffers if necessary */
1249 if ( ! fetched )
1250 fetched = &tmp_fetched;
1251
1252 /* Fetch raw value */
1254 &raw );
1255 if ( raw_len < 0 ) {
1256 ret = raw_len;
1257 goto err_fetch_copy;
1258 }
1259
1260 /* Sanity check */
1261 assert ( fetched->type != NULL );
1262
1263 /* Format setting */
1264 if ( ( ret = setting_format ( fetched->type, raw, raw_len, buf,
1265 len ) ) < 0 )
1266 goto err_format;
1267
1268 err_format:
1269 free ( raw );
1270 err_fetch_copy:
1271 return ret;
1272}
int setting_format(const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len)
Format setting value as a string.
Definition settings.c:1162

References assert, fetch_setting_copy(), free, len, NULL, origin, raw, raw_len, setting_format(), and setting::type.

Referenced by efi_snp_hii_fetch(), and fetchf_setting_copy().

◆ fetchf_setting_copy()

int fetchf_setting_copy ( struct settings * settings,
const struct setting * setting,
struct settings ** origin,
struct setting * fetched,
char ** value )

Fetch copy of formatted value of setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
originOrigin of setting to fill in, or NULL
fetchedFetched setting to fill in, or NULL
valueBuffer to allocate and fill with formatted value
Return values
lenLength of formatted value, or negative error

The caller is responsible for eventually freeing the allocated buffer.

Definition at line 1287 of file settings.c.

1290 {
1291 struct settings *tmp_origin;
1292 struct setting tmp_fetched;
1293 int len;
1294 int check_len;
1295
1296 /* Use local buffers if necessary */
1297 if ( ! origin )
1298 origin = &tmp_origin;
1299 if ( ! fetched )
1300 fetched = &tmp_fetched;
1301
1302 /* Avoid returning uninitialised data on error */
1303 *value = NULL;
1304
1305 /* Check existence, and fetch formatted value length */
1306 len = fetchf_setting ( settings, setting, origin, fetched, NULL, 0 );
1307 if ( len < 0 )
1308 return len;
1309
1310 /* Allocate buffer */
1311 *value = zalloc ( len + 1 /* NUL */ );
1312 if ( ! *value )
1313 return -ENOMEM;
1314
1315 /* Fetch formatted value */
1316 check_len = fetchf_setting ( *origin, fetched, NULL, NULL, *value,
1317 ( len + 1 /* NUL */ ) );
1318 assert ( check_len == len );
1319 return len;
1320}
int fetchf_setting(struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, char *buf, size_t len)
Fetch formatted value of setting.
Definition settings.c:1240

References assert, ENOMEM, fetchf_setting(), len, NULL, origin, value, and zalloc().

Referenced by expand_settings(), load_values(), read_value(), select_setting_row(), and show_exec().

◆ storef_setting()

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

Store formatted value of setting.

Parameters
settingsSettings block
settingSetting to store
valueFormatted setting data, or NULL
Return values
rcReturn status code

Definition at line 1330 of file settings.c.

1331 {
1332 void *raw;
1333 int raw_len;
1334 int check_len;
1335 int rc;
1336
1337 /* NULL value or empty string implies deletion */
1338 if ( ( ! value ) || ( ! value[0] ) )
1339 return delete_setting ( settings, setting );
1340
1341 /* Sanity check */
1342 assert ( setting->type != NULL );
1343
1344 /* Get raw value length */
1346 if ( raw_len < 0 ) {
1347 rc = raw_len;
1348 goto err_raw_len;
1349 }
1350
1351 /* Allocate buffer for raw value */
1352 raw = malloc ( raw_len );
1353 if ( ! raw ) {
1354 rc = -ENOMEM;
1355 goto err_alloc_raw;
1356 }
1357
1358 /* Parse formatted value */
1359 check_len = setting_parse ( setting->type, value, raw, raw_len );
1360 assert ( check_len == raw_len );
1361
1362 /* Store raw value */
1363 if ( ( rc = store_setting ( settings, setting, raw, raw_len ) ) != 0 )
1364 goto err_store;
1365
1366 err_store:
1367 free ( raw );
1368 err_alloc_raw:
1369 err_raw_len:
1370 return rc;
1371}
static int delete_setting(struct settings *settings, const struct setting *setting)
Delete setting.
Definition settings.h:542
int setting_parse(const struct setting_type *type, const char *value, void *buf, size_t len)
Parse formatted string to setting value.
Definition settings.c:1181
int store_setting(struct settings *settings, const struct setting *setting, const void *data, size_t len)
Store value of setting.
Definition settings.c:616

References assert, delete_setting(), ENOMEM, free, malloc(), NULL, raw, raw_len, rc, setting_parse(), store_setting(), setting::type, and value.

Referenced by choose_exec(), efi_snp_hii_store(), save_setting(), save_values(), set_core_exec(), and testnet_set_okx().

◆ fetchn_setting()

int fetchn_setting ( struct settings * settings,
const struct setting * setting,
struct settings ** origin,
struct setting * fetched,
unsigned long * value )

Fetch numeric value of setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
originOrigin of setting to fill in, or NULL
fetchedFetched setting to fill in, or NULL
valueNumeric value to fill in
Return values
rcReturn status code

Definition at line 1383 of file settings.c.

1385 {
1386 struct setting tmp_fetched;
1387 void *raw;
1388 int raw_len;
1389 int rc;
1390
1391 /* Use local buffers if necessary */
1392 if ( ! fetched )
1393 fetched = &tmp_fetched;
1394
1395 /* Fetch raw value */
1397 &raw );
1398 if ( raw_len < 0 ) {
1399 rc = raw_len;
1400 goto err_fetch_copy;
1401 }
1402
1403 /* Sanity check */
1404 assert ( fetched->type != NULL );
1405
1406 /* Numerate setting */
1407 if ( ( rc = setting_numerate ( fetched->type, raw, raw_len,
1408 value ) ) < 0 )
1409 goto err_numerate;
1410
1411 err_numerate:
1412 free ( raw );
1413 err_fetch_copy:
1414 return rc;
1415}
int setting_numerate(const struct setting_type *type, const void *raw, size_t raw_len, unsigned long *value)
Convert setting value to number.
Definition settings.c:1200

References assert, fetch_setting_copy(), free, NULL, origin, raw, raw_len, rc, setting_numerate(), setting::type, and value.

Referenced by inc_exec(), pciscan_exec(), and usbscan_exec().

◆ storen_setting()

int storen_setting ( struct settings * settings,
const struct setting * setting,
unsigned long value )

Store numeric value of setting.

Parameters
settingsSettings block
settingSetting
valueNumeric value
Return values
rcReturn status code

Definition at line 1425 of file settings.c.

1426 {
1427 void *raw;
1428 int raw_len;
1429 int check_len;
1430 int rc;
1431
1432 /* Sanity check */
1433 assert ( setting->type != NULL );
1434
1435 /* Get raw value length */
1437 if ( raw_len < 0 ) {
1438 rc = raw_len;
1439 goto err_raw_len;
1440 }
1441
1442 /* Allocate buffer for raw value */
1443 raw = malloc ( raw_len );
1444 if ( ! raw ) {
1445 rc = -ENOMEM;
1446 goto err_alloc_raw;
1447 }
1448
1449 /* Denumerate value */
1450 check_len = setting_denumerate ( setting->type, value, raw, raw_len );
1451 assert ( check_len == raw_len );
1452
1453 /* Store raw value */
1454 if ( ( rc = store_setting ( settings, setting, raw, raw_len ) ) != 0 )
1455 goto err_store;
1456
1457 err_store:
1458 free ( raw );
1459 err_alloc_raw:
1460 err_raw_len:
1461 return rc;
1462}
int setting_denumerate(const struct setting_type *type, unsigned long value, void *buf, size_t len)
Convert number to setting value.
Definition settings.c:1219

References assert, ENOMEM, free, malloc(), NULL, raw, raw_len, rc, setting_denumerate(), store_setting(), setting::type, and value.

Referenced by inc_exec(), pciscan_exec(), and usbscan_exec().

◆ find_setting()

struct setting * find_setting ( const char * name)

Find predefined setting.

Parameters
nameName
Return values
settingSetting, or NULL

Definition at line 1477 of file settings.c.

1477 {
1478 struct setting *setting;
1479
1481 if ( strcmp ( name, setting->name ) == 0 )
1482 return setting;
1483 }
1484 return NULL;
1485}

References for_each_table_entry, name, setting::name, NULL, SETTINGS, and strcmp().

Referenced by efi_snp_hii_fetch(), efi_snp_hii_store(), and guestinfo_fetch_type().

◆ parse_setting_tag()

uint64_t parse_setting_tag ( const char * name)
static

Parse setting name as tag number.

Parameters
nameName
Return values
tagTag number, or 0 if not a valid number

Definition at line 1493 of file settings.c.

1493 {
1494 char *tmp = ( ( char * ) name );
1495 uint64_t tag = 0;
1496
1497 while ( 1 ) {
1498 tag = ( ( tag << 8 ) | strtoul ( tmp, &tmp, 0 ) );
1499 if ( *tmp == 0 )
1500 return tag;
1501 if ( *tmp != '.' )
1502 return 0;
1503 tmp++;
1504 }
1505}
unsigned long long uint64_t
Definition stdint.h:13
uint64_t tag
Identity tag.
Definition edd.h:1
unsigned long strtoul(const char *string, char **endp, int base)
Convert string to numeric value.
Definition string.c:516

References name, strtoul(), tag, and tmp.

Referenced by parse_setting_name().

◆ find_setting_type()

const struct setting_type * find_setting_type ( const char * name)
static

Find setting type.

Parameters
nameName
Return values
typeSetting type, or NULL

Definition at line 1513 of file settings.c.

1513 {
1514 const struct setting_type *type;
1515
1517 if ( strcmp ( name, type->name ) == 0 )
1518 return type;
1519 }
1520 return NULL;
1521}
#define SETTING_TYPES
Configuration setting type table.
Definition settings.h:243
A setting type.
Definition settings.h:192

References for_each_table_entry, name, NULL, SETTING_TYPES, strcmp(), and type.

Referenced by parse_setting_name().

◆ parse_setting_name()

int parse_setting_name ( char * name,
get_child_settings_t get_child,
struct settings ** settings,
struct setting * setting )

Parse setting name.

Parameters
nameName of setting
get_childFunction to find or create child settings block
settingsSettings block to fill in
settingSetting to fill in
Return values
rcReturn status code

Interprets a name of the form "[settings_name/]tag_name[:type_name]" and fills in the appropriate fields.

Note that on success, this function will have modified the original setting name.

Definition at line 1539 of file settings.c.

1540 {
1541 char *settings_name;
1542 char *setting_name;
1543 char *type_name;
1544 struct setting *predefined;
1545 int rc;
1546
1547 /* Set defaults */
1549 memset ( setting, 0, sizeof ( *setting ) );
1550 setting->name = "";
1551
1552 /* Split name into "[settings_name/]setting_name[:type_name]" */
1553 if ( ( setting_name = strchr ( name, '/' ) ) != NULL ) {
1554 *(setting_name++) = 0;
1556 } else {
1559 }
1560 if ( ( type_name = strchr ( setting_name, ':' ) ) != NULL )
1561 *(type_name++) = 0;
1562
1563 /* Identify settings block, if specified */
1564 if ( settings_name ) {
1565 *settings = parse_settings_name ( settings_name, get_child );
1566 if ( *settings == NULL ) {
1567 DBG ( "Unrecognised settings block \"%s\" in \"%s\"\n",
1569 rc = -ENODEV;
1570 goto err;
1571 }
1572 }
1573
1574 /* Identify setting */
1576 setting->scope = (*settings)->default_scope;
1578 for_each_table_entry ( predefined, SETTINGS ) {
1579 /* Matches a predefined setting; use that setting */
1580 if ( setting_cmp ( predefined, setting ) == 0 ) {
1581 memcpy ( setting, predefined, sizeof ( *setting ) );
1582 break;
1583 }
1584 }
1585
1586 /* Identify setting type, if specified */
1587 if ( type_name ) {
1588 setting->type = find_setting_type ( type_name );
1589 if ( setting->type == NULL ) {
1590 DBG ( "Invalid setting type \"%s\" in \"%s\"\n",
1591 type_name, name );
1592 rc = -ENOTSUP;
1593 goto err;
1594 }
1595 }
1596
1597 return 0;
1598
1599 err:
1600 /* Restore original name */
1601 if ( settings_name )
1602 *( setting_name - 1 ) = '/';
1603 if ( type_name )
1604 *( type_name - 1 ) = ':';
1605 return rc;
1606}
#define ENODEV
No such device.
Definition errno.h:553
int setting_name(struct settings *settings, const struct setting *setting, char *buf, size_t len)
Return full setting name.
Definition settings.c:1617
static const struct setting_type * find_setting_type(const char *name)
Find setting type.
Definition settings.c:1513
static uint64_t parse_setting_tag(const char *name)
Parse setting name as tag number.
Definition settings.c:1493

References DBG, ENODEV, ENOTSUP, find_setting_type(), for_each_table_entry, memcpy(), memset(), name, setting::name, NULL, parse_setting_tag(), parse_settings_name(), rc, setting::scope, setting_cmp(), setting_name(), SETTINGS, settings_name(), settings_root, strchr(), setting::tag, and setting::type.

Referenced by expand_settings(), nslookup_resolv_done(), parse_names(), parse_setting(), and testnet_set_okx().

◆ setting_name()

int setting_name ( struct settings * settings,
const struct setting * setting,
char * buf,
size_t len )

Return full setting name.

Parameters
settingsSettings block, or NULL
settingSetting
bufBuffer
lenLength of buffer
Return values
lenLength of setting name, or negative error

Definition at line 1617 of file settings.c.

1618 {
1619 const char *name;
1620
1623 return snprintf ( buf, len, "%s%s%s:%s", name, ( name[0] ? "/" : "" ),
1625}
const char * name
Name.
Definition settings.h:197

References len, name, setting::name, setting_type::name, settings_name(), settings_target(), snprintf(), and setting::type.

Referenced by draw_info_row(), FILE_SECBOOT(), nslookup(), nslookup_exec(), parse_setting_name(), resolv_setting(), and show_exec().

◆ parse_string_setting()

int parse_string_setting ( const struct setting_type *type __unused,
const char * value,
void * buf,
size_t len )
static

Parse string setting value.

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
Return values
lenLength of raw value, or negative error

Definition at line 1643 of file settings.c.

1644 {
1645 size_t raw_len = strlen ( value ); /* Exclude terminating NUL */
1646
1647 /* Copy string to buffer */
1648 if ( len > raw_len )
1649 len = raw_len;
1650 memcpy ( buf, value, len );
1651
1652 return raw_len;
1653}

References __unused, len, memcpy(), raw_len, strlen(), type, and value.

◆ format_string_setting()

int format_string_setting ( const struct setting_type *type __unused,
const void * raw,
size_t raw_len,
char * buf,
size_t len )
static

Format string setting value.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 1665 of file settings.c.

1667 {
1668
1669 /* Copy string to buffer, and terminate */
1670 memset ( buf, 0, len );
1671 if ( len > raw_len )
1672 len = raw_len;
1673 memcpy ( buf, raw, len );
1674
1675 return raw_len;
1676}

References __unused, len, memcpy(), memset(), raw, raw_len, and type.

◆ parse_uristring_setting()

int parse_uristring_setting ( const struct setting_type *type __unused,
const char * value,
void * buf,
size_t len )
static

Parse URI-encoded string setting value.

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
Return values
lenLength of raw value, or negative error

Definition at line 1694 of file settings.c.

1695 {
1696
1697 return uri_decode ( value, buf, len );
1698}
size_t uri_decode(const char *encoded, void *buf, size_t len)
Decode URI field.
Definition uri.c:54

References __unused, len, type, uri_decode(), and value.

◆ format_uristring_setting()

int format_uristring_setting ( const struct setting_type *type __unused,
const void * raw,
size_t raw_len,
char * buf,
size_t len )
static

Format URI-encoded string setting value.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 1710 of file settings.c.

1712 {
1713
1714 return uri_encode ( 0, raw, raw_len, buf, len );
1715}
size_t uri_encode(unsigned int field, const void *raw, size_t raw_len, char *buf, ssize_t len)
Encode URI field.
Definition uri.c:201

References __unused, len, raw, raw_len, type, and uri_encode().

◆ parse_ipv4_setting()

__weak int parse_ipv4_setting ( const struct setting_type *type __unused,
const char *value __unused,
void *buf __unused,
size_t len __unused )

Parse IPv4 address setting value (when IPv4 support is not present).

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
Return values
lenLength of raw value, or negative error

Definition at line 1733 of file settings.c.

1735 {
1736 return -ENOTSUP;
1737}

References __unused, __weak, ENOTSUP, len, type, and value.

◆ format_ipv4_setting()

__weak int format_ipv4_setting ( const struct setting_type *type __unused,
const void *raw __unused,
size_t raw_len __unused,
char *buf __unused,
size_t len __unused )

Format IPv4 address setting value (when IPv4 support is not present).

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 1749 of file settings.c.

1752 {
1753 return -ENOTSUP;
1754}

References __unused, __weak, ENOTSUP, len, raw, raw_len, and type.

◆ parse_ipv6_setting()

__weak int parse_ipv6_setting ( const struct setting_type *type __unused,
const char *value __unused,
void *buf __unused,
size_t len __unused )

Parse IPv6 address setting value (when IPv6 support is not present).

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
Return values
lenLength of raw value, or negative error

Definition at line 1772 of file settings.c.

1774 {
1775 return -ENOTSUP;
1776}

References __unused, __weak, ENOTSUP, len, type, and value.

◆ format_ipv6_setting()

__weak int format_ipv6_setting ( const struct setting_type *type __unused,
const void *raw __unused,
size_t raw_len __unused,
char *buf __unused,
size_t len __unused )

Format IPv6 address setting value (when IPv6 support is not present).

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 1788 of file settings.c.

1791 {
1792 return -ENOTSUP;
1793}

References __unused, __weak, ENOTSUP, len, raw, raw_len, and type.

◆ setting_type_int_index()

unsigned int setting_type_int_index ( const struct setting_type * type)
static

Get integer setting type index.

Parameters
typeSetting type
Return values
indexInteger setting type index

Definition at line 1854 of file settings.c.

1854 {
1855
1856 return ( ( type->name - setting_type_int_name[0] ) /
1857 sizeof ( setting_type_int_name[0] ) );
1858}

References setting_type_int_name, and type.

◆ setting_type_int_width()

unsigned int setting_type_int_width ( const struct setting_type * type)
static

Get integer setting type width.

Parameters
typeSetting type
Return values
indexInteger setting type width

Definition at line 1866 of file settings.c.

1866 {
1867
1868 return ( 1 << setting_type_int_index ( type ) );
1869}
setting_type_int_index
Integer setting type indices.
Definition settings.c:1811

References type.

Referenced by denumerate_int_setting().

◆ setting_type_int_is_signed()

int setting_type_int_is_signed ( const struct setting_type * type)
static

Get integer setting type signedness.

Parameters
typeSetting type
Return values
is_signedInteger setting type is signed

Definition at line 1877 of file settings.c.

1877 {
1878 return ( ( type->name - setting_type_int_name[0] ) & 1 );
1879}

References setting_type_int_name, and type.

Referenced by numerate_int_setting().

◆ denumerate_int_setting()

int denumerate_int_setting ( const struct setting_type * type,
unsigned long value,
void * buf,
size_t len )
static

Convert number to setting value.

Parameters
typeSetting type
valueNumeric value
bufBuffer to contain raw value
lenLength of buffer
Return values
lenLength of raw value, or negative error

Definition at line 1890 of file settings.c.

1892 {
1893 unsigned int size = setting_type_int_width ( type );
1894 union {
1895 uint32_t num;
1896 uint8_t bytes[4];
1897 } u;
1898
1899 u.num = htonl ( value );
1900 if ( len > size )
1901 len = size;
1902 memcpy ( buf, &u.bytes[ sizeof ( u ) - size ], len );
1903
1904 return size;
1905}
unsigned int uint32_t
Definition stdint.h:12
union @104331263140136355135267063077374276003064103115 u
uint16_t size
Buffer size.
Definition dwmac.h:3
uint8_t bytes[64]
Definition ib_mad.h:5
#define htonl(value)
Definition byteswap.h:134
uint32_t num
Definition multiboot.h:0
static unsigned int setting_type_int_width(const struct setting_type *type)
Get integer setting type width.
Definition settings.c:1866

References bytes, htonl, len, memcpy(), num, setting_type_int_width(), size, type, u, and value.

◆ numerate_int_setting()

int numerate_int_setting ( const struct setting_type * type,
const void * raw,
size_t raw_len,
unsigned long * value )
static

Convert setting value to number.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
valueNumeric value to fill in
Return values
rcReturn status code

Definition at line 1916 of file settings.c.

1918 {
1919 int is_signed = setting_type_int_is_signed ( type );
1920 int check_len;
1921
1922 /* Extract numeric value */
1923 check_len = numeric_setting_value ( is_signed, raw, raw_len, value );
1924 if ( check_len < 0 )
1925 return check_len;
1926 assert ( check_len == ( int ) raw_len );
1927
1928 return 0;
1929}
static int setting_type_int_is_signed(const struct setting_type *type)
Get integer setting type signedness.
Definition settings.c:1877

References assert, numeric_setting_value(), raw, raw_len, setting_type_int_is_signed(), type, and value.

◆ parse_int_setting()

int parse_int_setting ( const struct setting_type * type,
const char * value,
void * buf,
size_t len )
static

Parse integer setting value.

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
Return values
lenLength of raw value, or negative error

Definition at line 1940 of file settings.c.

1941 {
1942 char *endp;
1943 unsigned long num_value;
1944
1945 /* Parse value */
1946 num_value = strtoul ( value, &endp, 0 );
1947 if ( *endp )
1948 return -EINVAL;
1949
1950 return type->denumerate ( type, num_value, buf, len );
1951}
#define EINVAL
Invalid argument.
Definition errno.h:472

References EINVAL, len, strtoul(), type, and value.

◆ format_int_setting()

int format_int_setting ( const struct setting_type * type,
const void * raw,
size_t raw_len,
char * buf,
size_t len )
static

Format signed integer setting value.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 1963 of file settings.c.

1965 {
1966 unsigned long value;
1967 int ret;
1968
1969 /* Extract numeric value */
1970 if ( ( ret = type->numerate ( type, raw, raw_len, &value ) ) < 0 )
1971 return ret;
1972
1973 /* Format value */
1974 return snprintf ( buf, len, "%ld", value );
1975}

References len, raw, raw_len, snprintf(), type, and value.

◆ format_uint_setting()

int format_uint_setting ( const struct setting_type * type,
const void * raw,
size_t raw_len,
char * buf,
size_t len )
static

Format unsigned integer setting value.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 1987 of file settings.c.

1989 {
1990 unsigned long value;
1991 int ret;
1992
1993 /* Extract numeric value */
1994 if ( ( ret = type->numerate ( type, raw, raw_len, &value ) ) < 0 )
1995 return ret;
1996
1997 /* Format value */
1998 return snprintf ( buf, len, "%#lx", value );
1999}

References len, raw, raw_len, snprintf(), type, and value.

◆ parse_hex_setting()

int parse_hex_setting ( const struct setting_type *type __unused,
const char * value,
void * buf,
size_t len )
static

Parse hex string setting value (using colon delimiter).

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
sizeInteger size, in bytes
Return values
lenLength of raw value, or negative error

Definition at line 2063 of file settings.c.

2064 {
2065 return hex_decode ( ':', value, buf, len );
2066}
int hex_decode(char separator, const char *encoded, void *data, size_t len)
Decode hexadecimal string (with optional byte separator character).
Definition base16.c:77

References __unused, hex_decode(), len, type, and value.

◆ format_hex_colon_setting()

int format_hex_colon_setting ( const struct setting_type *type __unused,
const void * raw,
size_t raw_len,
char * buf,
size_t len )
static

Format hex string setting value (using colon delimiter).

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 2078 of file settings.c.

2080 {
2081 return hex_encode ( ':', raw, raw_len, buf, len );
2082}
size_t hex_encode(char separator, const void *raw, size_t raw_len, char *data, size_t len)
Encode hexadecimal string (with optional byte separator character).
Definition base16.c:51

References __unused, hex_encode(), len, raw, raw_len, and type.

◆ parse_hex_hyphen_setting()

int parse_hex_hyphen_setting ( const struct setting_type *type __unused,
const char * value,
void * buf,
size_t len )
static

Parse hex string setting value (using hyphen delimiter).

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
sizeInteger size, in bytes
Return values
lenLength of raw value, or negative error

Definition at line 2094 of file settings.c.

2096 {
2097 return hex_decode ( '-', value, buf, len );
2098}

References __unused, hex_decode(), len, type, and value.

◆ format_hex_hyphen_setting()

int format_hex_hyphen_setting ( const struct setting_type *type __unused,
const void * raw,
size_t raw_len,
char * buf,
size_t len )
static

Format hex string setting value (using hyphen delimiter).

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 2110 of file settings.c.

2112 {
2113 return hex_encode ( '-', raw, raw_len, buf, len );
2114}

References __unused, hex_encode(), len, raw, raw_len, and type.

◆ parse_hex_raw_setting()

int parse_hex_raw_setting ( const struct setting_type *type __unused,
const char * value,
void * buf,
size_t len )
static

Parse hex string setting value (using no delimiter).

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
sizeInteger size, in bytes
Return values
lenLength of raw value, or negative error

Definition at line 2126 of file settings.c.

2127 {
2128 return hex_decode ( 0, value, buf, len );
2129}

References __unused, hex_decode(), len, type, and value.

◆ format_hex_raw_setting()

int format_hex_raw_setting ( const struct setting_type *type __unused,
const void * raw,
size_t raw_len,
char * buf,
size_t len )
static

Format hex string setting value (using no delimiter).

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 2141 of file settings.c.

2143 {
2144 return hex_encode ( 0, raw, raw_len, buf, len );
2145}

References __unused, hex_encode(), len, raw, raw_len, and type.

◆ parse_base64_setting()

int parse_base64_setting ( const struct setting_type *type __unused,
const char * value,
void * buf,
size_t len )
static

Parse Base64-encoded setting value.

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
sizeInteger size, in bytes
Return values
lenLength of raw value, or negative error

Definition at line 2178 of file settings.c.

2179 {
2180
2181 return base64_decode ( value, buf, len );
2182}
int base64_decode(const char *encoded, void *data, size_t len)
Base64-decode string.
Definition base64.c:92

References __unused, base64_decode(), len, type, and value.

◆ format_base64_setting()

int format_base64_setting ( const struct setting_type *type __unused,
const void * raw,
size_t raw_len,
char * buf,
size_t len )
static

Format Base64-encoded setting value.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 2194 of file settings.c.

2196 {
2197
2198 return base64_encode ( raw, raw_len, buf, len );
2199}
size_t base64_encode(const void *raw, size_t raw_len, char *data, size_t len)
Base64-encode data.
Definition base64.c:52

References __unused, base64_encode(), len, raw, raw_len, and type.

◆ parse_uuid_setting()

int parse_uuid_setting ( const struct setting_type * type,
const char * value,
void * buf,
size_t len )
static

Parse UUID/GUID setting value.

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
sizeInteger size, in bytes
Return values
lenLength of raw value, or negative error

Definition at line 2218 of file settings.c.

2219 {
2220 union uuid uuid;
2221 int rc;
2222
2223 /* Parse UUID */
2224 if ( ( rc = uuid_aton ( value, &uuid ) ) != 0 )
2225 return rc;
2226
2227 /* Mangle GUID byte ordering */
2228 if ( type == &setting_type_guid )
2229 uuid_mangle ( &uuid );
2230
2231 /* Copy value */
2232 if ( len > sizeof ( uuid ) )
2233 len = sizeof ( uuid );
2234 memcpy ( buf, uuid.raw, len );
2235
2236 return ( sizeof ( uuid ) );
2237}
uint8_t raw[16]
Definition uuid.h:30
int uuid_aton(const char *string, union uuid *uuid)
Parse UUID.
Definition uuid.c:67
static void uuid_mangle(union uuid *uuid)
Change UUID endianness.
Definition uuid.h:44

References len, memcpy(), uuid::raw, rc, type, uuid_aton(), uuid_mangle(), and value.

◆ format_uuid_setting()

int format_uuid_setting ( const struct setting_type * type,
const void * raw,
size_t raw_len,
char * buf,
size_t len )
static

Format UUID/GUID setting value.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 2249 of file settings.c.

2251 {
2252 union uuid uuid;
2253
2254 /* Range check */
2255 if ( raw_len != sizeof ( uuid ) )
2256 return -ERANGE;
2257
2258 /* Copy value */
2259 memcpy ( &uuid, raw, sizeof ( uuid ) );
2260
2261 /* Mangle GUID byte ordering */
2262 if ( type == &setting_type_guid )
2263 uuid_mangle ( &uuid );
2264
2265 /* Format value */
2266 return snprintf ( buf, len, "%s", uuid_ntoa ( &uuid ) );
2267}
const char * uuid_ntoa(const union uuid *uuid)
Convert UUID to printable string.
Definition uuid.c:46

References ERANGE, len, memcpy(), raw, raw_len, snprintf(), type, uuid_mangle(), and uuid_ntoa().

◆ format_busdevfn_setting()

int format_busdevfn_setting ( const struct setting_type *type __unused,
const void * raw,
size_t raw_len,
char * buf,
size_t len )
static

Format PCI bus:dev.fn setting value.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 2293 of file settings.c.

2295 {
2296 unsigned long busdevfn;
2297 unsigned int seg;
2298 unsigned int bus;
2299 unsigned int slot;
2300 unsigned int func;
2301 int check_len;
2302
2303 /* Extract numeric value */
2304 check_len = numeric_setting_value ( 0, raw, raw_len, &busdevfn );
2305 if ( check_len < 0 )
2306 return check_len;
2307 assert ( check_len == ( int ) raw_len );
2308
2309 /* Extract PCI address components */
2310 seg = PCI_SEG ( busdevfn );
2311 bus = PCI_BUS ( busdevfn );
2312 slot = PCI_SLOT ( busdevfn );
2313 func = PCI_FUNC ( busdevfn );
2314
2315 /* Format value */
2316 return snprintf ( buf, len, "%04x:%02x:%02x.%x", seg, bus, slot, func );
2317}
struct golan_mkey_seg seg
Definition CIB_PRM.h:0
uint8_t bus
Bus.
Definition edd.h:1
uint8_t slot
Slot.
Definition edd.h:3
uint16_t busdevfn
PCI bus:dev.fn address.
Definition ena.h:17
#define PCI_SEG(busdevfn)
Definition pci.h:286
#define PCI_FUNC(busdevfn)
Definition pci.h:289
#define PCI_BUS(busdevfn)
Definition pci.h:287
#define PCI_SLOT(busdevfn)
Definition pci.h:288

References __unused, assert, bus, busdevfn, len, numeric_setting_value(), PCI_BUS, PCI_FUNC, PCI_SEG, PCI_SLOT, raw, raw_len, seg, slot, snprintf(), and type.

◆ expand_settings()

char * expand_settings ( const char * string)

Expand variables within string.

Parameters
stringString
Return values
expstrExpanded string

The expanded string is allocated with malloc() and the caller must eventually free() it.

Definition at line 2341 of file settings.c.

2341 {
2342 struct settings *settings;
2343 struct setting setting;
2344 char *expstr;
2345 char *start;
2346 char *end;
2347 char *head;
2348 char *name;
2349 char *tail;
2350 char *value;
2351 char *tmp;
2352 int new_len;
2353 int rc;
2354
2355 /* Obtain temporary modifiable copy of string */
2356 expstr = strdup ( string );
2357 if ( ! expstr )
2358 return NULL;
2359
2360 /* Expand while expansions remain */
2361 while ( 1 ) {
2362
2363 head = expstr;
2364
2365 /* Locate setting to be expanded */
2366 start = NULL;
2367 end = NULL;
2368 for ( tmp = expstr ; *tmp ; tmp++ ) {
2369 if ( ( tmp[0] == '$' ) && ( tmp[1] == '{' ) )
2370 start = tmp;
2371 if ( start && ( tmp[0] == '}' ) ) {
2372 end = tmp;
2373 break;
2374 }
2375 }
2376 if ( ! end )
2377 break;
2378 *start = '\0';
2379 name = ( start + 2 );
2380 *end = '\0';
2381 tail = ( end + 1 );
2382
2383 /* Expand setting */
2385 &settings,
2386 &setting ) ) != 0 ) {
2387 /* Treat invalid setting names as empty */
2388 value = NULL;
2389 } else {
2390 /* Fetch and format setting value. Ignore
2391 * errors; treat non-existent settings as empty.
2392 */
2394 &value );
2395 }
2396
2397 /* Construct expanded string and discard old string */
2398 tmp = expstr;
2399 new_len = asprintf ( &expstr, "%s%s%s",
2400 head, ( value ? value : "" ), tail );
2401 free ( value );
2402 free ( tmp );
2403 if ( new_len < 0 )
2404 return NULL;
2405 }
2406
2407 return expstr;
2408}
int asprintf(char **strp, const char *fmt,...)
Write a formatted string to newly allocated memory.
Definition asprintf.c:42
uint32_t start
Starting offset.
Definition netvsc.h:1
uint8_t head
Head number.
Definition int13.h:23
uint32_t end
Ending offset.
Definition netvsc.h:7
int parse_setting_name(char *name, get_child_settings_t get_child, struct settings **settings, struct setting *setting)
Parse setting name.
Definition settings.c:1539
int fetchf_setting_copy(struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, char **value)
Fetch copy of formatted value of setting.
Definition settings.c:1287

References asprintf(), end, fetchf_setting_copy(), find_child_settings(), free, head, name, NULL, parse_setting_name(), rc, start, strdup(), tmp, and value.

Referenced by expand_tokens(), fetch_next_server_and_filename(), fetch_root_path(), and fetch_san_filename().

◆ __setting() [1/18]

const struct setting hostname_setting __setting ( SETTING_HOST ,
hostname  )

Hostname setting.

References DHCP_HOST_NAME, and SETTING_HOST.

◆ __setting() [2/18]

const struct setting domain_setting __setting ( SETTING_IP_EXTRA ,
domain  )

Domain name setting.

References DHCP_DOMAIN_NAME, and SETTING_IP_EXTRA.

◆ __setting() [3/18]

const struct setting next_server_setting __setting ( SETTING_BOOT ,
next- server )

TFTP server setting.

References DHCP_EB_SIADDR, next, and SETTING_BOOT.

◆ __setting() [4/18]

const struct setting filename_setting __setting ( SETTING_BOOT ,
filename  )

Filename setting.

References DHCP_BOOTFILE_NAME, and SETTING_BOOT.

◆ __setting() [5/18]

const struct setting root_path_setting __setting ( SETTING_SANBOOT ,
root- path )

Root path setting.

References DHCP_ROOT_PATH, root, and SETTING_SANBOOT.

◆ __setting() [6/18]

const struct setting san_filename_setting __setting ( SETTING_SANBOOT ,
san- filename )

SAN filename setting.

References DHCP_EB_SAN_FILENAME, and SETTING_SANBOOT.

◆ __setting() [7/18]

const struct setting username_setting __setting ( SETTING_AUTH ,
username  )

Username setting.

References DHCP_EB_USERNAME, SETTING_AUTH, and username.

◆ __setting() [8/18]

const struct setting password_setting __setting ( SETTING_AUTH ,
password  )

Password setting.

References DHCP_EB_PASSWORD, password, and SETTING_AUTH.

◆ __setting() [9/18]

const struct setting priority_setting __setting ( SETTING_MISC ,
priority  )

Priority setting.

References DHCP_EB_PRIORITY, priority, and SETTING_MISC.

◆ __setting() [10/18]

const struct setting user_class_setting __setting ( SETTING_HOST_EXTRA ,
user- class )

DHCP user class setting.

References DHCP_USER_CLASS_ID, and SETTING_HOST_EXTRA.

◆ __setting() [11/18]

const struct setting vendor_class_setting __setting ( SETTING_HOST_EXTRA ,
vendor- class )

DHCP vendor class setting.

References DHCP_VENDOR_CLASS_ID, SETTING_HOST_EXTRA, and vendor.

◆ errno_fetch()

int errno_fetch ( void * data,
size_t len )
static

Fetch error number setting.

Parameters
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 2525 of file settings.c.

2525 {
2526 uint32_t content;
2527
2528 /* Return current error */
2529 content = htonl ( errno );
2530 if ( len > sizeof ( content ) )
2531 len = sizeof ( content );
2532 memcpy ( data, &content, len );
2533 return sizeof ( content );
2534}
int errno
Global "last error" number.
Definition errno.c:21

References data, errno, htonl, len, and memcpy().

◆ __setting() [12/18]

const struct setting errno_setting __setting ( SETTING_MISC ,
errno  )

Error number setting.

References builtin_scope, errno, and SETTING_MISC.

◆ buildarch_fetch()

int buildarch_fetch ( void * data,
size_t len )
static

Fetch build architecture setting.

Parameters
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 2557 of file settings.c.

2557 {
2558 static const char buildarch[] = _S2 ( ARCH );
2559
2560 strncpy ( data, buildarch, len );
2561 return ( sizeof ( buildarch ) - 1 /* NUL */ );
2562}
#define _S2(x)
Stringify expanded argument.
Definition compiler.h:53
char * strncpy(char *dest, const char *src, size_t max)
Copy string.
Definition string.c:392

References _S2, data, len, and strncpy().

◆ __setting() [13/18]

const struct setting buildarch_setting __setting ( SETTING_MISC ,
buildarch  )

Build architecture setting.

References builtin_scope, and SETTING_MISC.

◆ platform_fetch()

int platform_fetch ( void * data,
size_t len )
static

Fetch platform setting.

Parameters
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 2585 of file settings.c.

2585 {
2586 static const char platform[] = _S2 ( PLATFORM );
2587
2588 strncpy ( data, platform, len );
2589 return ( sizeof ( platform ) - 1 /* NUL */ );
2590}

References _S2, data, len, and strncpy().

◆ __setting() [14/18]

const struct setting platform_setting __setting ( SETTING_MISC ,
platform  )

Platform setting.

References builtin_scope, and SETTING_MISC.

◆ version_fetch()

int version_fetch ( void * data,
size_t len )
static

Fetch version setting.

Parameters
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 2613 of file settings.c.

2613 {
2615 return ( strlen ( product_version ) );
2616}
const char product_version[]
Product version string.
Definition version.c:72

References data, len, product_version, strlen(), and strncpy().

◆ __setting() [15/18]

const struct setting version_setting __setting ( SETTING_MISC ,
version  )

Version setting.

References builtin_scope, SETTING_MISC, and version.

◆ unixtime_fetch()

int unixtime_fetch ( void * data,
size_t len )
static

Fetch current time setting.

Parameters
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 2639 of file settings.c.

2639 {
2640 uint32_t content;
2641
2642 /* Return current time */
2643 content = htonl ( time ( NULL ) );
2644 if ( len > sizeof ( content ) )
2645 len = sizeof ( content );
2646 memcpy ( data, &content, len );
2647 return sizeof ( content );
2648}

References data, htonl, len, memcpy(), and NULL.

◆ unixtime_store()

int unixtime_store ( const void * data,
size_t len )
static

Store current time setting.

Parameters
dataSetting data, or NULL to clear setting
lenLength of setting data
Return values
rcReturn status code

Definition at line 2657 of file settings.c.

2657 {
2658 unsigned long value;
2659 int check_len;
2660 int rc;
2661
2662 /* Get intended current time */
2663 check_len = numeric_setting_value ( 0, data, len, &value );
2664 if ( check_len < 0 ) {
2665 rc = check_len;
2666 return rc;
2667 }
2668
2669 /* Adjust or restore system clock, as applicable */
2670 if ( len ) {
2671 time_adjust ( value - time ( NULL ) );
2672 } else {
2673 time_restore();
2674 }
2675
2676 return 0;
2677}

References data, len, NULL, numeric_setting_value(), rc, and value.

◆ __setting() [16/18]

const struct setting unixtime_setting __setting ( SETTING_MISC ,
unixtime  )

Current time setting.

References builtin_scope, and SETTING_MISC.

◆ cwuri_fetch_uri()

int cwuri_fetch_uri ( void * data,
size_t len,
const char * rel )
static

Fetch current working URI-related setting.

Parameters
dataBuffer to fill with setting data
lenLength of buffer
relRelative URI string
Return values
lenLength of setting data, or negative error

Definition at line 2702 of file settings.c.

2702 {
2703 struct uri *reluri;
2704 struct uri *uri;
2705 char *uristring;
2706 int ret;
2707
2708 /* Check that current working URI is set */
2709 if ( ! cwuri ) {
2710 ret = -ENOENT;
2711 goto err_unset;
2712 }
2713
2714 /* Construct relative URI */
2715 reluri = parse_uri ( rel );
2716 if ( ! reluri ) {
2717 ret = -ENOMEM;
2718 goto err_parse;
2719 }
2720
2721 /* Construct resolved URI */
2722 uri = resolve_uri ( cwuri, reluri );
2723 if ( ! uri ) {
2724 ret = -ENOMEM;
2725 goto err_resolve;
2726 }
2727
2728 /* Format URI string into allocated buffer (with NUL) */
2729 uristring = format_uri_alloc ( uri );
2730 if ( ! uristring ) {
2731 ret = -ENOMEM;
2732 goto err_format;
2733 }
2734
2735 /* Copy URI string to buffer */
2736 strncpy ( data, uristring, len );
2737 ret = strlen ( uristring );
2738
2739 free ( uristring );
2740 err_format:
2741 uri_put ( uri );
2742 err_resolve:
2743 uri_put ( reluri );
2744 err_parse:
2745 err_unset:
2746 return ret;
2747}
struct uri * cwuri
Current working URI.
Definition cwuri.c:39
A Uniform Resource Identifier.
Definition uri.h:65
struct uri * parse_uri(const char *uri_string)
Parse URI.
Definition uri.c:297
struct uri * resolve_uri(const struct uri *base_uri, struct uri *relative_uri)
Resolve base+relative URI.
Definition uri.c:696
char * format_uri_alloc(const struct uri *uri)
Format URI.
Definition uri.c:542
static void uri_put(struct uri *uri)
Decrement URI reference count.
Definition uri.h:206

References cwuri, data, ENOENT, ENOMEM, format_uri_alloc(), free, len, parse_uri(), resolve_uri(), strlen(), strncpy(), and uri_put().

Referenced by cwduri_fetch(), and cwuri_fetch().

◆ cwuri_fetch()

int cwuri_fetch ( void * data,
size_t len )
static

Fetch current working URI setting.

Parameters
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 2756 of file settings.c.

2756 {
2757
2758 return cwuri_fetch_uri ( data, len, "" );
2759}
static int cwuri_fetch_uri(void *data, size_t len, const char *rel)
Fetch current working URI-related setting.
Definition settings.c:2702

References cwuri_fetch_uri(), data, and len.

◆ cwduri_fetch()

int cwduri_fetch ( void * data,
size_t len )
static

Fetch current working directory URI setting.

Parameters
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 2768 of file settings.c.

2768 {
2769
2770 return cwuri_fetch_uri ( data, len, "." );
2771}

References cwuri_fetch_uri(), data, and len.

◆ __setting() [17/18]

const struct setting cwuri_setting __setting ( SETTING_MISC ,
cwuri  )

Current working URI setting.

References builtin_scope, cwuri, and SETTING_MISC.

◆ __setting() [18/18]

const struct setting cwduri_setting __setting ( SETTING_MISC ,
cwduri  )

Current working directory URI setting.

References builtin_scope, and SETTING_MISC.

◆ builtin_store()

int builtin_store ( struct settings *settings __unused,
const struct setting * setting,
const void * data,
size_t len )
static

Store built-in setting.

Parameters
settingsSettings block
settingSetting to store
dataSetting data, or NULL to clear setting
lenLength of setting data
Return values
rcReturn status code

Definition at line 2810 of file settings.c.

2812 {
2813 struct builtin_setting *builtin;
2814
2816 if ( setting_cmp ( setting, builtin->setting ) == 0 ) {
2817 if ( ! builtin->store )
2818 return -ENOTSUP;
2819 return builtin->store ( data, len );
2820 }
2821 }
2822 return -ENOENT;
2823}
#define BUILTIN_SETTINGS
Built-in settings table.
Definition settings.h:289
A built-in setting.
Definition settings.h:268
const struct setting * setting
Setting.
Definition settings.h:270
int(* store)(const void *data, size_t len)
Store setting value.
Definition settings.h:278

References __unused, BUILTIN_SETTINGS, data, ENOENT, ENOTSUP, for_each_table_entry, len, builtin_setting::setting, setting_cmp(), and builtin_setting::store.

◆ builtin_fetch()

int builtin_fetch ( struct settings *settings __unused,
struct setting * setting,
void * data,
size_t len )
static

Fetch built-in setting.

Parameters
settingsSettings block
settingSetting to fetch
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 2834 of file settings.c.

2836 {
2837 struct builtin_setting *builtin;
2838
2840 if ( setting_cmp ( setting, builtin->setting ) == 0 )
2841 return builtin->fetch ( data, len );
2842 }
2843 return -ENOENT;
2844}
int(* fetch)(void *data, size_t len)
Fetch setting value.
Definition settings.h:285

References __unused, BUILTIN_SETTINGS, data, ENOENT, builtin_setting::fetch, for_each_table_entry, len, builtin_setting::setting, and setting_cmp().

◆ builtin_applies()

int builtin_applies ( struct settings *settings __unused,
const struct setting * setting )
static

Check applicability of built-in setting.

Parameters
settingsSettings block
settingSetting
Return values
appliesSetting applies within this settings block

Definition at line 2853 of file settings.c.

2854 {
2855
2856 return ( setting->scope == &builtin_scope );
2857}
const struct settings_scope builtin_scope
Built-in setting scope.
Definition settings.c:2516

References __unused, builtin_scope, and setting::scope.

◆ builtin_init()

void builtin_init ( void )
static

Initialise built-in settings.

Definition at line 2875 of file settings.c.

2875 {
2876 int rc;
2877
2879 "builtin" ) ) != 0 ) {
2880 DBG ( "Could not register built-in settings: %s\n",
2881 strerror ( rc ) );
2882 return;
2883 }
2884}
static struct settings builtin_settings
Built-in settings.
Definition settings.c:2867

References builtin_settings, DBG, NULL, rc, register_settings(), and strerror().

Referenced by __init_fn().

◆ __init_fn()

struct init_fn builtin_init_fn __init_fn ( INIT_NORMAL )

Built-in settings initialiser.

References builtin_init(), and INIT_NORMAL.

Variable Documentation

◆ generic_settings_operations

struct settings_operations generic_settings_operations
Initial value:
= {
}
int generic_settings_fetch(struct settings *settings, struct setting *setting, void *data, size_t len)
Fetch value of generic setting.
Definition settings.c:179
int generic_settings_store(struct settings *settings, const struct setting *setting, const void *data, size_t len)
Store value of generic setting.
Definition settings.c:127

Generic settings operations.

Definition at line 222 of file settings.c.

222 {
223 .store = generic_settings_store,
224 .fetch = generic_settings_fetch,
225 .clear = generic_settings_clear,
226};

Referenced by generic_settings_init().

◆ generic_settings_root

struct generic_settings generic_settings_root
Initial value:
= {
.settings = {
.refcnt = NULL,
.name = "",
.siblings =
LIST_HEAD_INIT ( generic_settings_root.settings.siblings ),
.children =
LIST_HEAD_INIT ( generic_settings_root.settings.children ),
},
}
#define LIST_HEAD_INIT(list)
Initialise a static list head.
Definition list.h:31
struct generic_settings generic_settings_root
Root generic settings block.
Definition settings.c:236
struct settings_operations generic_settings_operations
Generic settings operations.
Definition settings.c:222

Root generic settings block.

Definition at line 236 of file settings.c.

236 {
237 .settings = {
238 .refcnt = NULL,
239 .name = "",
240 .siblings =
241 LIST_HEAD_INIT ( generic_settings_root.settings.siblings ),
242 .children =
243 LIST_HEAD_INIT ( generic_settings_root.settings.children ),
245 },
246 .list = LIST_HEAD_INIT ( generic_settings_root.list ),
247};

◆ __setting_type

const struct setting_type setting_type_busdevfn __setting_type
Initial value:
= {
.name = "string",
}
static int parse_string_setting(const struct setting_type *type __unused, const char *value, void *buf, size_t len)
Parse string setting value.
Definition settings.c:1643
static int format_string_setting(const struct setting_type *type __unused, const void *raw, size_t raw_len, char *buf, size_t len)
Format string setting value.
Definition settings.c:1665

A string setting type.

PCI bus:dev.fn setting type.

GUID setting type.

UUID setting type.

A Base64-encoded setting.

A hex-string setting (non-delimited).

A hex-string setting (hyphen-delimited).

A hex-string setting (colon-delimited).

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 IPv6 address setting type.

An IPv4 address setting type.

A URI-encoded string setting type.

Definition at line 1679 of file settings.c.

1679 {
1680 .name = "string",
1681 .parse = parse_string_setting,
1682 .format = format_string_setting,
1683};

◆ dhcpv6_scope

const struct settings_scope dhcpv6_scope

IPv6 settings scope.

DHCPv6 setting scope.

Definition at line 1803 of file settings.c.

Referenced by __setting(), __setting(), __setting(), __setting(), dhcpv6_applies(), and dhcpv6_register().

◆ setting_type_int_name

const char setting_type_int_name[][8]
static
Initial value:
= {
[SETTING_TYPE_INT8] = "uint8",
[SETTING_TYPE_INT16] = "uint16",
[SETTING_TYPE_INT32] = "uint32",
}

Integer setting type names.

These names exist as a static array in order to allow the type's integer size and signedness to be determined from the type's name. Note that there are no separate entries for the signed integer types: the name pointers simply point to the second character of the relevant string.

Definition at line 1826 of file settings.c.

1826 {
1827 [SETTING_TYPE_INT8] = "uint8",
1828 [SETTING_TYPE_INT16] = "uint16",
1829 [SETTING_TYPE_INT32] = "uint32",
1830};

Referenced by setting_type_int_index(), and setting_type_int_is_signed().

◆ builtin_scope

const struct settings_scope builtin_scope

Built-in setting scope.

Definition at line 2516 of file settings.c.

Referenced by __setting(), __setting(), __setting(), __setting(), __setting(), __setting(), __setting(), __setting(), __setting(), __setting(), and builtin_applies().

◆ __builtin_setting

struct builtin_setting cwduri_builtin_setting __builtin_setting
Initial value:
= {
.setting = &errno_setting,
.fetch = errno_fetch,
}
static int errno_fetch(void *data, size_t len)
Fetch error number setting.
Definition settings.c:2525

Error number built-in setting.

Current working directory URI built-in setting.

Current working URI built-in setting.

Current time built-in setting.

Version built-in setting.

Platform built-in setting.

Build architecture built-in setting.

Definition at line 2545 of file settings.c.

2545 {
2546 .setting = &errno_setting,
2547 .fetch = errno_fetch,
2548};

◆ builtin_settings_operations

struct settings_operations builtin_settings_operations
static
Initial value:
= {
.applies = builtin_applies,
.store = builtin_store,
.fetch = builtin_fetch,
}
static int builtin_applies(struct settings *settings __unused, const struct setting *setting)
Check applicability of built-in setting.
Definition settings.c:2853
static int builtin_fetch(struct settings *settings __unused, struct setting *setting, void *data, size_t len)
Fetch built-in setting.
Definition settings.c:2834
static int builtin_store(struct settings *settings __unused, const struct setting *setting, const void *data, size_t len)
Store built-in setting.
Definition settings.c:2810

Built-in settings operations.

Definition at line 2860 of file settings.c.

2860 {
2861 .applies = builtin_applies,
2862 .store = builtin_store,
2863 .fetch = builtin_fetch,
2864};

◆ builtin_settings

struct settings builtin_settings
static
Initial value:
= {
.refcnt = NULL,
.siblings = LIST_HEAD_INIT ( builtin_settings.siblings ),
.children = LIST_HEAD_INIT ( builtin_settings.children ),
}
static struct settings_operations builtin_settings_operations
Built-in settings operations.
Definition settings.c:2860

Built-in settings.

Definition at line 2867 of file settings.c.

2867 {
2868 .refcnt = NULL,
2869 .siblings = LIST_HEAD_INIT ( builtin_settings.siblings ),
2870 .children = LIST_HEAD_INIT ( builtin_settings.children ),
2872};

Referenced by builtin_init().