From 997b729e8cbd05f51bac7dcd795ca7b35aa5e551 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Wed, 12 Dec 2012 21:44:22 +0000 Subject: adding function to compute configuration differences in memory --- src/util/configuration.c | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) (limited to 'src/util/configuration.c') diff --git a/src/util/configuration.c b/src/util/configuration.c index f07f61a94..72fe0e7d0 100644 --- a/src/util/configuration.c +++ b/src/util/configuration.c @@ -736,8 +736,8 @@ findEntry (const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, * @param value value to copy (of the default conf.) */ static void -compareEntries (void *cls, const char *section, const char *option, - const char *value) +compare_entries (void *cls, const char *section, const char *option, + const char *value) { struct DiffHandle *dh = cls; struct ConfigEntry *entNew; @@ -749,6 +749,28 @@ compareEntries (void *cls, const char *section, const char *option, } +/** + * Compute configuration with only entries that have been changed + * + * @param cfgDefault original configuration + * @param cfgNew new configuration + * @return configuration with only the differences, never NULL + */ +struct GNUNET_CONFIGURATION_Handle * +GNUNET_CONFIGURATION_get_diff (const struct GNUNET_CONFIGURATION_Handle + *cfgDefault, + const struct GNUNET_CONFIGURATION_Handle + *cfgNew) +{ + struct DiffHandle diffHandle; + + diffHandle.cfgDiff = GNUNET_CONFIGURATION_create (); + diffHandle.cfgDefault = cfgDefault; + GNUNET_CONFIGURATION_iterate (cfgNew, &compare_entries, &diffHandle); + return diffHandle.cfgDiff; +} + + /** * Write only configuration entries that have been changed to configuration file * @param cfgDefault default configuration @@ -763,13 +785,11 @@ GNUNET_CONFIGURATION_write_diffs (const struct GNUNET_CONFIGURATION_Handle *cfgNew, const char *filename) { int ret; - struct DiffHandle diffHandle; + struct GNUNET_CONFIGURATION_Handle *diff; - diffHandle.cfgDiff = GNUNET_CONFIGURATION_create (); - diffHandle.cfgDefault = cfgDefault; - GNUNET_CONFIGURATION_iterate (cfgNew, compareEntries, &diffHandle); - ret = GNUNET_CONFIGURATION_write (diffHandle.cfgDiff, filename); - GNUNET_CONFIGURATION_destroy (diffHandle.cfgDiff); + diff = GNUNET_CONFIGURATION_get_diff (cfgDefault, cfgNew); + ret = GNUNET_CONFIGURATION_write (diff, filename); + GNUNET_CONFIGURATION_destroy (diff); return ret; } -- cgit v1.2.3