From 586ccd4e874496014d82012f478c516cc002b8ae Mon Sep 17 00:00:00 2001 From: Přemysl Janouch Date: Sun, 13 Jul 2014 23:50:44 +0200 Subject: Put a prolog at the top of configuration files Later I'm going to put in there some more information about the format etc. --- src/common.c | 7 +++++-- src/kike.c | 33 +++++++++++++++++++++------------ src/zyklonb.c | 33 +++++++++++++++++++++------------ 3 files changed, 47 insertions(+), 26 deletions(-) diff --git a/src/common.c b/src/common.c index f35493f..d905929 100644 --- a/src/common.c +++ b/src/common.c @@ -1824,8 +1824,8 @@ read_config_file (struct str_map *config, struct error **e) } static char * -write_default_config (const char *filename, const struct config_item *table, - struct error **e) +write_default_config (const char *filename, const char *prolog, + const struct config_item *table, struct error **e) { struct str path, base; @@ -1861,6 +1861,9 @@ write_default_config (const char *filename, const struct config_item *table, goto error; } + if (prolog) + fputs (prolog, fp); + errno = 0; for (; table->key != NULL; table++) { diff --git a/src/kike.c b/src/kike.c index faea7b9..38e99ef 100644 --- a/src/kike.c +++ b/src/kike.c @@ -993,12 +993,30 @@ print_usage (const char *program_name) program_name); } +static void +call_write_default_config (const char *hint) +{ + static const char *prolog = + "# " PROGRAM_NAME " " PROGRAM_VERSION " configuration file\n" + "\n"; + + struct error *e = NULL; + char *filename = write_default_config (hint, prolog, g_config_table, &e); + if (!filename) + { + print_fatal ("%s", e->message); + error_free (e); + exit (EXIT_FAILURE); + } + print_status ("configuration written to `%s'", filename); + free (filename); +} + int main (int argc, char *argv[]) { const char *invocation_name = argv[0]; - struct error *e = NULL; static struct option opts[] = { { "debug", no_argument, NULL, 'd' }, @@ -1028,18 +1046,8 @@ main (int argc, char *argv[]) printf (PROGRAM_NAME " " PROGRAM_VERSION "\n"); exit (EXIT_SUCCESS); case 'w': - { - char *filename = write_default_config (optarg, g_config_table, &e); - if (!filename) - { - print_fatal ("%s", e->message); - error_free (e); - exit (EXIT_FAILURE); - } - print_status ("configuration written to `%s'", filename); - free (filename); + call_write_default_config (optarg); exit (EXIT_SUCCESS); - } default: print_fatal ("error in options"); exit (EXIT_FAILURE); @@ -1058,6 +1066,7 @@ main (int argc, char *argv[]) struct server_context ctx; server_context_init (&ctx); + struct error *e = NULL; if (!read_config_file (&ctx.config, &e)) { print_fatal ("error loading configuration: %s", e->message); diff --git a/src/zyklonb.c b/src/zyklonb.c index 3d8d388..1c7f6ae 100644 --- a/src/zyklonb.c +++ b/src/zyklonb.c @@ -1686,6 +1686,25 @@ print_usage (const char *program_name) program_name); } +static void +call_write_default_config (const char *hint) +{ + static const char *prolog = + "# " PROGRAM_NAME " " PROGRAM_VERSION " configuration file\n" + "\n"; + + struct error *e = NULL; + char *filename = write_default_config (hint, prolog, g_config_table, &e); + if (!filename) + { + print_fatal ("%s", e->message); + error_free (e); + exit (EXIT_FAILURE); + } + print_status ("configuration written to `%s'", filename); + free (filename); +} + int main (int argc, char *argv[]) { @@ -1693,7 +1712,6 @@ main (int argc, char *argv[]) str_vector_init (&g_original_argv); str_vector_add_vector (&g_original_argv, argv); - struct error *e = NULL; static struct option opts[] = { { "debug", no_argument, NULL, 'd' }, @@ -1723,18 +1741,8 @@ main (int argc, char *argv[]) printf (PROGRAM_NAME " " PROGRAM_VERSION "\n"); exit (EXIT_SUCCESS); case 'w': - { - char *filename = write_default_config (optarg, g_config_table, &e); - if (!filename) - { - print_fatal ("%s", e->message); - error_free (e); - exit (EXIT_FAILURE); - } - print_status ("configuration written to `%s'", filename); - free (filename); + call_write_default_config (optarg); exit (EXIT_SUCCESS); - } default: print_fatal ("error in options"); exit (EXIT_FAILURE); @@ -1753,6 +1761,7 @@ main (int argc, char *argv[]) struct bot_context ctx; bot_context_init (&ctx); + struct error *e = NULL; if (!read_config_file (&ctx.config, &e)) { print_fatal ("error loading configuration: %s", e->message); -- cgit v1.2.3-70-g09d2