[PATCH 07/10] Allow optional arguments in the config file

Kevin Cernekee cernekee at gmail.com
Sun Oct 7 21:03:41 EDT 2012


getopt_long() treats an argument as optional if has_arg == 2.  Extend
this feature to the config file parser as well.

Signed-off-by: Kevin Cernekee <cernekee at gmail.com>
---
 main.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/main.c b/main.c
index 4d5cb0e..0506481 100644
--- a/main.c
+++ b/main.c
@@ -324,7 +324,7 @@ static int config_line_num = 0;
  * 3. It may be freed during normal operation, so we have to use strdup()
  *    even when it's an option from argv[]. (e.g. vpninfo->cert_password).
  */
-#define keep_config_arg() (config_file?strdup(config_arg):config_arg)
+#define keep_config_arg() (config_file && config_arg ? strdup(config_arg) : config_arg)
 
 static int next_option(int argc, char **argv, char **config_arg)
 {
@@ -408,10 +408,12 @@ static int next_option(int argc, char **argv, char **config_arg)
 		fprintf(stderr, _("Option '%s' does not take an argument at line %d\n"),
 			this->name, config_line_num);
 		return '?';
-	} else if (this->has_arg && !*line) {
+	} else if (this->has_arg == 1 && !*line) {
 		fprintf(stderr, _("Option '%s' requires an argument at line %d\n"),
 			this->name, config_line_num);
 		return '?';
+	} else if (this->has_arg == 2 && !*line) {
+		line = NULL;
 	}
 
 	config_line_num++;
-- 
1.7.5.4




More information about the openconnect-devel mailing list