config: add new function nm_config_data_diff()
This commit is contained in:
@@ -21,6 +21,8 @@
|
|||||||
|
|
||||||
#include "nm-config-data.h"
|
#include "nm-config-data.h"
|
||||||
|
|
||||||
|
#include "nm-config.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char *config_main_file;
|
char *config_main_file;
|
||||||
char *config_description;
|
char *config_description;
|
||||||
@@ -91,6 +93,34 @@ nm_config_data_get_connectivity_response (const NMConfigData *self)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************/
|
||||||
|
|
||||||
|
GHashTable *
|
||||||
|
nm_config_data_diff (NMConfigData *old_data, NMConfigData *new_data)
|
||||||
|
{
|
||||||
|
GHashTable *changes;
|
||||||
|
|
||||||
|
g_return_val_if_fail (NM_IS_CONFIG_DATA (old_data), NULL);
|
||||||
|
g_return_val_if_fail (NM_IS_CONFIG_DATA (new_data), NULL);
|
||||||
|
|
||||||
|
changes = g_hash_table_new (g_str_hash, g_str_equal);
|
||||||
|
|
||||||
|
if ( g_strcmp0 (nm_config_data_get_config_main_file (old_data), nm_config_data_get_config_main_file (new_data)) != 0
|
||||||
|
|| g_strcmp0 (nm_config_data_get_config_description (old_data), nm_config_data_get_config_description (new_data)) != 0)
|
||||||
|
g_hash_table_insert (changes, NM_CONFIG_CHANGES_CONFIG_FILES, NULL);
|
||||||
|
|
||||||
|
if ( nm_config_data_get_connectivity_interval (old_data) != nm_config_data_get_connectivity_interval (new_data)
|
||||||
|
|| g_strcmp0 (nm_config_data_get_connectivity_uri (old_data), nm_config_data_get_connectivity_uri (new_data))
|
||||||
|
|| g_strcmp0 (nm_config_data_get_connectivity_response (old_data), nm_config_data_get_connectivity_response (new_data)))
|
||||||
|
g_hash_table_insert (changes, NM_CONFIG_CHANGES_CONNECTIVITY, NULL);
|
||||||
|
|
||||||
|
if (!g_hash_table_size (changes)) {
|
||||||
|
g_hash_table_destroy (changes);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return changes;
|
||||||
|
}
|
||||||
|
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@@ -56,6 +56,8 @@ NMConfigData *nm_config_data_new (const char *config_main_file,
|
|||||||
const char *config_description,
|
const char *config_description,
|
||||||
GKeyFile *keyfile);
|
GKeyFile *keyfile);
|
||||||
|
|
||||||
|
GHashTable *nm_config_data_diff (NMConfigData *old_data, NMConfigData *new_data);
|
||||||
|
|
||||||
const char *nm_config_data_get_config_main_file (const NMConfigData *config_data);
|
const char *nm_config_data_get_config_main_file (const NMConfigData *config_data);
|
||||||
const char *nm_config_data_get_config_description (const NMConfigData *config_data);
|
const char *nm_config_data_get_config_description (const NMConfigData *config_data);
|
||||||
|
|
||||||
|
@@ -721,28 +721,10 @@ nm_config_reload (NMConfig *self)
|
|||||||
g_free (config_description);
|
g_free (config_description);
|
||||||
g_key_file_free (keyfile);
|
g_key_file_free (keyfile);
|
||||||
|
|
||||||
|
|
||||||
changes = g_hash_table_new (g_str_hash, g_str_equal);
|
|
||||||
|
|
||||||
/* reloading configuration means we have to carefully check every single option
|
|
||||||
* that we want to support and take specific actions. */
|
|
||||||
|
|
||||||
old_data = priv->config_data;
|
old_data = priv->config_data;
|
||||||
if ( nm_config_data_get_connectivity_interval (old_data) != nm_config_data_get_connectivity_interval (new_data)
|
changes = nm_config_data_diff (old_data, new_data);
|
||||||
|| g_strcmp0 (nm_config_data_get_connectivity_uri (old_data), nm_config_data_get_connectivity_uri (new_data))
|
|
||||||
|| g_strcmp0 (nm_config_data_get_connectivity_response (old_data), nm_config_data_get_connectivity_response (new_data))) {
|
|
||||||
nm_log_dbg (LOGD_CORE, "config: reload: change '" NM_CONFIG_CHANGES_CONNECTIVITY "'");
|
|
||||||
g_hash_table_insert (changes, NM_CONFIG_CHANGES_CONNECTIVITY, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( g_strcmp0 (nm_config_data_get_config_main_file (old_data), nm_config_data_get_config_main_file (new_data)) != 0
|
if (!changes) {
|
||||||
|| g_strcmp0 (nm_config_data_get_config_description (old_data), nm_config_data_get_config_description (new_data)) != 0) {
|
|
||||||
nm_log_dbg (LOGD_CORE, "config: reload: change '" NM_CONFIG_CHANGES_CONFIG_FILES "'");
|
|
||||||
g_hash_table_insert (changes, NM_CONFIG_CHANGES_CONFIG_FILES, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!g_hash_table_size (changes)) {
|
|
||||||
g_hash_table_destroy (changes);
|
|
||||||
g_object_unref (new_data);
|
g_object_unref (new_data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user