OpenVAS Libraries  9.0.3
settings.c File Reference

Implementation of API to handle configuration file management. More...

#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <sys/stat.h>
#include "settings.h"
Include dependency graph for settings.c:

Go to the source code of this file.

Functions

int settings_init_from_file (settings_t *settings, const gchar *filename, const gchar *group)
 Initialise a settings struct from a file. More...
 
void settings_cleanup (settings_t *settings)
 Cleanup a settings structure. More...
 
int init_settings_iterator_from_file (settings_iterator_t *iterator, const gchar *filename, const gchar *group)
 Initialise a settings iterator from a file. More...
 
void cleanup_settings_iterator (settings_iterator_t *iterator)
 Cleanup a settings iterator. More...
 
gboolean settings_iterator_next (settings_iterator_t *iterator)
 Increment an iterator. More...
 
const gchar * settings_iterator_name (settings_iterator_t *iterator)
 Get the name from a settings iterator. More...
 
const gchar * settings_iterator_value (settings_iterator_t *iterator)
 Get the value from a settings iterator. More...
 

Detailed Description

Implementation of API to handle configuration file management.

Definition in file settings.c.

Function Documentation

◆ cleanup_settings_iterator()

void cleanup_settings_iterator ( settings_iterator_t iterator)

Cleanup a settings iterator.

Parameters
[in]iteratorSettings iterator.

Definition at line 154 of file settings.c.

155 {
156  g_strfreev (iterator->keys);
157  settings_cleanup (&iterator->settings);
158 }
void settings_cleanup(settings_t *settings)
Cleanup a settings structure.
Definition: settings.c:98
settings_t settings
Definition: settings.h:51

References settings_iterator_t::keys, settings_iterator_t::settings, and settings_cleanup().

Here is the call graph for this function:

◆ init_settings_iterator_from_file()

int init_settings_iterator_from_file ( settings_iterator_t iterator,
const gchar *  filename,
const gchar *  group 
)

Initialise a settings iterator from a file.

Parameters
[in]iteratorSettings iterator.
[in]filenameComplete name of the configuration file.
[in]groupName of the group in the file.
Returns
0 success, -1 error.

Definition at line 115 of file settings.c.

117 {
118  int ret;
119  gsize keys_length;
120  GError *error = NULL;
121 
122  ret = settings_init_from_file (&iterator->settings, filename, group);
123  if (ret)
124  return ret;
125 
126  iterator->keys =
127  g_key_file_get_keys (iterator->settings.key_file, group, &keys_length,
128  &error);
129 
130  if (iterator->keys == NULL)
131  {
132  if (error)
133  {
134  g_warning ("Failed to retrieve keys of group %s from %s: %s", group,
135  filename, error->message);
136  g_error_free (error);
137  }
138  g_key_file_free (iterator->settings.key_file);
139  return -1;
140  }
141 
142  iterator->current_key = iterator->keys - 1;
143  iterator->last_key = iterator->keys + keys_length - 1;
144 
145  return 0;
146 }
GKeyFile * key_file
Definition: settings.h:43
gchar ** current_key
Definition: settings.h:52
gchar ** last_key
Definition: settings.h:53
int settings_init_from_file(settings_t *settings, const gchar *filename, const gchar *group)
Initialise a settings struct from a file.
Definition: settings.c:50
settings_t settings
Definition: settings.h:51

References settings_iterator_t::current_key, settings_t::key_file, settings_iterator_t::keys, settings_iterator_t::last_key, settings_iterator_t::settings, and settings_init_from_file().

Here is the call graph for this function:

◆ settings_cleanup()

void settings_cleanup ( settings_t settings)

Cleanup a settings structure.

Parameters
[in]settingsSettings structure.

Definition at line 98 of file settings.c.

99 {
100  g_free (settings->group_name);
101  g_free (settings->file_name);
102  g_key_file_free (settings->key_file);
103 }
GKeyFile * key_file
Definition: settings.h:43
gchar * file_name
Definition: settings.h:41
gchar * group_name
Definition: settings.h:42

References settings_t::file_name, settings_t::group_name, and settings_t::key_file.

Referenced by cleanup_settings_iterator().

Here is the caller graph for this function:

◆ settings_init_from_file()

int settings_init_from_file ( settings_t settings,
const gchar *  filename,
const gchar *  group 
)

Initialise a settings struct from a file.

Parameters
[in]settingsSettings.
[in]filenameComplete name of the configuration file.
[in]groupName of the group in the file.
Returns
0 success, -1 error.

Definition at line 50 of file settings.c.

52 {
53  GError *error = NULL;
54 
55  if (filename == NULL || group == NULL)
56  return -1;
57 
58  gchar *contents = NULL;
59 
60  if (!g_file_get_contents (filename, &contents, NULL, &error))
61  {
62  g_error_free (error);
63  return -1;
64  }
65 
66  if (contents != NULL)
67  {
68  gchar *contents_with_group = g_strjoin ("\n", "[Misc]", contents, NULL);
69  settings->key_file = g_key_file_new ();
70 
71  if (!g_key_file_load_from_data
72  (settings->key_file, contents_with_group, strlen (contents_with_group),
73  G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS, &error))
74  {
75  g_warning ("Failed to load configuration from %s: %s", filename,
76  error->message);
77  g_error_free (error);
78  g_free (contents_with_group);
79  g_free (contents);
80  return -1;
81  }
82  g_free (contents_with_group);
83  g_free (contents);
84  }
85 
86  settings->group_name = g_strdup (group);
87  settings->file_name = g_strdup (filename);
88 
89  return 0;
90 }
GKeyFile * key_file
Definition: settings.h:43
gchar * file_name
Definition: settings.h:41
gchar * group_name
Definition: settings.h:42

References settings_t::file_name, settings_t::group_name, and settings_t::key_file.

Referenced by init_settings_iterator_from_file().

Here is the caller graph for this function:

◆ settings_iterator_name()

const gchar* settings_iterator_name ( settings_iterator_t iterator)

Get the name from a settings iterator.

Parameters
[in]iteratorSettings iterator.
Returns
Name of current key.

Definition at line 184 of file settings.c.

185 {
186  return *iterator->current_key;
187 }
gchar ** current_key
Definition: settings.h:52

References settings_iterator_t::current_key.

◆ settings_iterator_next()

gboolean settings_iterator_next ( settings_iterator_t iterator)

Increment an iterator.

Parameters
[in]iteratorSettings iterator.
Returns
TRUE if there was a next item, else FALSE.

Definition at line 168 of file settings.c.

169 {
170  if (iterator->current_key == iterator->last_key)
171  return FALSE;
172  iterator->current_key++;
173  return TRUE;
174 }
gchar ** current_key
Definition: settings.h:52
gchar ** last_key
Definition: settings.h:53

References settings_iterator_t::current_key, and settings_iterator_t::last_key.

◆ settings_iterator_value()

const gchar* settings_iterator_value ( settings_iterator_t iterator)

Get the value from a settings iterator.

Parameters
[in]iteratorSettings iterator.
Returns
Value of current key.

Definition at line 197 of file settings.c.

198 {
199  return g_key_file_get_value (iterator->settings.key_file,
200  iterator->settings.group_name,
201  *iterator->current_key, NULL);
202 }
GKeyFile * key_file
Definition: settings.h:43
gchar ** current_key
Definition: settings.h:52
gchar * group_name
Definition: settings.h:42
settings_t settings
Definition: settings.h:51

References settings_iterator_t::current_key, settings_t::group_name, settings_t::key_file, and settings_iterator_t::settings.