GNUnet  0.11.x
Typedefs | Functions
Configuration library

Configuration management. More...

Typedefs

typedef int(* GNUNET_CONFIGURATION_Callback) (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg)
 Signature of a function to be run with a configuration. More...
 
typedef void(* GNUNET_CONFIGURATION_Iterator) (void *cls, const char *section, const char *option, const char *value)
 Function to iterate over options. More...
 
typedef void(* GNUNET_CONFIGURATION_Section_Iterator) (void *cls, const char *section)
 Function to iterate over section. More...
 

Functions

struct GNUNET_CONFIGURATION_HandleGNUNET_CONFIGURATION_create (void)
 Create a new configuration object. More...
 
struct GNUNET_CONFIGURATION_HandleGNUNET_CONFIGURATION_dup (const struct GNUNET_CONFIGURATION_Handle *cfg)
 Duplicate an existing configuration object. More...
 
void GNUNET_CONFIGURATION_destroy (struct GNUNET_CONFIGURATION_Handle *cfg)
 Destroy configuration object. More...
 
int GNUNET_CONFIGURATION_load (struct GNUNET_CONFIGURATION_Handle *cfg, const char *filename)
 Load configuration. More...
 
int GNUNET_CONFIGURATION_load_from (struct GNUNET_CONFIGURATION_Handle *cfg, const char *defaults_d)
 Load default configuration. More...
 
int GNUNET_CONFIGURATION_parse (struct GNUNET_CONFIGURATION_Handle *cfg, const char *filename)
 Parse a configuration file, add all of the options in the file to the configuration environment. More...
 
char * GNUNET_CONFIGURATION_serialize (const struct GNUNET_CONFIGURATION_Handle *cfg, size_t *size)
 Serializes the given configuration. More...
 
int GNUNET_CONFIGURATION_deserialize (struct GNUNET_CONFIGURATION_Handle *cfg, const char *mem, size_t size, const char *basedir)
 De-serializes configuration. More...
 
int GNUNET_CONFIGURATION_write (struct GNUNET_CONFIGURATION_Handle *cfg, const char *filename)
 Write configuration file. More...
 
int GNUNET_CONFIGURATION_write_diffs (const struct GNUNET_CONFIGURATION_Handle *cfg_default, const struct GNUNET_CONFIGURATION_Handle *cfg_new, const char *filename)
 Write only configuration entries that have been changed to configuration file. More...
 
struct GNUNET_CONFIGURATION_HandleGNUNET_CONFIGURATION_get_diff (const struct GNUNET_CONFIGURATION_Handle *cfg_default, const struct GNUNET_CONFIGURATION_Handle *cfg_new)
 Compute configuration with only entries that have been changed. More...
 
int GNUNET_CONFIGURATION_is_dirty (const struct GNUNET_CONFIGURATION_Handle *cfg)
 Test if there are configuration options that were changed since the last save. More...
 
int GNUNET_CONFIGURATION_parse_and_run (const char *filename, GNUNET_CONFIGURATION_Callback cb, void *cb_cls)
 Parse a configuration file filename and run the function cb with the resulting configuration object. More...
 
void GNUNET_CONFIGURATION_iterate (const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_CONFIGURATION_Iterator iter, void *iter_cls)
 Iterate over all options in the configuration. More...
 
void GNUNET_CONFIGURATION_iterate_sections (const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_CONFIGURATION_Section_Iterator iter, void *iter_cls)
 Iterate over all sections in the configuration. More...
 
void GNUNET_CONFIGURATION_remove_section (struct GNUNET_CONFIGURATION_Handle *cfg, const char *section)
 Remove the given section and all options in it. More...
 
int GNUNET_CONFIGURATION_get_value_number (const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, unsigned long long *number)
 Get a configuration value that should be a number. More...
 
int GNUNET_CONFIGURATION_get_value_float (const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, float *number)
 Get a configuration value that should be a floating point number. More...
 
int GNUNET_CONFIGURATION_get_value_time (const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, struct GNUNET_TIME_Relative *time)
 Get a configuration value that should be a relative time. More...
 
int GNUNET_CONFIGURATION_get_value_size (const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, unsigned long long *size)
 Get a configuration value that should be a size in bytes. More...
 
int GNUNET_CONFIGURATION_have_value (const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option)
 Test if we have a value for a particular option. More...
 
int GNUNET_CONFIGURATION_get_value_string (const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, char **value)
 Get a configuration value that should be a string. More...
 
int GNUNET_CONFIGURATION_get_value_filename (const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, char **value)
 Get a configuration value that should be the name of a file or directory. More...
 
int GNUNET_CONFIGURATION_iterate_value_filenames (const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, GNUNET_FileNameCallback cb, void *cb_cls)
 Iterate over the set of filenames stored in a configuration value. More...
 
void GNUNET_CONFIGURATION_iterate_section_values (const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, GNUNET_CONFIGURATION_Iterator iter, void *iter_cls)
 Iterate over values of a section in the configuration. More...
 
int GNUNET_CONFIGURATION_get_value_choice (const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, const char *const *choices, const char **value)
 Get a configuration value that should be in a set of predefined strings. More...
 
int GNUNET_CONFIGURATION_get_value_yesno (const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option)
 Get a configuration value that should be in a set of "YES" or "NO". More...
 
int GNUNET_CONFIGURATION_get_data (const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, void *buf, size_t buf_size)
 Get Crockford32-encoded fixed-size binary data from a configuration. More...
 
char * GNUNET_CONFIGURATION_expand_dollar (const struct GNUNET_CONFIGURATION_Handle *cfg, char *orig)
 Expand an expression of the form "$FOO/BAR" to "DIRECTORY/BAR" where either in the "PATHS" section or the environtment "FOO" is set to "DIRECTORY". More...
 
void GNUNET_CONFIGURATION_set_value_number (struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, unsigned long long number)
 Set a configuration value that should be a number. More...
 
void GNUNET_CONFIGURATION_set_value_string (struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, const char *value)
 Set a configuration value that should be a string. More...
 
int GNUNET_CONFIGURATION_remove_value_filename (struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, const char *value)
 Remove a filename from a configuration value that represents a list of filenames. More...
 
int GNUNET_CONFIGURATION_append_value_filename (struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, const char *value)
 Append a filename to a configuration value that represents a list of filenames. More...
 

Detailed Description

Configuration management.

Typedef Documentation

◆ GNUNET_CONFIGURATION_Callback

typedef int(* GNUNET_CONFIGURATION_Callback) (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg)

Signature of a function to be run with a configuration.

Parameters
clsclosure
cfgthe configuration
Returns
status code

Definition at line 207 of file gnunet_configuration_lib.h.

◆ GNUNET_CONFIGURATION_Iterator

typedef void(* GNUNET_CONFIGURATION_Iterator) (void *cls, const char *section, const char *option, const char *value)

Function to iterate over options.

Parameters
clsclosure
sectionname of the section
optionname of the option
valuevalue of the option

Definition at line 237 of file gnunet_configuration_lib.h.

◆ GNUNET_CONFIGURATION_Section_Iterator

typedef void(* GNUNET_CONFIGURATION_Section_Iterator) (void *cls, const char *section)

Function to iterate over section.

Parameters
clsclosure
sectionname of the section

Definition at line 250 of file gnunet_configuration_lib.h.

Function Documentation

◆ GNUNET_CONFIGURATION_create()

struct GNUNET_CONFIGURATION_Handle* GNUNET_CONFIGURATION_create ( void  )

Create a new configuration object.

Returns
fresh configuration object

Create a new configuration object.

Returns
fresh configuration object

Definition at line 119 of file configuration.c.

References GNUNET_new.

Referenced by auto_config_cb(), create_unique_cfgs(), gg_load_configuration(), GNUNET_ATS_solvers_experimentation_load(), GNUNET_ATS_TEST_experimentation_load(), GNUNET_CONFIGURATION_dup(), GNUNET_CONFIGURATION_get_diff(), GNUNET_CONFIGURATION_parse_and_run(), GNUNET_CRYPTO_eddsa_setup_key(), GNUNET_PROGRAM_run2(), GNUNET_SERVICE_run_(), GNUNET_TESTBED_barrier_wait(), GNUNET_TESTBED_extract_config_(), GNUNET_TESTING_service_run(), GNUNET_TESTING_system_create_with_portrange(), GNUNET_TRANSPORT_TESTING_start_peer(), GNUNET_TRANSPORT_TESTING_transport_communicator_service_start(), handle_auto_result(), handle_autoconfig_request(), helper_mst(), iter_check_config(), LEGACY_SERVICE_run(), main(), run(), and tokenizer_cb().

120 {
121  return GNUNET_new (struct GNUNET_CONFIGURATION_Handle);
122 }
#define GNUNET_new(type)
Allocate a struct or union of the given type.
configuration data
Definition: configuration.c:85
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_dup()

struct GNUNET_CONFIGURATION_Handle* GNUNET_CONFIGURATION_dup ( const struct GNUNET_CONFIGURATION_Handle cfg)

Duplicate an existing configuration object.

Parameters
cfgconfiguration to duplicate
Returns
duplicate configuration

Definition at line 702 of file configuration.c.

References copy_entry(), GNUNET_CONFIGURATION_create(), GNUNET_CONFIGURATION_iterate(), and ret.

Referenced by associate_shared_service(), auto_config_cb(), controller_status_cb(), create_unique_cfgs(), GNUNET_NAT_autoconfig_start(), GNUNET_TESTBED_controller_connect(), GNUNET_TESTBED_host_create_with_id(), GNUNET_TESTBED_host_replace_cfg_(), GNUNET_TESTBED_run(), GNUNET_TESTING_peer_configure(), GST_connection_pool_get_handle(), handle_autoconfig_request(), run(), set_cont(), and testbed_run().

703 {
705 
708  return ret;
709 }
void GNUNET_CONFIGURATION_iterate(const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_CONFIGURATION_Iterator iter, void *iter_cls)
Iterate over all options in the configuration.
static int ret
Return value of the commandline.
Definition: gnunet-abd.c:81
struct GNUNET_CONFIGURATION_Handle * GNUNET_CONFIGURATION_create()
Create a GNUNET_CONFIGURATION_Handle.
static void copy_entry(void *cls, const char *section, const char *option, const char *value)
Copy a configuration value to the given target configuration.
configuration data
Definition: configuration.c:85
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_destroy()

void GNUNET_CONFIGURATION_destroy ( struct GNUNET_CONFIGURATION_Handle cfg)

Destroy configuration object.

Parameters
cfgconfiguration to destroy

Definition at line 131 of file configuration.c.

References GNUNET_CONFIGURATION_remove_section(), GNUNET_free, ConfigSection::name, and GNUNET_CONFIGURATION_Handle::sections.

Referenced by associate_shared_service(), auto_config_cb(), clean_node(), cleanup(), cleanup_prc(), conclude_autoconfig_request(), controller_status_cb(), create_unique_cfgs(), destroy_pooled_connection(), do_shutdown(), GNUNET_ATS_solvers_experimentation_load(), GNUNET_ATS_solvers_experimentation_stop(), GNUNET_ATS_TEST_experimentation_load(), GNUNET_CONFIGURATION_parse_and_run(), GNUNET_CONFIGURATION_write_diffs(), GNUNET_CRYPTO_eddsa_setup_key(), GNUNET_NAT_autoconfig_cancel(), GNUNET_PROGRAM_run2(), GNUNET_SERVICE_run_(), GNUNET_TESTBED_barrier_wait(), GNUNET_TESTBED_barrier_wait_cancel(), GNUNET_TESTBED_controller_disconnect(), GNUNET_TESTBED_host_destroy(), GNUNET_TESTBED_host_replace_cfg_(), GNUNET_TESTBED_run(), GNUNET_TESTING_peer_destroy(), GNUNET_TESTING_service_run(), GNUNET_TESTING_system_destroy(), GNUNET_TRANSPORT_TESTING_start_peer(), GNUNET_TRANSPORT_TESTING_stop_peer(), GNUNET_TRANSPORT_TESTING_transport_communicator_service_start(), GST_destroy_peer(), GST_destroy_peers(), handle_add_host(), handle_auto_result(), handle_autoconfig_request(), handle_link_controllers_result(), helper_mst(), LEGACY_SERVICE_run(), main(), next_phase(), oprelease_get_slave_config(), oprelease_peer_getinfo(), oprelease_service_connect(), run(), shutdown_task(), tokenizer_cb(), and update_peer_config().

132 {
133  struct ConfigSection *sec;
134 
135  while (NULL != (sec = cfg->sections))
137  GNUNET_free (cfg);
138 }
char * name
name of the section
Definition: configuration.c:78
void GNUNET_CONFIGURATION_remove_section(struct GNUNET_CONFIGURATION_Handle *cfg, const char *section)
Remove the given section and all options in it.
struct ConfigSection * sections
Configuration sections.
Definition: configuration.c:90
configuration section
Definition: configuration.c:63
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_load()

int GNUNET_CONFIGURATION_load ( struct GNUNET_CONFIGURATION_Handle cfg,
const char *  filename 
)

Load configuration.

This function will first parse the defaults and then parse the specific configuration file to overwrite the defaults.

Parameters
cfgconfiguration to update
filenamename of the configuration file, NULL to load defaults
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Load configuration.

Parameters
cfgconfiguration to update
filenamename of the configuration file, NULL to load defaults
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 42 of file configuration_loader.c.

References GNUNET_OS_ProjectData::base_config_varname, getenv(), GNUNET_asprintf(), GNUNET_CONFIGURATION_have_value(), GNUNET_CONFIGURATION_load_from(), GNUNET_CONFIGURATION_parse(), GNUNET_CONFIGURATION_set_value_string(), GNUNET_free, GNUNET_OK, GNUNET_OS_installation_get_path(), GNUNET_OS_IPK_DATADIR, GNUNET_OS_project_data_get(), GNUNET_strdup, GNUNET_SYSERR, and GNUNET_YES.

Referenced by auto_config_cb(), create_unique_cfgs(), gg_load_configuration(), GNUNET_ATS_solvers_experimentation_load(), GNUNET_ATS_TEST_experimentation_load(), GNUNET_CONFIGURATION_parse_and_run(), GNUNET_CRYPTO_eddsa_setup_key(), GNUNET_PROGRAM_run2(), GNUNET_SERVICE_run_(), GNUNET_TESTBED_barrier_wait(), GNUNET_TESTING_service_run(), GNUNET_TRANSPORT_TESTING_start_peer(), GNUNET_TRANSPORT_TESTING_transport_communicator_service_start(), iter_check_config(), LEGACY_SERVICE_run(), main(), and run().

44 {
45  char *baseconfig;
46  const char *base_config_varname;
47 
48  base_config_varname = GNUNET_OS_project_data_get ()->base_config_varname;
49 
50  if (NULL != (baseconfig = getenv (base_config_varname)))
51  {
52  baseconfig = GNUNET_strdup (baseconfig);
53  }
54  else
55  {
56  char *ipath;
57 
59  if (NULL == ipath)
60  return GNUNET_SYSERR;
61  GNUNET_asprintf (&baseconfig, "%s%s", ipath, "config.d");
62  GNUNET_free (ipath);
63  }
64 
65  if (GNUNET_SYSERR ==
67  baseconfig))
68  {
69  GNUNET_free (baseconfig);
70  return GNUNET_SYSERR; /* no configuration at all found */
71  }
72  GNUNET_free (baseconfig);
73  if ((NULL != filename) &&
75  {
76  /* specified configuration not found */
77  return GNUNET_SYSERR;
78  }
79  if (((GNUNET_YES !=
80  GNUNET_CONFIGURATION_have_value (cfg, "PATHS", "DEFAULTCONFIG"))) &&
81  (filename != NULL))
82  GNUNET_CONFIGURATION_set_value_string (cfg, "PATHS", "DEFAULTCONFIG",
83  filename);
84  return GNUNET_OK;
85 }
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
int GNUNET_CONFIGURATION_parse(struct GNUNET_CONFIGURATION_Handle *cfg, const char *filename)
Parse a configuration file, add all of the options in the file to the configuration environment...
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
int GNUNET_asprintf(char **buf, const char *format,...)
Like asprintf, just portable.
int GNUNET_CONFIGURATION_have_value(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option)
Test if we have a value for a particular option.
char * GNUNET_OS_installation_get_path(enum GNUNET_OS_InstallationPathKind dirkind)
Get the path to a specific GNUnet installation directory or, with GNUNET_OS_IPK_SELF_PREFIX, the current running apps installation directory.
static char * filename
void GNUNET_CONFIGURATION_set_value_string(struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, const char *value)
Set a configuration value that should be a string.
int GNUNET_CONFIGURATION_load_from(struct GNUNET_CONFIGURATION_Handle *cfg, const char *defaults_d)
Load default configuration.
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
char * getenv()
const char * base_config_varname
Name of an environment variable that can be used to override the location from which default configur...
const struct GNUNET_OS_ProjectData * GNUNET_OS_project_data_get(void)
#define GNUNET_YES
Definition: gnunet_common.h:77
Return the directory where data is installed (share/gnunet/)
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_load_from()

int GNUNET_CONFIGURATION_load_from ( struct GNUNET_CONFIGURATION_Handle cfg,
const char *  defaults_d 
)

Load default configuration.

This function will parse the defaults from the given defaults_d directory.

Parameters
cfgconfiguration to update
defaults_ddirectory with the defaults
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

This function will parse the defaults from the given defaults_d directory.

Parameters
cfgconfiguration to update
defaults_ddirectory with the defaults
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 1725 of file configuration.c.

References GNUNET_DISK_directory_scan(), GNUNET_OK, GNUNET_SYSERR, and parse_configuration_file().

Referenced by GNUNET_CONFIGURATION_load().

1727 {
1728  if (GNUNET_SYSERR ==
1730  return GNUNET_SYSERR; /* no configuration at all found */
1731  return GNUNET_OK;
1732 }
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
int GNUNET_DISK_directory_scan(const char *dir_name, GNUNET_FileNameCallback callback, void *callback_cls)
Scan a directory for files.
Definition: disk.c:912
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
static int parse_configuration_file(void *cls, const char *filename)
Wrapper around GNUNET_CONFIGURATION_parse.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_parse()

int GNUNET_CONFIGURATION_parse ( struct GNUNET_CONFIGURATION_Handle cfg,
const char *  filename 
)

Parse a configuration file, add all of the options in the file to the configuration environment.

Parameters
cfgconfiguration to update
filenamename of the configuration file
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 346 of file configuration.c.

References _, GNUNET_CONFIGURATION_Handle::dirty, fn, fs, GNUNET_break, GNUNET_CONFIGURATION_deserialize(), GNUNET_DISK_file_size(), GNUNET_DISK_fn_read(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_WARNING, GNUNET_free, GNUNET_malloc, GNUNET_STRINGS_filename_expand(), GNUNET_SYSERR, GNUNET_YES, LOG, ret, and SIZE_MAX.

Referenced by GNUNET_CONFIGURATION_deserialize(), GNUNET_CONFIGURATION_load(), parse_configuration_file(), and run().

348 {
349  uint64_t fs64;
350  size_t fs;
351  char *fn;
352  char *mem;
353  char *endsep;
354  int dirty;
355  int ret;
356  ssize_t sret;
357 
359  LOG (GNUNET_ERROR_TYPE_DEBUG, "Asked to parse config file `%s'\n", fn);
360  if (NULL == fn)
361  return GNUNET_SYSERR;
362  dirty = cfg->dirty; /* back up value! */
363  if (GNUNET_SYSERR ==
365  {
367  "Error while determining the file size of `%s'\n",
368  fn);
369  GNUNET_free (fn);
370  return GNUNET_SYSERR;
371  }
372  if (fs64 > SIZE_MAX)
373  {
374  GNUNET_break (0); /* File size is more than the heap size */
375  GNUNET_free (fn);
376  return GNUNET_SYSERR;
377  }
378  fs = fs64;
379  mem = GNUNET_malloc (fs);
380  sret = GNUNET_DISK_fn_read (fn, mem, fs);
381  if ((sret < 0) || (fs != (size_t) sret))
382  {
383  LOG (GNUNET_ERROR_TYPE_WARNING, _ ("Error while reading file `%s'\n"), fn);
384  GNUNET_free (fn);
385  GNUNET_free (mem);
386  return GNUNET_SYSERR;
387  }
388  LOG (GNUNET_ERROR_TYPE_DEBUG, "Deserializing contents of file `%s'\n", fn);
389  endsep = strrchr (fn, (int) '/');
390  if (NULL != endsep)
391  *endsep = '\0';
392  ret = GNUNET_CONFIGURATION_deserialize (cfg, mem, fs, fn);
393  GNUNET_free (fn);
394  GNUNET_free (mem);
395  /* restore dirty flag - anything we set in the meantime
396  * came from disk */
397  cfg->dirty = dirty;
398  return ret;
399 }
int dirty
Modification indication since last save GNUNET_NO if clean, GNUNET_YES if dirty, GNUNET_SYSERR on err...
Definition: configuration.c:97
static int ret
Return value of the commandline.
Definition: gnunet-abd.c:81
#define SIZE_MAX
Definition: platform.h:216
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
static char * fn
Filename of the unique file.
static char * filename
#define LOG(kind,...)
Definition: configuration.c:33
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
char * GNUNET_STRINGS_filename_expand(const char *fil)
Complete filename (a la shell) from abbrevition.
Definition: strings.c:603
static struct GNUNET_FS_Handle * fs
Handle to FS service.
Definition: gnunet-fs.c:36
int GNUNET_DISK_file_size(const char *filename, uint64_t *size, int include_symbolic_links, int single_file_mode)
Get the size of the file (or directory) of the given file (in bytes).
Definition: disk.c:257
#define GNUNET_YES
Definition: gnunet_common.h:77
int GNUNET_CONFIGURATION_deserialize(struct GNUNET_CONFIGURATION_Handle *cfg, const char *mem, size_t size, const char *basedir)
De-serializes configuration.
#define GNUNET_malloc(size)
Wrapper around malloc.
ssize_t GNUNET_DISK_fn_read(const char *fn, void *result, size_t len)
Read the contents of a binary file into a buffer.
Definition: disk.c:794
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_serialize()

char* GNUNET_CONFIGURATION_serialize ( const struct GNUNET_CONFIGURATION_Handle cfg,
size_t *  size 
)

Serializes the given configuration.

Parameters
cfgconfiguration to serialize
sizewill be set to the size of the serialized memory block
Returns
the memory block where the serialized configuration is present. This memory should be freed by the caller

Definition at line 425 of file configuration.c.

References ConfigSection::entries, GNUNET_asprintf(), GNUNET_assert, GNUNET_free, GNUNET_malloc, GNUNET_memcpy, ConfigEntry::key, len, ConfigSection::name, ConfigEntry::next, ConfigSection::next, GNUNET_CONFIGURATION_Handle::sections, and ConfigEntry::val.

Referenced by conclude_autoconfig_request(), GNUNET_CONFIGURATION_write(), GNUNET_NAT_AUTO_autoconfig_start(), GNUNET_TESTBED_compress_cfg_(), GNUNET_TESTBED_create_helper_init_msg_(), GNUNET_TESTBED_peer_update_configuration(), GNUNET_TESTBED_register_host(), handle_peer_get_config(), handle_slave_get_config(), opstart_peer_create(), and tokenizer_cb().

427 {
428  struct ConfigSection *sec;
429  struct ConfigEntry *ent;
430  char *mem;
431  char *cbuf;
432  char *val;
433  char *pos;
434  size_t m_size;
435  size_t c_size;
436 
437  /* Pass1 : calculate the buffer size required */
438  m_size = 0;
439  for (sec = cfg->sections; NULL != sec; sec = sec->next)
440  {
441  /* For each section we need to add 3 charaters: {'[',']','\n'} */
442  m_size += strlen (sec->name) + 3;
443  for (ent = sec->entries; NULL != ent; ent = ent->next)
444  {
445  if (NULL != ent->val)
446  {
447  /* if val has any '\n' then they occupy +1 character as '\n'->'\\','n' */
448  pos = ent->val;
449  while (NULL != (pos = strstr (pos, "\n")))
450  {
451  m_size++;
452  pos++;
453  }
454  /* For each key = value pair we need to add 4 characters (2
455  spaces and 1 equal-to character and 1 new line) */
456  m_size += strlen (ent->key) + strlen (ent->val) + 4;
457  }
458  }
459  /* A new line after section end */
460  m_size++;
461  }
462 
463  /* Pass2: Allocate memory and write the configuration to it */
464  mem = GNUNET_malloc (m_size);
465  sec = cfg->sections;
466  c_size = 0;
467  *size = c_size;
468  while (NULL != sec)
469  {
470  int len;
471 
472  len = GNUNET_asprintf (&cbuf, "[%s]\n", sec->name);
473  GNUNET_assert (0 < len);
474  GNUNET_memcpy (mem + c_size, cbuf, len);
475  c_size += len;
476  GNUNET_free (cbuf);
477  for (ent = sec->entries; NULL != ent; ent = ent->next)
478  {
479  if (NULL != ent->val)
480  {
481  val = GNUNET_malloc (strlen (ent->val) * 2 + 1);
482  strcpy (val, ent->val);
483  while (NULL != (pos = strstr (val, "\n")))
484  {
485  memmove (&pos[2], &pos[1], strlen (&pos[1]));
486  pos[0] = '\\';
487  pos[1] = 'n';
488  }
489  len = GNUNET_asprintf (&cbuf, "%s = %s\n", ent->key, val);
490  GNUNET_free (val);
491  GNUNET_memcpy (mem + c_size, cbuf, len);
492  c_size += len;
493  GNUNET_free (cbuf);
494  }
495  }
496  GNUNET_memcpy (mem + c_size, "\n", 1);
497  c_size++;
498  sec = sec->next;
499  }
500  GNUNET_assert (c_size == m_size);
501  *size = c_size;
502  return mem;
503 }
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
struct ConfigEntry * entries
entries in the section
Definition: configuration.c:73
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
configuration entry
Definition: configuration.c:41
char * name
name of the section
Definition: configuration.c:78
int GNUNET_asprintf(char **buf, const char *format,...)
Like asprintf, just portable.
struct ConfigSection * sections
Configuration sections.
Definition: configuration.c:90
static unsigned int size
Size of the "table".
Definition: peer.c:67
struct ConfigEntry * next
This is a linked list.
Definition: configuration.c:46
configuration section
Definition: configuration.c:63
char * key
key for this entry
Definition: configuration.c:51
struct ConfigSection * next
This is a linked list.
Definition: configuration.c:68
#define GNUNET_malloc(size)
Wrapper around malloc.
char * val
current, commited value
Definition: configuration.c:56
#define GNUNET_free(ptr)
Wrapper around free.
uint16_t len
length of data (which is always a uint32_t, but presumably this can be used to specify that fewer byt...
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_deserialize()

int GNUNET_CONFIGURATION_deserialize ( struct GNUNET_CONFIGURATION_Handle cfg,
const char *  mem,
size_t  size,
const char *  basedir 
)

De-serializes configuration.

Parameters
cfgconfiguration to update
memthe memory block of serialized configuration
sizethe size of the memory block
allow_inlineset to the base directory if we recursively load configuration from inlined configurations; NULL if not and raise warnings when we come across them
Returns
GNUNET_OK on success, GNUNET_SYSERR on error
Parameters
cfgconfiguration to update
memthe memory block of serialized configuration
sizethe size of the memory block
basedirset to path from which we recursively load configuration from inlined configurations; NULL if not and raise warnings when we come across them
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 185 of file configuration.c.

References _, fn, GNUNET_asprintf(), GNUNET_assert, GNUNET_CONFIGURATION_parse(), GNUNET_CONFIGURATION_set_value_string(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_WARNING, GNUNET_free, GNUNET_free_non_null, GNUNET_NO, GNUNET_OK, GNUNET_strdup, GNUNET_strndup, GNUNET_SYSERR, GNUNET_YES, line, LOG, ret, section, and value.

Referenced by GNUNET_CONFIGURATION_parse(), GNUNET_TESTBED_extract_config_(), handle_auto_result(), handle_autoconfig_request(), helper_mst(), and tokenizer_cb().

189 {
190  char *line;
191  char *line_orig;
192  size_t line_size;
193  char *pos;
194  unsigned int nr;
195  size_t r_bytes;
196  size_t to_read;
197  size_t i;
198  int emptyline;
199  int ret;
200  char *section;
201  char *eq;
202  char *tag;
203  char *value;
204 
205  ret = GNUNET_OK;
206  section = GNUNET_strdup ("");
207  nr = 0;
208  r_bytes = 0;
209  line_orig = NULL;
210  while (r_bytes < size)
211  {
212  GNUNET_free_non_null (line_orig);
213  /* fgets-like behaviour on buffer */
214  to_read = size - r_bytes;
215  pos = memchr (&mem[r_bytes], '\n', to_read);
216  if (NULL == pos)
217  {
218  line_orig = GNUNET_strndup (&mem[r_bytes], line_size = to_read);
219  r_bytes += line_size;
220  }
221  else
222  {
223  line_orig =
224  GNUNET_strndup (&mem[r_bytes], line_size = (pos - &mem[r_bytes]));
225  r_bytes += line_size + 1;
226  }
227  line = line_orig;
228  /* increment line number */
229  nr++;
230  /* tabs and '\r' are whitespace */
231  emptyline = GNUNET_YES;
232  for (i = 0; i < line_size; i++)
233  {
234  if (line[i] == '\t')
235  line[i] = ' ';
236  if (line[i] == '\r')
237  line[i] = ' ';
238  if (' ' != line[i])
239  emptyline = GNUNET_NO;
240  }
241  /* ignore empty lines */
242  if (GNUNET_YES == emptyline)
243  continue;
244 
245  /* remove tailing whitespace */
246  for (i = line_size - 1; (i >= 1) && (isspace ((unsigned char) line[i]));
247  i--)
248  line[i] = '\0';
249 
250  /* remove leading whitespace */
251  for (; line[0] != '\0' && (isspace ((unsigned char) line[0])); line++)
252  ;
253 
254  /* ignore comments */
255  if (('#' == line[0]) || ('%' == line[0]))
256  continue;
257 
258  /* handle special "@INLINE@" directive */
259  if (0 == strncasecmp (line, "@INLINE@ ", strlen ("@INLINE@ ")))
260  {
261  /* @INLINE@ value */
262  value = &line[strlen ("@INLINE@ ")];
263  if (NULL != basedir)
264  {
265  char *fn;
266 
267  GNUNET_asprintf (&fn, "%s/%s", basedir, value);
268  if (GNUNET_OK != GNUNET_CONFIGURATION_parse (cfg, fn))
269  {
270  GNUNET_free (fn);
271  ret = GNUNET_SYSERR; /* failed to parse included config */
272  break;
273  }
274  GNUNET_free (fn);
275  }
276  else
277  {
279  "Ignoring parsing @INLINE@ configurations, not allowed!\n");
280  ret = GNUNET_SYSERR;
281  break;
282  }
283  continue;
284  }
285  if (('[' == line[0]) && (']' == line[line_size - 1]))
286  {
287  /* [value] */
288  line[line_size - 1] = '\0';
289  value = &line[1];
290  GNUNET_free (section);
291  section = GNUNET_strdup (value);
292  continue;
293  }
294  if (NULL != (eq = strchr (line, '=')))
295  {
296  /* tag = value */
297  tag = GNUNET_strndup (line, eq - line);
298  /* remove tailing whitespace */
299  for (i = strlen (tag) - 1; (i >= 1) && (isspace ((unsigned char) tag[i]));
300  i--)
301  tag[i] = '\0';
302 
303  /* Strip whitespace */
304  value = eq + 1;
305  while (isspace ((unsigned char) value[0]))
306  value++;
307  for (i = strlen (value) - 1;
308  (i >= 1) && (isspace ((unsigned char) value[i]));
309  i--)
310  value[i] = '\0';
311 
312  /* remove quotes */
313  i = 0;
314  if (('"' == value[0]) && ('"' == value[strlen (value) - 1]))
315  {
316  value[strlen (value) - 1] = '\0';
317  value++;
318  }
319  GNUNET_CONFIGURATION_set_value_string (cfg, section, tag, &value[i]);
320  GNUNET_free (tag);
321  continue;
322  }
323  /* parse error */
325  _ ("Syntax error while deserializing in line %u\n"),
326  nr);
327  ret = GNUNET_SYSERR;
328  break;
329  }
330  GNUNET_free_non_null (line_orig);
331  GNUNET_free (section);
332  GNUNET_assert ((GNUNET_OK != ret) || (r_bytes == size));
333  return ret;
334 }
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
static int ret
Return value of the commandline.
Definition: gnunet-abd.c:81
#define GNUNET_NO
Definition: gnunet_common.h:78
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
#define GNUNET_free_non_null(ptr)
Free the memory pointed to by ptr if ptr is not NULL.
int GNUNET_CONFIGURATION_parse(struct GNUNET_CONFIGURATION_Handle *cfg, const char *filename)
Parse a configuration file, add all of the options in the file to the configuration environment...
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
static char * section
Name of the section.
Definition: gnunet-config.c:33
int GNUNET_asprintf(char **buf, const char *format,...)
Like asprintf, just portable.
static char * line
Desired phone line (string to be converted to a hash).
static char * value
Value of the record to add/remove.
static char * fn
Filename of the unique file.
void GNUNET_CONFIGURATION_set_value_string(struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, const char *value)
Set a configuration value that should be a string.
#define LOG(kind,...)
Definition: configuration.c:33
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
static unsigned int size
Size of the "table".
Definition: peer.c:67
#define GNUNET_strndup(a, length)
Wrapper around GNUNET_xstrndup_.
#define GNUNET_YES
Definition: gnunet_common.h:77
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_write()

int GNUNET_CONFIGURATION_write ( struct GNUNET_CONFIGURATION_Handle cfg,
const char *  filename 
)

Write configuration file.

Parameters
cfgconfiguration to write
filenamewhere to write the configuration
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 514 of file configuration.c.

References GNUNET_CONFIGURATION_Handle::dirty, fn, GNUNET_CONFIGURATION_serialize(), GNUNET_DISK_directory_create_for_file(), GNUNET_DISK_fn_write(), GNUNET_DISK_PERM_GROUP_READ, GNUNET_DISK_PERM_GROUP_WRITE, GNUNET_DISK_PERM_USER_READ, GNUNET_DISK_PERM_USER_WRITE, GNUNET_ERROR_TYPE_WARNING, GNUNET_free, GNUNET_NO, GNUNET_OK, GNUNET_STRINGS_filename_expand(), GNUNET_SYSERR, LOG, and size.

Referenced by associate_shared_service(), create_unique_cfgs(), GNUNET_CONFIGURATION_write_diffs(), GNUNET_TESTING_peer_configure(), handle_delete_message(), handle_rename_message(), handle_set_default_message(), run(), set_cont(), testing_main(), and tokenizer_cb().

516 {
517  char *fn;
518  char *cfg_buf;
519  size_t size;
520  ssize_t sret;
521 
523  if (fn == NULL)
524  return GNUNET_SYSERR;
526  {
527  GNUNET_free (fn);
528  return GNUNET_SYSERR;
529  }
530  cfg_buf = GNUNET_CONFIGURATION_serialize (cfg, &size);
531  sret = GNUNET_DISK_fn_write (fn,
532  cfg_buf,
533  size,
538  if ((sret < 0) || (size != (size_t) sret))
539  {
540  GNUNET_free (fn);
541  GNUNET_free (cfg_buf);
543  "Writing configuration to file `%s' failed\n",
544  filename);
545  cfg->dirty = GNUNET_SYSERR; /* last write failed */
546  return GNUNET_SYSERR;
547  }
548  GNUNET_free (fn);
549  GNUNET_free (cfg_buf);
550  cfg->dirty = GNUNET_NO; /* last write succeeded */
551  return GNUNET_OK;
552 }
int dirty
Modification indication since last save GNUNET_NO if clean, GNUNET_YES if dirty, GNUNET_SYSERR on err...
Definition: configuration.c:97
int GNUNET_DISK_directory_create_for_file(const char *filename)
Create the directory structure for storing a file.
Definition: disk.c:684
#define GNUNET_NO
Definition: gnunet_common.h:78
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
ssize_t GNUNET_DISK_fn_write(const char *fn, const void *buffer, size_t n, enum GNUNET_DISK_AccessPermissions mode)
Write a buffer to a file.
Definition: disk.c:880
static char * fn
Filename of the unique file.
static char * filename
#define LOG(kind,...)
Definition: configuration.c:33
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
static unsigned int size
Size of the "table".
Definition: peer.c:67
char * GNUNET_STRINGS_filename_expand(const char *fil)
Complete filename (a la shell) from abbrevition.
Definition: strings.c:603
char * GNUNET_CONFIGURATION_serialize(const struct GNUNET_CONFIGURATION_Handle *cfg, size_t *size)
Serializes the given configuration.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_write_diffs()

int GNUNET_CONFIGURATION_write_diffs ( const struct GNUNET_CONFIGURATION_Handle cfg_default,
const struct GNUNET_CONFIGURATION_Handle cfg_new,
const char *  filename 
)

Write only configuration entries that have been changed to configuration file.

Parameters
cfg_defaultdefault configuration
cfg_newnew configuration
filenamewhere to write the configuration diff between default and new
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 814 of file configuration.c.

References GNUNET_CONFIGURATION_destroy(), GNUNET_CONFIGURATION_get_diff(), GNUNET_CONFIGURATION_write(), and ret.

Referenced by auto_config_cb(), and main().

818 {
819  int ret;
820  struct GNUNET_CONFIGURATION_Handle *diff;
821 
822  diff = GNUNET_CONFIGURATION_get_diff (cfg_default, cfg_new);
823  ret = GNUNET_CONFIGURATION_write (diff, filename);
825  return ret;
826 }
int GNUNET_CONFIGURATION_write(struct GNUNET_CONFIGURATION_Handle *cfg, const char *filename)
Write configuration file.
static int ret
Return value of the commandline.
Definition: gnunet-abd.c:81
struct GNUNET_CONFIGURATION_Handle * GNUNET_CONFIGURATION_get_diff(const struct GNUNET_CONFIGURATION_Handle *cfg_default, const struct GNUNET_CONFIGURATION_Handle *cfg_new)
Compute configuration with only entries that have been changed.
void GNUNET_CONFIGURATION_destroy(struct GNUNET_CONFIGURATION_Handle *cfg)
Destroy configuration object.
static char * filename
configuration data
Definition: configuration.c:85
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_get_diff()

struct GNUNET_CONFIGURATION_Handle* GNUNET_CONFIGURATION_get_diff ( const struct GNUNET_CONFIGURATION_Handle cfg_default,
const struct GNUNET_CONFIGURATION_Handle cfg_new 
)

Compute configuration with only entries that have been changed.

Parameters
cfg_defaultoriginal configuration
cfg_newnew configuration
Returns
configuration with only the differences, never NULL

Definition at line 792 of file configuration.c.

References DiffHandle::cfg_default, DiffHandle::cfgDiff, compare_entries(), GNUNET_CONFIGURATION_create(), and GNUNET_CONFIGURATION_iterate().

Referenced by conclude_autoconfig_request(), GNUNET_CONFIGURATION_write_diffs(), next_phase(), and run().

795 {
796  struct DiffHandle diffHandle;
797 
798  diffHandle.cfgDiff = GNUNET_CONFIGURATION_create ();
799  diffHandle.cfg_default = cfg_default;
800  GNUNET_CONFIGURATION_iterate (cfg_new, &compare_entries, &diffHandle);
801  return diffHandle.cfgDiff;
802 }
void GNUNET_CONFIGURATION_iterate(const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_CONFIGURATION_Iterator iter, void *iter_cls)
Iterate over all options in the configuration.
struct GNUNET_CONFIGURATION_Handle * GNUNET_CONFIGURATION_create()
Create a GNUNET_CONFIGURATION_Handle.
struct GNUNET_CONFIGURATION_Handle * cfgDiff
static void compare_entries(void *cls, const char *section, const char *option, const char *value)
A callback function, compares entries from two configurations (default against a new configuration) a...
Used for diffing a configuration object against the default one.
const struct GNUNET_CONFIGURATION_Handle * cfg_default
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_is_dirty()

int GNUNET_CONFIGURATION_is_dirty ( const struct GNUNET_CONFIGURATION_Handle cfg)

Test if there are configuration options that were changed since the last save.

Parameters
cfgconfiguration to inspect
Returns
GNUNET_NO if clean, GNUNET_YES if dirty, GNUNET_SYSERR on error (i.e. last save failed)

Definition at line 410 of file configuration.c.

References GNUNET_CONFIGURATION_Handle::dirty.

Referenced by auto_config_cb().

411 {
412  return cfg->dirty;
413 }
int dirty
Modification indication since last save GNUNET_NO if clean, GNUNET_YES if dirty, GNUNET_SYSERR on err...
Definition: configuration.c:97
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_parse_and_run()

int GNUNET_CONFIGURATION_parse_and_run ( const char *  filename,
GNUNET_CONFIGURATION_Callback  cb,
void *  cb_cls 
)

Parse a configuration file filename and run the function cb with the resulting configuration object.

Then free the configuration object and return the status value from cb.

Parameters
filenameconfiguration to parse, NULL for "default"
cbfunction to run
cb_clsclosure for cb
Returns
GNUNET_SYSERR if parsing the configuration failed, otherwise return value from cb.

Definition at line 153 of file configuration.c.

References cfg, GNUNET_break, GNUNET_CONFIGURATION_create(), GNUNET_CONFIGURATION_destroy(), GNUNET_CONFIGURATION_load(), GNUNET_OK, GNUNET_SYSERR, and ret.

Referenced by GNUNET_DISK_purge_cfg_dir().

156 {
158  int ret;
159 
162  {
163  GNUNET_break (0);
165  return GNUNET_SYSERR;
166  }
167  ret = cb (cb_cls, cfg);
169  return ret;
170 }
static const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration we are using.
Definition: gnunet-abd.c:36
static int ret
Return value of the commandline.
Definition: gnunet-abd.c:81
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
struct GNUNET_CONFIGURATION_Handle * GNUNET_CONFIGURATION_create()
Create a GNUNET_CONFIGURATION_Handle.
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
int GNUNET_CONFIGURATION_load(struct GNUNET_CONFIGURATION_Handle *cfg, const char *filename)
Load configuration.
void GNUNET_CONFIGURATION_destroy(struct GNUNET_CONFIGURATION_Handle *cfg)
Destroy configuration object.
static char * filename
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
configuration data
Definition: configuration.c:85
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_iterate()

void GNUNET_CONFIGURATION_iterate ( const struct GNUNET_CONFIGURATION_Handle cfg,
GNUNET_CONFIGURATION_Iterator  iter,
void *  iter_cls 
)

Iterate over all options in the configuration.

Parameters
cfgconfiguration to inspect
iterfunction to call on each option
iter_clsclosure for iter

Definition at line 563 of file configuration.c.

References ConfigSection::entries, ConfigEntry::key, ConfigSection::name, ConfigEntry::next, ConfigSection::next, GNUNET_CONFIGURATION_Handle::sections, and ConfigEntry::val.

Referenced by get_cont(), GNUNET_CONFIGURATION_dup(), GNUNET_CONFIGURATION_get_diff(), and GNUNET_TESTING_configuration_create_().

566 {
567  struct ConfigSection *spos;
568  struct ConfigEntry *epos;
569 
570  for (spos = cfg->sections; NULL != spos; spos = spos->next)
571  for (epos = spos->entries; NULL != epos; epos = epos->next)
572  if (NULL != epos->val)
573  iter (iter_cls, spos->name, epos->key, epos->val);
574 }
struct ConfigEntry * entries
entries in the section
Definition: configuration.c:73
configuration entry
Definition: configuration.c:41
char * name
name of the section
Definition: configuration.c:78
struct ConfigSection * sections
Configuration sections.
Definition: configuration.c:90
struct ConfigEntry * next
This is a linked list.
Definition: configuration.c:46
configuration section
Definition: configuration.c:63
char * key
key for this entry
Definition: configuration.c:51
struct ConfigSection * next
This is a linked list.
Definition: configuration.c:68
char * val
current, commited value
Definition: configuration.c:56
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_iterate_sections()

void GNUNET_CONFIGURATION_iterate_sections ( const struct GNUNET_CONFIGURATION_Handle cfg,
GNUNET_CONFIGURATION_Section_Iterator  iter,
void *  iter_cls 
)

Iterate over all sections in the configuration.

Parameters
cfgconfiguration to inspect
iterfunction to call on each section
iter_clsclosure for iter

Definition at line 614 of file configuration.c.

References ConfigSection::name, ConfigEntry::next, ConfigSection::next, and GNUNET_CONFIGURATION_Handle::sections.

Referenced by GNUNET_TESTING_configuration_create_(), handle_delete_message(), handle_rename_message(), and run().

618 {
619  struct ConfigSection *spos;
620  struct ConfigSection *next;
621 
622  next = cfg->sections;
623  while (next != NULL)
624  {
625  spos = next;
626  next = spos->next;
627  iter (iter_cls, spos->name);
628  }
629 }
char * name
name of the section
Definition: configuration.c:78
struct ConfigSection * sections
Configuration sections.
Definition: configuration.c:90
configuration section
Definition: configuration.c:63
struct ConfigSection * next
This is a linked list.
Definition: configuration.c:68
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_remove_section()

void GNUNET_CONFIGURATION_remove_section ( struct GNUNET_CONFIGURATION_Handle cfg,
const char *  section 
)

Remove the given section and all options in it.

Parameters
cfgconfiguration to inspect
sectionname of the section to remove

Definition at line 639 of file configuration.c.

References GNUNET_CONFIGURATION_Handle::dirty, ConfigSection::entries, GNUNET_free, GNUNET_free_non_null, GNUNET_YES, ConfigEntry::key, ConfigSection::name, ConfigEntry::next, ConfigSection::next, GNUNET_CONFIGURATION_Handle::sections, and ConfigEntry::val.

Referenced by GNUNET_CONFIGURATION_destroy(), and GNUNET_TESTING_peer_configure().

641 {
642  struct ConfigSection *spos;
643  struct ConfigSection *prev;
644  struct ConfigEntry *ent;
645 
646  prev = NULL;
647  spos = cfg->sections;
648  while (NULL != spos)
649  {
650  if (0 == strcasecmp (section, spos->name))
651  {
652  if (NULL == prev)
653  cfg->sections = spos->next;
654  else
655  prev->next = spos->next;
656  while (NULL != (ent = spos->entries))
657  {
658  spos->entries = ent->next;
659  GNUNET_free (ent->key);
660  GNUNET_free_non_null (ent->val);
661  GNUNET_free (ent);
662  cfg->dirty = GNUNET_YES;
663  }
664  GNUNET_free (spos->name);
665  GNUNET_free (spos);
666  return;
667  }
668  prev = spos;
669  spos = spos->next;
670  }
671 }
int dirty
Modification indication since last save GNUNET_NO if clean, GNUNET_YES if dirty, GNUNET_SYSERR on err...
Definition: configuration.c:97
struct ConfigEntry * entries
entries in the section
Definition: configuration.c:73
configuration entry
Definition: configuration.c:41
#define GNUNET_free_non_null(ptr)
Free the memory pointed to by ptr if ptr is not NULL.
static char * section
Name of the section.
Definition: gnunet-config.c:33
char * name
name of the section
Definition: configuration.c:78
struct ConfigSection * sections
Configuration sections.
Definition: configuration.c:90
struct ConfigEntry * next
This is a linked list.
Definition: configuration.c:46
configuration section
Definition: configuration.c:63
char * key
key for this entry
Definition: configuration.c:51
#define GNUNET_YES
Definition: gnunet_common.h:77
struct ConfigSection * next
This is a linked list.
Definition: configuration.c:68
char * val
current, commited value
Definition: configuration.c:56
#define GNUNET_free(ptr)
Wrapper around free.
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_get_value_number()

int GNUNET_CONFIGURATION_get_value_number ( const struct GNUNET_CONFIGURATION_Handle cfg,
const char *  section,
const char *  option,
unsigned long long *  number 
)

Get a configuration value that should be a number.

Parameters
cfgconfiguration to inspect
sectionsection of interest
optionoption of interest
numberwhere to store the numeric value of the option
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 910 of file configuration.c.

References dummy, e, find_entry(), GNUNET_OK, GNUNET_SYSERR, and ConfigEntry::val.

Referenced by client_configure_plugin(), event_cb(), GCD_init(), GCO_init(), GDS_NEIGHBOURS_init(), GDS_NSE_init(), get_server_addresses(), GNUNET_ATS_solvers_experimentation_load(), GNUNET_ATS_solvers_load_quotas(), GNUNET_ATS_TEST_experimentation_load(), GNUNET_CLIENT_connect(), GNUNET_CLIENT_test(), GNUNET_HOSTLIST_server_start(), GNUNET_NAT_AUTO_test_start(), GNUNET_PROGRAM_run2(), GNUNET_REVOCATION_revoke(), GNUNET_SERVICE_run_(), GNUNET_SOCKS_do_connect(), GNUNET_TESTBED_controller_connect(), GNUNET_TESTBED_run(), GNUNET_TRANSPORT_communicator_connect(), GSF_cadet_start_server(), GSF_pending_request_init_(), GST_plugins_load(), iopen(), LEGACY_SERVICE_get_server_addresses(), LEGACY_SERVICE_run(), libgnunet_plugin_block_revocation_init(), libgnunet_plugin_datastore_heap_init(), LIBGNUNET_PLUGIN_TRANSPORT_INIT(), libgnunet_plugin_transport_tcp_init(), libgnunet_plugin_transport_udp_init(), load_episode(), load_op_add_address(), load_op_del_address(), load_op_start_request(), load_op_start_set_preference(), load_op_start_set_property(), load_op_stop_request(), load_op_stop_set_preference(), load_op_stop_set_property(), run(), server_configure_plugin(), server_get_addresses(), setup_exit_helper_args(), test_service_configuration(), test_stun(), testbed_run(), and update_config().

915 {
916  struct ConfigEntry *e;
917  char dummy[2];
918 
919  if (NULL == (e = find_entry (cfg, section, option)))
920  return GNUNET_SYSERR;
921  if (NULL == e->val)
922  return GNUNET_SYSERR;
923  if (1 != sscanf (e->val, "%llu%1s", number, dummy))
924  return GNUNET_SYSERR;
925  return GNUNET_OK;
926 }
static struct Experiment * e
configuration entry
Definition: configuration.c:41
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
static struct ConfigEntry * find_entry(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *key)
Find an entry from a configuration.
uint32_t number
static char * section
Name of the section.
Definition: gnunet-config.c:33
static char * option
Name of the option.
Definition: gnunet-config.c:38
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
static struct in_addr dummy
Target "dummy" address of the packet we pretend to respond to.
char * val
current, commited value
Definition: configuration.c:56
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_get_value_float()

int GNUNET_CONFIGURATION_get_value_float ( const struct GNUNET_CONFIGURATION_Handle cfg,
const char *  section,
const char *  option,
float *  number 
)

Get a configuration value that should be a floating point number.

Parameters
cfgconfiguration to inspect
sectionsection of interest
optionoption of interest
numberwhere to store the floating value of the option
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 939 of file configuration.c.

References dummy, e, find_entry(), GNUNET_OK, GNUNET_SYSERR, and ConfigEntry::val.

Referenced by GNUNET_RPS_connect(), and libgnunet_plugin_ats_proportional_init().

944 {
945  struct ConfigEntry *e;
946  char dummy[2];
947 
948  if (NULL == (e = find_entry (cfg, section, option)))
949  return GNUNET_SYSERR;
950  if (NULL == e->val)
951  return GNUNET_SYSERR;
952  if (1 != sscanf (e->val, "%f%1s", number, dummy))
953  return GNUNET_SYSERR;
954  return GNUNET_OK;
955 }
static struct Experiment * e
configuration entry
Definition: configuration.c:41
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
static struct ConfigEntry * find_entry(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *key)
Find an entry from a configuration.
uint32_t number
static char * section
Name of the section.
Definition: gnunet-config.c:33
static char * option
Name of the option.
Definition: gnunet-config.c:38
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
static struct in_addr dummy
Target "dummy" address of the packet we pretend to respond to.
char * val
current, commited value
Definition: configuration.c:56
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_get_value_time()

int GNUNET_CONFIGURATION_get_value_time ( const struct GNUNET_CONFIGURATION_Handle cfg,
const char *  section,
const char *  option,
struct GNUNET_TIME_Relative time 
)

Get a configuration value that should be a relative time.

Parameters
cfgconfiguration to inspect
sectionsection of interest
optionoption of interest
timeset to the time value stored in the configuration
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 968 of file configuration.c.

References _, e, find_entry(), GNUNET_ERROR_TYPE_ERROR, GNUNET_log_config_invalid(), GNUNET_OK, GNUNET_STRINGS_fancy_time_to_relative(), GNUNET_SYSERR, ret, and ConfigEntry::val.

Referenced by GCD_init(), GNUNET_ATS_solvers_experimentation_load(), GNUNET_ATS_TEST_experimentation_load(), GNUNET_SPEEDUP_start_(), GNUNET_TESTBED_run(), GSF_push_init_(), GST_manipulation_init(), libgnunet_plugin_transport_tcp_init(), libgnunet_plugin_transport_udp_init(), load_episode(), load_episodes(), load_op_start_set_preference(), load_op_start_set_property(), RECLAIM_TICKETS_init(), run(), setup_service(), testbed_run(), and token_endpoint().

973 {
974  struct ConfigEntry *e;
975  int ret;
976 
977  if (NULL == (e = find_entry (cfg, section, option)))
978  return GNUNET_SYSERR;
979  if (NULL == e->val)
980  return GNUNET_SYSERR;
982  if (GNUNET_OK != ret)
984  section,
985  option,
986  _ ("Not a valid relative time specification"));
987  return ret;
988 }
int GNUNET_STRINGS_fancy_time_to_relative(const char *fancy_time, struct GNUNET_TIME_Relative *rtime)
Convert a given fancy human-readable time to our internal representation.
Definition: strings.c:351
static int ret
Return value of the commandline.
Definition: gnunet-abd.c:81
static struct Experiment * e
configuration entry
Definition: configuration.c:41
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
void GNUNET_log_config_invalid(enum GNUNET_ErrorType kind, const char *section, const char *option, const char *required)
Log error message about invalid configuration option value.
static struct ConfigEntry * find_entry(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *key)
Find an entry from a configuration.
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
static char * section
Name of the section.
Definition: gnunet-config.c:33
static char * option
Name of the option.
Definition: gnunet-config.c:38
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
char * val
current, commited value
Definition: configuration.c:56
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_get_value_size()

int GNUNET_CONFIGURATION_get_value_size ( const struct GNUNET_CONFIGURATION_Handle cfg,
const char *  section,
const char *  option,
unsigned long long *  size 
)

Get a configuration value that should be a size in bytes.

Parameters
cfgconfiguration to inspect
sectionsection of interest
optionoption of interest
sizeset to the size in bytes as stored in the configuration
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 1001 of file configuration.c.

References e, find_entry(), GNUNET_STRINGS_fancy_size_to_bytes(), GNUNET_SYSERR, and ConfigEntry::val.

Referenced by GNUNET_DATACACHE_create(), and run().

1006 {
1007  struct ConfigEntry *e;
1008 
1009  if (NULL == (e = find_entry (cfg, section, option)))
1010  return GNUNET_SYSERR;
1011  if (NULL == e->val)
1012  return GNUNET_SYSERR;
1014 }
static struct Experiment * e
int GNUNET_STRINGS_fancy_size_to_bytes(const char *fancy_size, unsigned long long *size)
Convert a given fancy human-readable size to bytes.
Definition: strings.c:319
configuration entry
Definition: configuration.c:41
static struct ConfigEntry * find_entry(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *key)
Find an entry from a configuration.
static char * section
Name of the section.
Definition: gnunet-config.c:33
static char * option
Name of the option.
Definition: gnunet-config.c:38
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
static unsigned int size
Size of the "table".
Definition: peer.c:67
char * val
current, commited value
Definition: configuration.c:56
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_have_value()

int GNUNET_CONFIGURATION_have_value ( const struct GNUNET_CONFIGURATION_Handle cfg,
const char *  section,
const char *  option 
)

Test if we have a value for a particular option.

Parameters
cfgconfiguration to inspect
sectionsection of interest
optionoption of interest
Returns
GNUNET_YES if so, GNUNET_NO if not.

Definition at line 1142 of file configuration.c.

References e, find_entry(), GNUNET_NO, GNUNET_YES, and ConfigEntry::val.

Referenced by check_config(), GDS_NSE_init(), get_my_cnf_path(), get_server_addresses(), GNUNET_CLIENT_connect(), GNUNET_CLIENT_test(), GNUNET_CONFIGURATION_load(), GNUNET_HOSTLIST_server_start(), GNUNET_PROGRAM_run2(), GNUNET_SERVICE_run_(), GNUNET_SOCKS_check_service(), GNUNET_TESTBED_run(), GNUNET_TESTING_peer_configure(), iopen(), LEGACY_SERVICE_get_server_addresses(), LEGACY_SERVICE_run(), LEGACY_SERVICE_stop(), LIBGNUNET_PLUGIN_TRANSPORT_INIT(), process_acl4(), process_acl6(), server_configure_plugin(), server_get_addresses(), setup_service(), start_arm_service(), test_service_configuration(), and update_config_sections().

1145 {
1146  struct ConfigEntry *e;
1147 
1148  if ((NULL == (e = find_entry (cfg, section, option))) || (NULL == e->val))
1149  return GNUNET_NO;
1150  return GNUNET_YES;
1151 }
static struct Experiment * e
#define GNUNET_NO
Definition: gnunet_common.h:78
configuration entry
Definition: configuration.c:41
static struct ConfigEntry * find_entry(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *key)
Find an entry from a configuration.
static char * section
Name of the section.
Definition: gnunet-config.c:33
static char * option
Name of the option.
Definition: gnunet-config.c:38
#define GNUNET_YES
Definition: gnunet_common.h:77
char * val
current, commited value
Definition: configuration.c:56
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_get_value_string()

int GNUNET_CONFIGURATION_get_value_string ( const struct GNUNET_CONFIGURATION_Handle cfg,
const char *  section,
const char *  option,
char **  value 
)

Get a configuration value that should be a string.

Parameters
cfgconfiguration to inspect
sectionsection of interest
optionoption of interest
valuewill be set to a freshly allocated configuration value, or NULL if option is not specified
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 1028 of file configuration.c.

References e, find_entry(), GNUNET_OK, GNUNET_strdup, GNUNET_SYSERR, and ConfigEntry::val.

Referenced by advertise_dns_exit(), check_authorization(), check_config(), client_configure_plugin(), expand_dollar(), GAS_plugin_init(), get_bootstrap_server(), get_server_addresses(), gg_load_configuration(), GNUNET_ATS_solvers_experimentation_load(), GNUNET_ATS_solvers_load_quotas(), GNUNET_ATS_TEST_experimentation_load(), GNUNET_CLIENT_connect(), GNUNET_CLIENT_test(), GNUNET_CONFIGURATION_append_value_filename(), GNUNET_CONFIGURATION_get_data(), GNUNET_CONFIGURATION_get_value_filename(), GNUNET_CONFIGURATION_iterate_value_filenames(), GNUNET_CONFIGURATION_remove_value_filename(), GNUNET_CONVERSATION_phone_create(), GNUNET_DATACACHE_create(), GNUNET_FS_unindex_do_extract_keywords_(), GNUNET_GNS_lookup_with_tld(), GNUNET_HOSTLIST_client_start(), GNUNET_HOSTLIST_server_start(), GNUNET_OS_get_suid_binary_path(), GNUNET_PQ_connect_with_cfg(), GNUNET_SERVICE_run_(), GNUNET_SOCKS_do_connect(), GNUNET_TESTBED_run(), GNUNET_TESTING_peer_configure(), GNUNET_TESTING_service_run(), gnunet_uri(), GPI_plugins_load(), GST_plugins_load(), handle_ego_delete(), handle_ego_rename(), handle_get_default_message(), handle_init(), handle_register(), identity_continuation(), iopen(), LEGACY_SERVICE_get_server_addresses(), LEGACY_SERVICE_run(), LEGACY_SERVICE_stop(), LIBGNUNET_PLUGIN_TRANSPORT_INIT(), libgnunet_plugin_transport_udp_init(), load_episode(), load_op_add_address(), load_op_del_address(), load_op_start_set_preference(), load_op_start_set_property(), load_op_stop_set_preference(), load_op_stop_set_property(), load_quota(), login_redirect(), print_quotas(), process_acl4(), process_acl6(), read_service_conf(), run(), server_configure_plugin(), server_get_addresses(), server_log(), set_result_cb(), setup_exit_helper_args(), setup_service(), start_arm_service(), start_process(), test_icmp_client(), test_icmp_server(), test_service_configuration(), testbed_run(), token_endpoint(), and update_config_sections().

1033 {
1034  struct ConfigEntry *e;
1035 
1036  if ((NULL == (e = find_entry (cfg, section, option))) || (NULL == e->val))
1037  {
1038  *value = NULL;
1039  return GNUNET_SYSERR;
1040  }
1041  *value = GNUNET_strdup (e->val);
1042  return GNUNET_OK;
1043 }
static struct Experiment * e
configuration entry
Definition: configuration.c:41
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
static struct ConfigEntry * find_entry(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *key)
Find an entry from a configuration.
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
static char * section
Name of the section.
Definition: gnunet-config.c:33
static char * value
Value of the record to add/remove.
static char * option
Name of the option.
Definition: gnunet-config.c:38
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
char * val
current, commited value
Definition: configuration.c:56
Here is the call graph for this function:

◆ GNUNET_CONFIGURATION_get_value_filename()

int GNUNET_CONFIGURATION_get_value_filename ( const struct GNUNET_CONFIGURATION_Handle cfg,
const char *  section,
const char *  option,
char **  value 
)

Get a configuration value that should be the name of a file or directory.

Parameters
cfgconfiguration to inspect
sectionsection of interest
optionoption of interest
valuewill be set to a freshly allocated configuration value, or NULL if option is not specified
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Get a configuration value that should be the name of a file or directory.

Parameters
cfgconfiguration to inspect
sectionsection of interest
optionoption of interest
valuewill be set to a freshly allocated configuration value, or NULL if option is not specified
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 1367 of file configuration.c.

References GNUNET_CONFIGURATION_expand_dollar(), GNUNET_CONFIGURATION_get_value_string(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_OK, GNUNET_STRINGS_filename_expand(), GNUNET_SYSERR, and LOG.

Referenced by database_setup(), get_my_cnf_path(), get_pid_file_name(), get_serialization_file_name(), get_serialization_file_name_in_dir(), get_server_addresses(), get_update_information_directory(), get_user_name(), GNUNET_ATS_solvers_experimentation_load(), GNUNET_ATS_TEST_experimentation_load(), GNUNET_CLIENT_test(), GNUNET_CRYPTO_eddsa_key_create_from_configuration(), GNUNET_FRIENDS_parse(), GNUNET_FRIENDS_write_start(), GNUNET_HOSTLIST_client_start(), GNUNET_TESTBED_controller_start(), GNUNET_TESTBED_is_host_habitable(), GNUNET_TESTBED_run(), GNUNET_TESTING_peer_configure(), GNUNET_TIME_absolute_get_monotonic(), GST_stats_init(), LEGACY_SERVICE_get_server_addresses(), libgnunet_plugin_transport_unix_init(), load(), load_hostlist_file(), logger_run(), main_init(), new_sub(), print_option(), purge_cfg_dir(), read_index_list(), run(), save(), save_hostlist_file(), server_log(), setup_service(), start_arm_service(), test_service_configuration(), testbed_run(), tokenizer_cb(), try_unixpath(), write_index_list(), and write_proof().

1372 {
1373  char *tmp;
1374 
1375  if (GNUNET_OK !=
1377  {
1378  LOG (GNUNET_ERROR_TYPE_DEBUG, "Failed to retrieve filename\n");
1379  *value = NULL;
1380  return GNUNET_SYSERR;
1381  }
1382  tmp = GNUNET_CONFIGURATION_expand_dollar (cfg, tmp);
1384  GNUNET_free (tmp);
1385  if (*value == NULL)
1386  return GNUNET_SYSERR;
1387  return GNUNET_OK;
1388 }
char * GNUNET_CONFIGURATION_expand_dollar(const struct GNUNET_CONFIGURATION_Handle *cfg, char *orig)
Expand an expression of the form "$FOO/BAR" to "DIRECTORY/BAR" where either in the "PATHS" section or...
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
static char * section
Name of the section.
Definition: gnunet-config.c:33
static char * value
Value of the record to add/remove.
static char * option
Name of the option.
Definition: gnunet-config.c:38
#define LOG(kind,...)
Definition: configuration.c:33
int GNUNET_CONFIGURATION_get_value_string(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, char **value)
Get a configuration value that should be a string.
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
char * GNUNET_STRINGS_filename_expand(const char *fil)
Complete filename (a la shell) from abbrevition.
Definition: strings.c:603
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_iterate_value_filenames()

int GNUNET_CONFIGURATION_iterate_value_filenames ( const struct GNUNET_CONFIGURATION_Handle cfg,
const char *  section,
const char *  option,
GNUNET_FileNameCallback  cb,
void *  cb_cls 
)

Iterate over the set of filenames stored in a configuration value.

Parameters
cfgconfiguration to inspect
sectionsection of interest
optionoption of interest
cbfunction to call on each filename
cb_clsclosure for cb
Returns
number of filenames iterated over, -1 on error

Definition at line 1431 of file configuration.c.

References end, GNUNET_assert, GNUNET_CONFIGURATION_get_value_string(), GNUNET_free, GNUNET_OK, GNUNET_SYSERR, list, and ret.

Referenced by GNUNET_CONFIGURATION_append_value_filename().

1437 {
1438  char *list;
1439  char *pos;
1440  char *end;
1441  char old;
1442  int ret;
1443 
1444  if (GNUNET_OK !=
1446  return 0;
1447  GNUNET_assert (list != NULL);
1448  ret = 0;
1449  pos = list;
1450  while (1)
1451  {
1452  while (pos[0] == ' ')
1453  pos++;
1454  if (strlen (pos) == 0)
1455  break;
1456  end = pos + 1;
1457  while ((end[0] != ' ') && (end[0] != '\0'))
1458  {
1459  if (end[0] == '\\')
1460  {
1461  switch (end[1])
1462  {
1463  case '\\':
1464  case ' ':
1465  memmove (end, &end[1], strlen (&end[1]) + 1);
1466 
1467  case '\0':
1468  /* illegal, but just keep it */
1469  break;
1470 
1471  default:
1472  /* illegal, but just ignore that there was a '/' */
1473  break;
1474  }
1475  }
1476  end++;
1477  }
1478  old = end[0];
1479  end[0] = '\0';
1480  if (strlen (pos) > 0)
1481  {
1482  ret++;
1483  if ((cb != NULL) && (GNUNET_OK != cb (cb_cls, pos)))
1484  {
1485  ret = GNUNET_SYSERR;
1486  break;
1487  }
1488  }
1489  if (old == '\0')
1490  break;
1491  pos = end + 1;
1492  }
1493  GNUNET_free (list);
1494  return ret;
1495 }
static int end
Set if we are to shutdown all services (including ARM).
Definition: gnunet-arm.c:34
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
static int ret
Return value of the commandline.
Definition: gnunet-abd.c:81
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
static char * section
Name of the section.
Definition: gnunet-config.c:33
static char * option
Name of the option.
Definition: gnunet-config.c:38
int GNUNET_CONFIGURATION_get_value_string(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, char **value)
Get a configuration value that should be a string.
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
static int list
Set if we should print a list of currently running services.
Definition: gnunet-arm.c:69
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_iterate_section_values()

void GNUNET_CONFIGURATION_iterate_section_values ( const struct GNUNET_CONFIGURATION_Handle cfg,
const char *  section,
GNUNET_CONFIGURATION_Iterator  iter,
void *  iter_cls 
)

Iterate over values of a section in the configuration.

Parameters
cfgconfiguration to inspect
sectionthe section
iterfunction to call on each option
iter_clsclosure for iter

Definition at line 586 of file configuration.c.

References ConfigSection::entries, ConfigEntry::key, ConfigSection::name, ConfigEntry::next, ConfigSection::next, GNUNET_CONFIGURATION_Handle::sections, and ConfigEntry::val.

Referenced by associate_shared_service(), authorize_endpoint(), auto_config_cb(), get_cont(), GNUNET_TESTING_system_create_with_portrange(), read_blacklist_configuration(), and run().

591 {
592  struct ConfigSection *spos;
593  struct ConfigEntry *epos;
594 
595  spos = cfg->sections;
596  while ((spos != NULL) && (0 != strcasecmp (spos->name, section)))
597  spos = spos->next;
598  if (NULL == spos)
599  return;
600  for (epos = spos->entries; NULL != epos; epos = epos->next)
601  if (NULL != epos->val)
602  iter (iter_cls, spos->name, epos->key, epos->val);
603 }
struct ConfigEntry * entries
entries in the section
Definition: configuration.c:73
configuration entry
Definition: configuration.c:41
static char * section
Name of the section.
Definition: gnunet-config.c:33
char * name
name of the section
Definition: configuration.c:78
struct ConfigSection * sections
Configuration sections.
Definition: configuration.c:90
struct ConfigEntry * next
This is a linked list.
Definition: configuration.c:46
configuration section
Definition: configuration.c:63
char * key
key for this entry
Definition: configuration.c:51
struct ConfigSection * next
This is a linked list.
Definition: configuration.c:68
char * val
current, commited value
Definition: configuration.c:56
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_get_value_choice()

int GNUNET_CONFIGURATION_get_value_choice ( const struct GNUNET_CONFIGURATION_Handle cfg,
const char *  section,
const char *  option,
const char *const *  choices,
const char **  value 
)

Get a configuration value that should be in a set of predefined strings.

Parameters
cfgconfiguration to inspect
sectionsection of interest
optionoption of interest
choicesNULL-terminated list of legal values
valuewill be set to an entry in the legal list, or NULL if option is not specified and no default given
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 1059 of file configuration.c.

References _, e, find_entry(), GNUNET_ERROR_TYPE_ERROR, GNUNET_OK, GNUNET_SYSERR, LOG, and ConfigEntry::val.

Referenced by GNUNET_CONFIGURATION_get_value_yesno(), and start_process().

1065 {
1066  struct ConfigEntry *e;
1067  unsigned int i;
1068 
1069  if (NULL == (e = find_entry (cfg, section, option)))
1070  return GNUNET_SYSERR;
1071  for (i = 0; NULL != choices[i]; i++)
1072  if (0 == strcasecmp (choices[i], e->val))
1073  break;
1074  if (NULL == choices[i])
1075  {
1077  _ ("Configuration value '%s' for '%s'"
1078  " in section '%s' is not in set of legal choices\n"),
1079  e->val,
1080  option,
1081  section);
1082  return GNUNET_SYSERR;
1083  }
1084  *value = choices[i];
1085  return GNUNET_OK;
1086 }
static struct Experiment * e
configuration entry
Definition: configuration.c:41
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
static struct ConfigEntry * find_entry(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *key)
Find an entry from a configuration.
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
static char * section
Name of the section.
Definition: gnunet-config.c:33
static char * value
Value of the record to add/remove.
static char * option
Name of the option.
Definition: gnunet-config.c:38
#define LOG(kind,...)
Definition: configuration.c:33
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
char * val
current, commited value
Definition: configuration.c:56
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_get_value_yesno()

int GNUNET_CONFIGURATION_get_value_yesno ( const struct GNUNET_CONFIGURATION_Handle cfg,
const char *  section,
const char *  option 
)

Get a configuration value that should be in a set of "YES" or "NO".

Parameters
cfgconfiguration to inspect
sectionsection of interest
optionoption of interest
Returns
GNUNET_YES, GNUNET_NO or if option has no valid value, GNUNET_SYSERR
Parameters
cfgconfiguration to inspect
sectionsection of interest
optionoption of interest
Returns
GNUNET_YES, GNUNET_NO or GNUNET_SYSERR

Definition at line 1401 of file configuration.c.

References GNUNET_CONFIGURATION_get_value_choice(), GNUNET_NO, GNUNET_SYSERR, GNUNET_YES, ret, and ConfigEntry::val.

Referenced by advertise_dns_exit(), client_configure_plugin(), create_listen_socket(), database_setup(), GDS_NEIGHBOURS_init(), get_server_addresses(), gg_load_configuration(), GNS_resolver_init(), GNUNET_ATS_solvers_experimentation_load(), GNUNET_CONNECTION_create_from_connect_to_unixpath(), GNUNET_DATACACHE_create(), GNUNET_STATISTICS_create(), GSF_pending_request_init_(), GSF_push_init_(), LEGACY_SERVICE_get_server_addresses(), libgnunet_plugin_datacache_sqlite_init(), libgnunet_plugin_transport_http_server_init(), libgnunet_plugin_transport_tcp_init(), libgnunet_plugin_transport_udp_init(), libgnunet_plugin_transport_unix_init(), main_init(), parse_ip_options(), run(), server_configure_plugin(), setup_broadcast(), setup_service(), sign_ephemeral_key(), start_arm_service(), start_process(), tcp_address_to_sockaddr(), test_icmp_client(), test_icmp_server(), test_master(), udp_address_to_sockaddr(), and update_config().

1405 {
1406  static const char *yesno[] = { "YES", "NO", NULL };
1407  const char *val;
1408  int ret;
1409 
1410  ret =
1412  if (ret == GNUNET_SYSERR)
1413  return ret;
1414  if (val == yesno[0])
1415  return GNUNET_YES;
1416  return GNUNET_NO;
1417 }
static int ret
Return value of the commandline.
Definition: gnunet-abd.c:81
#define GNUNET_NO
Definition: gnunet_common.h:78
static char * section
Name of the section.
Definition: gnunet-config.c:33
static char * option
Name of the option.
Definition: gnunet-config.c:38
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
#define GNUNET_YES
Definition: gnunet_common.h:77
int GNUNET_CONFIGURATION_get_value_choice(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, const char *const *choices, const char **value)
Get a configuration value that should be in a set of predefined strings.
char * val
current, commited value
Definition: configuration.c:56
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_get_data()

int GNUNET_CONFIGURATION_get_data ( const struct GNUNET_CONFIGURATION_Handle cfg,
const char *  section,
const char *  option,
void *  buf,
size_t  buf_size 
)

Get Crockford32-encoded fixed-size binary data from a configuration.

Parameters
cfgconfiguration to access
sectionsection to access
optionoption to access
bufwhere to store the decoded binary result
buf_sizeexact number of bytes to store in buf
Returns
GNUNET_OK on success GNUNET_NO is the value does not exist GNUNET_SYSERR on decoding error

Get Crockford32-encoded fixed-size binary data from a configuration.

Parameters
cfgconfiguration to access
sectionsection to access
optionoption to access
bufwhere to store the decoded binary result
buf_sizeexact number of bytes to store in buf
Returns
GNUNET_OK on success GNUNET_NO is the value does not exist GNUNET_SYSERR on decoding error

Definition at line 1102 of file configuration.c.

References data_size, enc, GNUNET_CONFIGURATION_get_value_string(), GNUNET_free, GNUNET_OK, GNUNET_STRINGS_string_to_data(), GNUNET_SYSERR, and res.

1107 {
1108  char *enc;
1109  int res;
1110  size_t data_size;
1111 
1112  if (GNUNET_OK !=
1113  (res =
1115  return res;
1116  data_size = (strlen (enc) * 5) / 8;
1117  if (data_size != buf_size)
1118  {
1119  GNUNET_free (enc);
1120  return GNUNET_SYSERR;
1121  }
1122  if (GNUNET_OK !=
1123  GNUNET_STRINGS_string_to_data (enc, strlen (enc), buf, buf_size))
1124  {
1125  GNUNET_free (enc);
1126  return GNUNET_SYSERR;
1127  }
1128  GNUNET_free (enc);
1129  return GNUNET_OK;
1130 }
static size_t data_size
Number of bytes in data.
Definition: gnunet-abd.c:187
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
static char * section
Name of the section.
Definition: gnunet-config.c:33
static char * option
Name of the option.
Definition: gnunet-config.c:38
static char buf[2048]
static int res
int GNUNET_CONFIGURATION_get_value_string(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, char **value)
Get a configuration value that should be a string.
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
static OpusEncoder * enc
OPUS encoder.
int GNUNET_STRINGS_string_to_data(const char *enc, size_t enclen, void *out, size_t out_size)
Convert CrockfordBase32 encoding back to data.
Definition: strings.c:952
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:

◆ GNUNET_CONFIGURATION_expand_dollar()

char* GNUNET_CONFIGURATION_expand_dollar ( const struct GNUNET_CONFIGURATION_Handle cfg,
char *  orig 
)

Expand an expression of the form "$FOO/BAR" to "DIRECTORY/BAR" where either in the "PATHS" section or the environtment "FOO" is set to "DIRECTORY".

We also support default expansion, i.e. ${VARIABLE:-default} will expand to $VARIABLE if VARIABLE is set in PATHS or the environment, and otherwise to "default". Note that "default" itself can also be a $-expression, thus "${VAR1:-{$VAR2}}" will expand to VAR1 and if that is not defined to VAR2.

Parameters
cfgconfiguration to use for path expansion
origstring to $-expand (will be freed!) Note that multiple $-expressions can be present in this string. They will all be $-expanded.
Returns
$-expanded string

We also support default expansion, i.e. ${VARIABLE:-default} will expand to $VARIABLE if VARIABLE is set in PATHS or the environment, and otherwise to "default". Note that "default" itself can also be a $-expression, thus "${VAR1:-{$VAR2}}" will expand to VAR1 and if that is not defined to VAR2.

Parameters
cfgconfiguration to use for path expansion
origstring to $-expand (will be freed!). Note that multiple $-expressions can be present in this string. They will all be $-expanded.
Returns
$-expanded string

Definition at line 1333 of file configuration.c.

References expand_dollar(), GNUNET_free, GNUNET_memcpy, GNUNET_realloc, GNUNET_strdup, and len.

Referenced by expand_dollar(), GNUNET_CONFIGURATION_get_value_filename(), GNUNET_TESTING_peer_start(), run(), start_arm_service(), and start_process().

1336 {
1337  char *dup;
1338  size_t i;
1339  size_t len;
1340 
1341  for (i = 0; '\0' != orig[i]; i++)
1342  {
1343  if ('$' != orig[i])
1344  continue;
1345  dup = GNUNET_strdup (orig + i);
1346  dup = expand_dollar (cfg, dup, 0);
1347  len = strlen (dup) + 1;
1348  orig = GNUNET_realloc (orig, i + len);
1349  GNUNET_memcpy (orig + i, dup, len);
1350  GNUNET_free (dup);
1351  }
1352  return orig;
1353 }
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
#define GNUNET_realloc(ptr, size)
Wrapper around realloc.
static char * expand_dollar(const struct GNUNET_CONFIGURATION_Handle *cfg, char *orig, unsigned int depth)
Expand an expression of the form "$FOO/BAR" to "DIRECTORY/BAR" where either in the "PATHS" section or...
#define GNUNET_free(ptr)
Wrapper around free.
uint16_t len
length of data (which is always a uint32_t, but presumably this can be used to specify that fewer byt...
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_set_value_number()

void GNUNET_CONFIGURATION_set_value_number ( struct GNUNET_CONFIGURATION_Handle cfg,
const char *  section,
const char *  option,
unsigned long long  number 
)

Set a configuration value that should be a number.

Parameters
cfgconfiguration to update
sectionsection of interest
optionoption of interest
numbervalue to set

Definition at line 888 of file configuration.c.

References GNUNET_CONFIGURATION_set_value_string(), and GNUNET_snprintf().

Referenced by handle_peer_create(), next_phase(), run(), and set_value().

892 {
893  char s[64];
894 
895  GNUNET_snprintf (s, 64, "%llu", number);
897 }
int GNUNET_snprintf(char *buf, size_t size, const char *format,...)
Like snprintf, just aborts if the buffer is of insufficient size.
uint32_t number
static char * section
Name of the section.
Definition: gnunet-config.c:33
static char * option
Name of the option.
Definition: gnunet-config.c:38
void GNUNET_CONFIGURATION_set_value_string(struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, const char *value)
Set a configuration value that should be a string.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_set_value_string()

void GNUNET_CONFIGURATION_set_value_string ( struct GNUNET_CONFIGURATION_Handle cfg,
const char *  section,
const char *  option,
const char *  value 
)

Set a configuration value that should be a string.

Parameters
cfgconfiguration to update
sectionsection of interest
optionoption of interest
valuevalue to set

Definition at line 838 of file configuration.c.

References e, ConfigSection::entries, find_entry(), find_section(), GNUNET_free_non_null, GNUNET_new, GNUNET_strdup, ConfigEntry::key, ConfigSection::name, ConfigEntry::next, ConfigSection::next, GNUNET_CONFIGURATION_Handle::sections, and ConfigEntry::val.

Referenced by associate_shared_service(), auto_conf_iter(), auto_config_cb(), cfg_copy_iterator(), compare_entries(), copy_entry(), GNUNET_CONFIGURATION_append_value_filename(), GNUNET_CONFIGURATION_deserialize(), GNUNET_CONFIGURATION_load(), GNUNET_CONFIGURATION_remove_value_filename(), GNUNET_CONFIGURATION_set_value_number(), GNUNET_NAT_autoconfig_start(), GNUNET_PROGRAM_run2(), GNUNET_TESTING_configuration_create_(), handle_ego_delete(), handle_ego_rename(), handle_set_default_message(), helper_mst(), identity_cb(), next_phase(), process_if(), result_callback(), run(), set_external_ipv4(), set_value(), test_local_ip(), test_upnpc(), update_config(), update_config_sections(), and update_enable_upnpc_option().

842 {
843  struct ConfigSection *sec;
844  struct ConfigEntry *e;
845  char *nv;
846 
847  e = find_entry (cfg, section, option);
848  if (NULL != e)
849  {
850  if (NULL == value)
851  {
853  e->val = NULL;
854  }
855  else
856  {
857  nv = GNUNET_strdup (value);
859  e->val = nv;
860  }
861  return;
862  }
863  sec = find_section (cfg, section);
864  if (sec == NULL)
865  {
866  sec = GNUNET_new (struct ConfigSection);
867  sec->name = GNUNET_strdup (section);
868  sec->next = cfg->sections;
869  cfg->sections = sec;
870  }
871  e = GNUNET_new (struct ConfigEntry);
872  e->key = GNUNET_strdup (option);
873  e->val = GNUNET_strdup (value);
874  e->next = sec->entries;
875  sec->entries = e;
876 }
struct ConfigEntry * entries
entries in the section
Definition: configuration.c:73
static struct Experiment * e
configuration entry
Definition: configuration.c:41
#define GNUNET_free_non_null(ptr)
Free the memory pointed to by ptr if ptr is not NULL.
#define GNUNET_new(type)
Allocate a struct or union of the given type.
static struct ConfigEntry * find_entry(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *key)
Find an entry from a configuration.
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
static char * section
Name of the section.
Definition: gnunet-config.c:33
char * name
name of the section
Definition: configuration.c:78
static struct ConfigSection * find_section(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section)
Find a section entry from a configuration.
static char * value
Value of the record to add/remove.
static char * option
Name of the option.
Definition: gnunet-config.c:38
struct ConfigSection * sections
Configuration sections.
Definition: configuration.c:90
struct ConfigEntry * next
This is a linked list.
Definition: configuration.c:46
configuration section
Definition: configuration.c:63
char * key
key for this entry
Definition: configuration.c:51
struct ConfigSection * next
This is a linked list.
Definition: configuration.c:68
char * val
current, commited value
Definition: configuration.c:56
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CONFIGURATION_remove_value_filename()

int GNUNET_CONFIGURATION_remove_value_filename ( struct GNUNET_CONFIGURATION_Handle cfg,
const char *  section,
const char *  option,
const char *  value 
)

Remove a filename from a configuration value that represents a list of filenames.

Parameters
cfgconfiguration to update
sectionsection of interest
optionoption of interest
valuefilename to remove
Returns
GNUNET_OK on success, GNUNET_SYSERR if the filename is not in the list
Parameters
cfgconfiguration to update
sectionsection of interest
optionoption of interest
valuefilename to remove
Returns
GNUNET_OK on success, GNUNET_NO if the filename is not in the list, GNUNET_SYSERR on error

Definition at line 1612 of file configuration.c.

References end, escape_name(), GNUNET_CONFIGURATION_get_value_string(), GNUNET_CONFIGURATION_set_value_string(), GNUNET_free, GNUNET_NO, GNUNET_OK, and list.

1617 {
1618  char *list;
1619  char *pos;
1620  char *end;
1621  char *match;
1622  char old;
1623 
1624  if (GNUNET_OK !=
1626  return GNUNET_NO;
1627  match = escape_name (value);
1628  pos = list;
1629  while (1)
1630  {
1631  while (pos[0] == ' ')
1632  pos++;
1633  if (strlen (pos) == 0)
1634  break;
1635  end = pos + 1;
1636  while ((end[0] != ' ') && (end[0] != '\0'))
1637  {
1638  if (end[0] == '\\')
1639  {
1640  switch (end[1])
1641  {
1642  case '\\':
1643  case ' ':
1644  end++;
1645  break;
1646 
1647  case '\0':
1648  /* illegal, but just keep it */
1649  break;
1650 
1651  default:
1652  /* illegal, but just ignore that there was a '/' */
1653  break;
1654  }
1655  }
1656  end++;
1657  }
1658  old = end[0];
1659  end[0] = '\0';
1660  if (0 == strcmp (pos, match))
1661  {
1662  if (old != '\0')
1663  memmove (pos, &end[1], strlen (&end[1]) + 1);
1664  else
1665  {
1666  if (pos != list)
1667  pos[-1] = '\0';
1668  else
1669  pos[0] = '\0';
1670  }
1672  GNUNET_free (list);
1673  GNUNET_free (match);
1674  return GNUNET_OK;
1675  }
1676  if (old == '\0')
1677  break;
1678  end[0] = old;
1679  pos = end + 1;
1680  }
1681  GNUNET_free (list);
1682  GNUNET_free (match);
1683  return GNUNET_NO;
1684 }
static int end
Set if we are to shutdown all services (including ARM).
Definition: gnunet-arm.c:34
static char * escape_name(const char *value)
FIXME.
#define GNUNET_NO
Definition: gnunet_common.h:78
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
static char * section
Name of the section.
Definition: gnunet-config.c:33
static char * value
Value of the record to add/remove.
static char * option
Name of the option.
Definition: gnunet-config.c:38
void GNUNET_CONFIGURATION_set_value_string(struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, const char *value)
Set a configuration value that should be a string.
int GNUNET_CONFIGURATION_get_value_string(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, char **value)
Get a configuration value that should be a string.
static int list
Set if we should print a list of currently running services.
Definition: gnunet-arm.c:69
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:

◆ GNUNET_CONFIGURATION_append_value_filename()

int GNUNET_CONFIGURATION_append_value_filename ( struct GNUNET_CONFIGURATION_Handle cfg,
const char *  section,
const char *  option,
const char *  value 
)

Append a filename to a configuration value that represents a list of filenames.

Parameters
cfgconfiguration to update
sectionsection of interest
optionoption of interest
valuefilename to append
Returns
GNUNET_OK on success, GNUNET_SYSERR if the filename already in the list
Parameters
cfgconfiguration to update
sectionsection of interest
optionoption of interest
valuefilename to append
Returns
GNUNET_OK on success, GNUNET_NO if the filename already in the list GNUNET_SYSERR on error

Definition at line 1565 of file configuration.c.

References escape_name(), GNUNET_CONFIGURATION_get_value_string(), GNUNET_CONFIGURATION_iterate_value_filenames(), GNUNET_CONFIGURATION_set_value_string(), GNUNET_free, GNUNET_malloc, GNUNET_NO, GNUNET_OK, GNUNET_strdup, GNUNET_SYSERR, and test_match().

1570 {
1571  char *escaped;
1572  char *old;
1573  char *nw;
1574 
1575  if (GNUNET_SYSERR ==
1577  section,
1578  option,
1579  &test_match,
1580  (void *) value))
1581  return GNUNET_NO; /* already exists */
1582  if (GNUNET_OK !=
1584  old = GNUNET_strdup ("");
1585  escaped = escape_name (value);
1586  nw = GNUNET_malloc (strlen (old) + strlen (escaped) + 2);
1587  strcpy (nw, old);
1588  if (strlen (old) > 0)
1589  strcat (nw, " ");
1590  strcat (nw, escaped);
1592  GNUNET_free (old);
1593  GNUNET_free (nw);
1594  GNUNET_free (escaped);
1595  return GNUNET_OK;
1596 }
static char * escape_name(const char *value)
FIXME.
#define GNUNET_NO
Definition: gnunet_common.h:78
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
static char * section
Name of the section.
Definition: gnunet-config.c:33
static int test_match(void *cls, const char *fn)
FIXME.
static char * value
Value of the record to add/remove.
static char * option
Name of the option.
Definition: gnunet-config.c:38
void GNUNET_CONFIGURATION_set_value_string(struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, const char *value)
Set a configuration value that should be a string.
int GNUNET_CONFIGURATION_get_value_string(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, char **value)
Get a configuration value that should be a string.
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
int GNUNET_CONFIGURATION_iterate_value_filenames(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, GNUNET_FileNameCallback cb, void *cb_cls)
Iterate over the set of filenames stored in a configuration value.
#define GNUNET_malloc(size)
Wrapper around malloc.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function: