Put a prolog at the top of configuration files
Later I'm going to put in there some more information about the format etc.
This commit is contained in:
		@@ -1824,8 +1824,8 @@ read_config_file (struct str_map *config, struct error **e)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static char *
 | 
					static char *
 | 
				
			||||||
write_default_config (const char *filename, const struct config_item *table,
 | 
					write_default_config (const char *filename, const char *prolog,
 | 
				
			||||||
	struct error **e)
 | 
						const struct config_item *table, struct error **e)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct str path, base;
 | 
						struct str path, base;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1861,6 +1861,9 @@ write_default_config (const char *filename, const struct config_item *table,
 | 
				
			|||||||
		goto error;
 | 
							goto error;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (prolog)
 | 
				
			||||||
 | 
							fputs (prolog, fp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	errno = 0;
 | 
						errno = 0;
 | 
				
			||||||
	for (; table->key != NULL; table++)
 | 
						for (; table->key != NULL; table++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										33
									
								
								src/kike.c
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								src/kike.c
									
									
									
									
									
								
							@@ -993,12 +993,30 @@ print_usage (const char *program_name)
 | 
				
			|||||||
		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
 | 
					int
 | 
				
			||||||
main (int argc, char *argv[])
 | 
					main (int argc, char *argv[])
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	const char *invocation_name = argv[0];
 | 
						const char *invocation_name = argv[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct error *e = NULL;
 | 
					 | 
				
			||||||
	static struct option opts[] =
 | 
						static struct option opts[] =
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		{ "debug",             no_argument,       NULL, 'd' },
 | 
							{ "debug",             no_argument,       NULL, 'd' },
 | 
				
			||||||
@@ -1028,18 +1046,8 @@ main (int argc, char *argv[])
 | 
				
			|||||||
			printf (PROGRAM_NAME " " PROGRAM_VERSION "\n");
 | 
								printf (PROGRAM_NAME " " PROGRAM_VERSION "\n");
 | 
				
			||||||
			exit (EXIT_SUCCESS);
 | 
								exit (EXIT_SUCCESS);
 | 
				
			||||||
		case 'w':
 | 
							case 'w':
 | 
				
			||||||
		{
 | 
								call_write_default_config (optarg);
 | 
				
			||||||
			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);
 | 
					 | 
				
			||||||
			exit (EXIT_SUCCESS);
 | 
								exit (EXIT_SUCCESS);
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			print_fatal ("error in options");
 | 
								print_fatal ("error in options");
 | 
				
			||||||
			exit (EXIT_FAILURE);
 | 
								exit (EXIT_FAILURE);
 | 
				
			||||||
@@ -1058,6 +1066,7 @@ main (int argc, char *argv[])
 | 
				
			|||||||
	struct server_context ctx;
 | 
						struct server_context ctx;
 | 
				
			||||||
	server_context_init (&ctx);
 | 
						server_context_init (&ctx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						struct error *e = NULL;
 | 
				
			||||||
	if (!read_config_file (&ctx.config, &e))
 | 
						if (!read_config_file (&ctx.config, &e))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		print_fatal ("error loading configuration: %s", e->message);
 | 
							print_fatal ("error loading configuration: %s", e->message);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1686,6 +1686,25 @@ print_usage (const char *program_name)
 | 
				
			|||||||
		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
 | 
					int
 | 
				
			||||||
main (int argc, char *argv[])
 | 
					main (int argc, char *argv[])
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -1693,7 +1712,6 @@ main (int argc, char *argv[])
 | 
				
			|||||||
	str_vector_init (&g_original_argv);
 | 
						str_vector_init (&g_original_argv);
 | 
				
			||||||
	str_vector_add_vector (&g_original_argv, argv);
 | 
						str_vector_add_vector (&g_original_argv, argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct error *e = NULL;
 | 
					 | 
				
			||||||
	static struct option opts[] =
 | 
						static struct option opts[] =
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		{ "debug",             no_argument,       NULL, 'd' },
 | 
							{ "debug",             no_argument,       NULL, 'd' },
 | 
				
			||||||
@@ -1723,18 +1741,8 @@ main (int argc, char *argv[])
 | 
				
			|||||||
			printf (PROGRAM_NAME " " PROGRAM_VERSION "\n");
 | 
								printf (PROGRAM_NAME " " PROGRAM_VERSION "\n");
 | 
				
			||||||
			exit (EXIT_SUCCESS);
 | 
								exit (EXIT_SUCCESS);
 | 
				
			||||||
		case 'w':
 | 
							case 'w':
 | 
				
			||||||
		{
 | 
								call_write_default_config (optarg);
 | 
				
			||||||
			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);
 | 
					 | 
				
			||||||
			exit (EXIT_SUCCESS);
 | 
								exit (EXIT_SUCCESS);
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			print_fatal ("error in options");
 | 
								print_fatal ("error in options");
 | 
				
			||||||
			exit (EXIT_FAILURE);
 | 
								exit (EXIT_FAILURE);
 | 
				
			||||||
@@ -1753,6 +1761,7 @@ main (int argc, char *argv[])
 | 
				
			|||||||
	struct bot_context ctx;
 | 
						struct bot_context ctx;
 | 
				
			||||||
	bot_context_init (&ctx);
 | 
						bot_context_init (&ctx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						struct error *e = NULL;
 | 
				
			||||||
	if (!read_config_file (&ctx.config, &e))
 | 
						if (!read_config_file (&ctx.config, &e))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		print_fatal ("error loading configuration: %s", e->message);
 | 
							print_fatal ("error loading configuration: %s", e->message);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user