diff options
author | Christian Grothoff <christian@grothoff.org> | 2016-05-05 15:10:48 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2016-05-05 15:10:48 +0000 |
commit | ae8cb91d9961899075a892a3110204bc139c2eb6 (patch) | |
tree | ce1dcb5a0c2d20257c7cfe868c63dc7a08e0656f /src/util/gnunet-config.c | |
parent | 0f87e6e8f440c002011d51f486e1b504da0de31e (diff) | |
download | gnunet-ae8cb91d9961899075a892a3110204bc139c2eb6.tar.gz gnunet-ae8cb91d9961899075a892a3110204bc139c2eb6.zip |
add -w option to gnunet-config
Diffstat (limited to 'src/util/gnunet-config.c')
-rw-r--r-- | src/util/gnunet-config.c | 85 |
1 files changed, 66 insertions, 19 deletions
diff --git a/src/util/gnunet-config.c b/src/util/gnunet-config.c index 1c6205334..7ec7162f1 100644 --- a/src/util/gnunet-config.c +++ b/src/util/gnunet-config.c | |||
@@ -57,6 +57,11 @@ static int list_sections; | |||
57 | */ | 57 | */ |
58 | static int ret; | 58 | static int ret; |
59 | 59 | ||
60 | /** | ||
61 | * Should we generate a configuration file that is clean and | ||
62 | * only contains the deltas to the defaults? | ||
63 | */ | ||
64 | static int rewrite; | ||
60 | 65 | ||
61 | /** | 66 | /** |
62 | * Print each option in a given section. | 67 | * Print each option in a given section. |
@@ -99,41 +104,70 @@ print_section_name (void *cls, | |||
99 | * @param cfg configuration | 104 | * @param cfg configuration |
100 | */ | 105 | */ |
101 | static void | 106 | static void |
102 | run (void *cls, char *const *args, const char *cfgfile, | 107 | run (void *cls, |
108 | char *const *args, | ||
109 | const char *cfgfile, | ||
103 | const struct GNUNET_CONFIGURATION_Handle *cfg) | 110 | const struct GNUNET_CONFIGURATION_Handle *cfg) |
104 | { | 111 | { |
105 | struct GNUNET_CONFIGURATION_Handle *out; | 112 | struct GNUNET_CONFIGURATION_Handle *out = NULL; |
113 | struct GNUNET_CONFIGURATION_Handle *diff = NULL; | ||
106 | 114 | ||
107 | if (NULL == section || list_sections) | 115 | if (rewrite) |
116 | { | ||
117 | struct GNUNET_CONFIGURATION_Handle *def; | ||
118 | |||
119 | def = GNUNET_CONFIGURATION_create (); | ||
120 | if (GNUNET_OK != | ||
121 | GNUNET_CONFIGURATION_load (def, NULL)) | ||
122 | { | ||
123 | fprintf (stderr, | ||
124 | _("failed to load configuration defaults")); | ||
125 | ret = 1; | ||
126 | return; | ||
127 | } | ||
128 | diff = GNUNET_CONFIGURATION_get_diff (def, | ||
129 | cfg); | ||
130 | cfg = diff; | ||
131 | } | ||
132 | if ( ((! rewrite) && (NULL == section)) || list_sections) | ||
108 | { | 133 | { |
109 | if (! list_sections) | 134 | if (! list_sections) |
110 | { | 135 | { |
111 | fprintf (stderr, _("--section argument is required\n")); | 136 | fprintf (stderr, |
137 | _("--section argument is required\n")); | ||
112 | } | 138 | } |
113 | fprintf (stderr, _("The following sections are available:\n")); | 139 | fprintf (stderr, |
114 | GNUNET_CONFIGURATION_iterate_sections (cfg, &print_section_name, NULL); | 140 | _("The following sections are available:\n")); |
141 | GNUNET_CONFIGURATION_iterate_sections (cfg, | ||
142 | &print_section_name, | ||
143 | NULL); | ||
115 | ret = 1; | 144 | ret = 1; |
116 | return; | 145 | goto cleanup; |
117 | } | 146 | } |
118 | 147 | ||
119 | if (NULL == value) | 148 | if ( (NULL != section) && (NULL == value) ) |
120 | { | 149 | { |
121 | if (NULL == option) | 150 | if (NULL == option) |
122 | { | 151 | { |
123 | GNUNET_CONFIGURATION_iterate_section_values (cfg, section, | 152 | GNUNET_CONFIGURATION_iterate_section_values (cfg, |
124 | &print_option, NULL); | 153 | section, |
154 | &print_option, | ||
155 | NULL); | ||
125 | } | 156 | } |
126 | else | 157 | else |
127 | { | 158 | { |
128 | if (is_filename) | 159 | if (is_filename) |
129 | { | 160 | { |
130 | if (GNUNET_OK != | 161 | if (GNUNET_OK != |
131 | GNUNET_CONFIGURATION_get_value_filename (cfg, section, option, &value)) | 162 | GNUNET_CONFIGURATION_get_value_filename (cfg, |
163 | section, | ||
164 | option, | ||
165 | &value)) | ||
132 | { | 166 | { |
133 | GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, | 167 | GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, |
134 | section, option); | 168 | section, option); |
135 | ret = 3; | 169 | ret = 3; |
136 | return; | 170 | goto cleanup; |
137 | } | 171 | } |
138 | } | 172 | } |
139 | else | 173 | else |
@@ -144,28 +178,38 @@ run (void *cls, char *const *args, const char *cfgfile, | |||
144 | GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, | 178 | GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, |
145 | section, option); | 179 | section, option); |
146 | ret = 3; | 180 | ret = 3; |
147 | return; | 181 | goto cleanup; |
148 | } | 182 | } |
149 | } | 183 | } |
150 | fprintf (stdout, "%s\n", value); | 184 | fprintf (stdout, "%s\n", value); |
151 | } | 185 | } |
152 | } | 186 | } |
153 | else | 187 | else if (NULL != section) |
154 | { | 188 | { |
155 | if (NULL == option) | 189 | if (NULL == option) |
156 | { | 190 | { |
157 | fprintf (stderr, _("--option argument required to set value\n")); | 191 | fprintf (stderr, _("--option argument required to set value\n")); |
158 | ret = 1; | 192 | ret = 1; |
159 | return; | 193 | goto cleanup; |
160 | } | 194 | } |
161 | out = GNUNET_CONFIGURATION_dup (cfg); | 195 | out = GNUNET_CONFIGURATION_dup (cfg); |
162 | GNUNET_CONFIGURATION_set_value_string (out, section, option, value); | 196 | GNUNET_CONFIGURATION_set_value_string (out, |
197 | section, | ||
198 | option, | ||
199 | value); | ||
200 | } | ||
201 | if ( (NULL != diff) || (NULL != out) ) | ||
202 | { | ||
163 | if (GNUNET_OK != | 203 | if (GNUNET_OK != |
164 | GNUNET_CONFIGURATION_write (out, cfgfile)) | 204 | GNUNET_CONFIGURATION_write ((NULL == out) ? diff : out, |
205 | cfgfile)) | ||
165 | ret = 2; | 206 | ret = 2; |
166 | GNUNET_CONFIGURATION_destroy (out); | ||
167 | return; | ||
168 | } | 207 | } |
208 | if (NULL != out) | ||
209 | GNUNET_CONFIGURATION_destroy (out); | ||
210 | cleanup: | ||
211 | if (NULL != diff) | ||
212 | GNUNET_CONFIGURATION_destroy (diff); | ||
169 | } | 213 | } |
170 | 214 | ||
171 | 215 | ||
@@ -195,6 +239,9 @@ main (int argc, char *const *argv) | |||
195 | { 'S', "list-sections", NULL, | 239 | { 'S', "list-sections", NULL, |
196 | gettext_noop ("print available configuration sections"), | 240 | gettext_noop ("print available configuration sections"), |
197 | 0, &GNUNET_GETOPT_set_one, &list_sections }, | 241 | 0, &GNUNET_GETOPT_set_one, &list_sections }, |
242 | { 'w', "rewrite", NULL, | ||
243 | gettext_noop ("write configuration file that only contains delta to defaults"), | ||
244 | 0, &GNUNET_GETOPT_set_one, &rewrite }, | ||
198 | GNUNET_GETOPT_OPTION_END | 245 | GNUNET_GETOPT_OPTION_END |
199 | }; | 246 | }; |
200 | if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv)) | 247 | if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv)) |