MINOR: config: support default values for environment variables

Sometimes it is really useful to be able to specify a default value for
an optional environment variable, like the ${name-value} construct in
shell. In fact we're really missing this for a number of settings in
reg tests, starting with timeouts.

This commit simply adds support for the common syntax above. Other
common forms like '+' to replace existing variables, or ':-' and ':+'
to act on empty variables, were not implemented at this stage, as they
are less commonly needed.
diff --git a/doc/configuration.txt b/doc/configuration.txt
index 4f306d7..f597a8c 100644
--- a/doc/configuration.txt
+++ b/doc/configuration.txt
@@ -727,13 +727,16 @@
 underscore ("_") but should not start with a digit. If the variable contains a
 list of several values separated by spaces, it can be expanded as individual
 arguments by enclosing the variable with braces and appending the suffix '[*]'
-before the closing brace.
+before the closing brace. It is also possible to specify a default value to
+use when the variable is not set, by appending that value after a dash '-'
+next to the variable name. Note that the default value only replaces non
+existing variables, not empty ones.
 
   Example:
 
       bind "fd@${FD_APP1}"
 
-      log "${LOCAL_SYSLOG}:514" local0 notice   # send to local server
+      log "${LOCAL_SYSLOG-127.0.0.1}:514" local0 notice  # send to local server
 
       user "$HAPROXY_USER"
 
diff --git a/src/tools.c b/src/tools.c
index 8fc6716..5d8483d 100644
--- a/src/tools.c
+++ b/src/tools.c
@@ -5440,13 +5440,27 @@
 			}
 
 			if (brace) {
-				if (*in != '}') {
+				if (*in == '-') {
+					/* default value starts just after the '-' */
+					if (!value)
+						value = in + 1;
+
+					while (*in && *in != '}')
+						in++;
+					if (!*in)
+						goto no_brace;
+					*in = 0; // terminate the default value
+				}
+				else if (*in != '}') {
+				no_brace:
 					/* unmatched brace */
 					err |= PARSE_ERR_BRACE;
 					if (errptr)
 						*errptr = brace;
 					goto leave;
 				}
+
+				/* brace found, skip it */
 				in++;
 				brace = NULL;
 			}