Greenbone Vulnerability Management Libraries 22.32.0
settings.c File Reference

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

#include "settings.h"
#include <stdio.h>
#include <string.h>
Include dependency graph for settings.c:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define G_LOG_DOMAIN   "libgvm base"
 GLib log domain.

Functions

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

Detailed Description

Implementation of API to handle configuration file management.

Definition in file settings.c.

Macro Definition Documentation

◆ G_LOG_DOMAIN

#define G_LOG_DOMAIN   "libgvm base"

GLib log domain.

Definition at line 20 of 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 136 of file settings.c.

137{
138 g_strfreev (iterator->keys);
139 settings_cleanup (&iterator->settings);
140}
void settings_cleanup(settings_t *settings)
Cleanup a settings structure.
Definition settings.c:81
settings_t settings
Definition settings.h:38

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

Referenced by Ensure(), Ensure(), Ensure(), and prefs_config().

Here is the call graph for this function:
Here is the caller 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 98 of file settings.c.

100{
101 int ret;
102 gsize keys_length;
103 GError *error = NULL;
104
105 ret = settings_init_from_file (&iterator->settings, filename, group);
106 if (ret)
107 return ret;
108
109 iterator->keys = g_key_file_get_keys (iterator->settings.key_file, group,
110 &keys_length, &error);
111
112 if (iterator->keys == NULL)
113 {
114 if (error)
115 {
116 g_warning ("Failed to retrieve keys of group %s from %s: %s", group,
117 filename, error->message);
118 g_error_free (error);
119 }
120 g_key_file_free (iterator->settings.key_file);
121 return -1;
122 }
123
124 iterator->current_key = iterator->keys - 1;
125 iterator->last_key = iterator->keys + keys_length - 1;
126
127 return 0;
128}
static int settings_init_from_file(settings_t *settings, const gchar *filename, const gchar *group)
Initialise a settings struct from a file.
Definition settings.c:32
gchar ** current_key
Definition settings.h:39
gchar ** last_key
Definition settings.h:40
GKeyFile * key_file
Definition settings.h:26

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().

Referenced by Ensure(), Ensure(), Ensure(), Ensure(), Ensure(), and prefs_config().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ settings_cleanup()

void settings_cleanup ( settings_t * settings)

Cleanup a settings structure.

Parameters
[in]settingsSettings structure.

Definition at line 81 of file settings.c.

82{
83 g_free (settings->group_name);
84 g_free (settings->file_name);
85 g_key_file_free (settings->key_file);
86}
gchar * group_name
Definition settings.h:25
gchar * file_name
Definition settings.h:24

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

Referenced by cleanup_settings_iterator(), and Ensure().

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

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 32 of file settings.c.

34{
35 GError *error = NULL;
36
37 if (filename == NULL || group == NULL)
38 return -1;
39
40 gchar *contents = NULL;
41
42 if (!g_file_get_contents (filename, &contents, NULL, &error))
43 {
44 g_error_free (error);
45 return -1;
46 }
47
48 if (contents != NULL)
49 {
50 gchar *contents_with_group = g_strjoin ("\n", "[Misc]", contents, NULL);
51 settings->key_file = g_key_file_new ();
52
53 if (!g_key_file_load_from_data (
54 settings->key_file, contents_with_group,
55 strlen (contents_with_group),
56 G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS, &error))
57 {
58 g_warning ("Failed to load configuration from %s: %s", filename,
59 error->message);
60 g_error_free (error);
61 g_free (contents_with_group);
62 g_free (contents);
63 return -1;
64 }
65 g_free (contents_with_group);
66 g_free (contents);
67 }
68
69 settings->group_name = g_strdup (group);
70 settings->file_name = g_strdup (filename);
71
72 return 0;
73}

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 166 of file settings.c.

167{
168 return *iterator->current_key;
169}

References settings_iterator_t::current_key.

Referenced by Ensure(), Ensure(), and prefs_config().

Here is the caller graph for this function:

◆ 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 150 of file settings.c.

151{
152 if (iterator->current_key == iterator->last_key)
153 return FALSE;
154 iterator->current_key++;
155 return TRUE;
156}

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

Referenced by Ensure(), Ensure(), and prefs_config().

Here is the caller graph for this function:

◆ settings_iterator_value()

gchar * settings_iterator_value ( settings_iterator_t * iterator)

Get the value from a settings iterator.

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

Definition at line 179 of file settings.c.

180{
181 return g_key_file_get_value (iterator->settings.key_file,
182 iterator->settings.group_name,
183 *iterator->current_key, NULL);
184}

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

Referenced by Ensure(), Ensure(), and prefs_config().

Here is the caller graph for this function: