From aa54d5a36eb329e4a9b9fb6e62633cd58c431f96 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 8 Jul 2015 19:24:49 +0200 Subject: config: add nm_config_data_get_value_cached() function nm_config_data_get_value() returns an allocated string. This is inconvenient for the caller. Add a utility function nm_config_data_get_value_cached() that caches the returned value. Of course, use with care as the returned string will be invalidated by each call to nm_config_data_get_value_cached(). --- src/nm-config-data.c | 21 +++++++++++++++++++++ src/nm-config-data.h | 1 + 2 files changed, 22 insertions(+) diff --git a/src/nm-config-data.c b/src/nm-config-data.c index 03cae638c7..5e015f016e 100644 --- a/src/nm-config-data.c +++ b/src/nm-config-data.c @@ -72,6 +72,9 @@ typedef struct { char *dns_mode; char *rc_manager; + + /* mutable field */ + char *value_cached; } NMConfigDataPrivate; @@ -138,6 +141,22 @@ nm_config_data_get_value (const NMConfigData *self, const char *group, const cha return nm_config_keyfile_get_value (NM_CONFIG_DATA_GET_PRIVATE (self)->keyfile, group, key, flags); } +const char *nm_config_data_get_value_cached (const NMConfigData *self, const char *group, const char *key, NMConfigGetValueFlags flags) +{ + NMConfigDataPrivate *priv; + + g_return_val_if_fail (NM_IS_CONFIG_DATA (self), NULL); + g_return_val_if_fail (group && *group, NULL); + g_return_val_if_fail (key && *key, NULL); + + priv = NM_CONFIG_DATA_GET_PRIVATE (self); + + /* we modify @value_cached. In C++ jargon, the field is mutable. */ + g_free (priv->value_cached); + priv->value_cached = nm_config_keyfile_get_value (priv->keyfile, group, key, flags); + return priv->value_cached; +} + gboolean nm_config_data_has_value (const NMConfigData *self, const char *group, const char *key, NMConfigGetValueFlags flags) { @@ -801,6 +820,8 @@ finalize (GObject *gobject) g_key_file_unref (priv->keyfile_intern); G_OBJECT_CLASS (nm_config_data_parent_class)->finalize (gobject); + + g_free (priv->value_cached); } static void diff --git a/src/nm-config-data.h b/src/nm-config-data.h index 0dfdf531ec..36aa66af95 100644 --- a/src/nm-config-data.h +++ b/src/nm-config-data.h @@ -111,6 +111,7 @@ const char *nm_config_data_get_config_description (const NMConfigData *config_da gboolean nm_config_data_has_group (const NMConfigData *self, const char *group); gboolean nm_config_data_has_value (const NMConfigData *self, const char *group, const char *key, NMConfigGetValueFlags flags); char *nm_config_data_get_value (const NMConfigData *config_data, const char *group, const char *key, NMConfigGetValueFlags flags); +const char *nm_config_data_get_value_cached (const NMConfigData *config_data, const char *group, const char *key, NMConfigGetValueFlags flags); gint nm_config_data_get_value_boolean (const NMConfigData *self, const char *group, const char *key, gint default_value); const char *nm_config_data_get_connectivity_uri (const NMConfigData *config_data); -- cgit v1.2.1