From a4644ed6ab32c098b755bdac03498634b2794409 Mon Sep 17 00:00:00 2001
From: Ondrej Zajicek <santiago@crfreenet.org>
Date: Thu, 19 Nov 2009 11:44:17 +0100
Subject: [PATCH] Implement option to exit after config file parsing.

---
 doc/bird.sgml      |  5 ++++-
 sysdep/unix/main.c | 10 +++++++++-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/doc/bird.sgml b/doc/bird.sgml
index db9a74743..4b72ac617 100644
--- a/doc/bird.sgml
+++ b/doc/bird.sgml
@@ -129,7 +129,10 @@ options. The most important ones are:
 	enable debug messages and run bird in foreground.
 
 	<tag>-D <m/filename of debug log/</tag>
-	log debugging information to given file instead of stderr
+	log debugging information to given file instead of stderr.
+
+	<tag>-p</tag>
+	just parse the config file and exit.
 
 	<tag>-s <m/name of communication socket/</tag>
 	use given filename for a  socket for communications with the client, default is <it/prefix/<file>/var/run/bird.ctl</file>.
diff --git a/sysdep/unix/main.c b/sysdep/unix/main.c
index 5e4aa97a7..533754ea3 100644
--- a/sysdep/unix/main.c
+++ b/sysdep/unix/main.c
@@ -365,7 +365,7 @@ signal_init(void)
  *	Parsing of command-line arguments
  */
 
-static char *opt_list = "c:dD:s:";
+static char *opt_list = "c:dD:ps:";
 
 static void
 usage(void)
@@ -374,6 +374,8 @@ usage(void)
   exit(1);
 }
 
+int parse_and_exit;
+
 static void
 parse_args(int argc, char **argv)
 {
@@ -402,6 +404,9 @@ parse_args(int argc, char **argv)
 	log_init_debug(optarg);
 	debug_flag |= 2;
 	break;
+      case 'p':
+	parse_and_exit = 1;
+	break;
       case 's':
 	path_control_socket = optarg;
 	break;
@@ -444,6 +449,9 @@ main(int argc, char **argv)
 
   read_config();
 
+  if (parse_and_exit)
+    exit(0);
+
   if (!debug_flag)
     {
       pid_t pid = fork();
-- 
GitLab