winpr/utils: allow COMMAND_LINE_VALUE_{OPTIONAL,BOOL} to coexist.
authorSimon Tatham <anakin@pobox.com>
Wed, 18 Mar 2020 21:00:06 +0000 (21:00 +0000)
committerakallabeth <akallabeth@users.noreply.github.com>
Thu, 25 Feb 2021 08:51:41 +0000 (09:51 +0100)
Now you can give an option the combination of flags
COMMAND_LINE_VALUE_OPTIONAL and COMMAND_LINE_VALUE_BOOL. If you do,
then all three of the syntaxes +foo, -foo and /foo:value are allowed
at once, and the receiving code can tell the difference because the
Value field is set to BoolValueTrue, BoolValueFalse or a valid char
pointer.

(cherry picked from commit 22c6b375d4ae9bf9dcac74d3360d0042673f1353)

client/X11/generate_argument_docbook.c
winpr/libwinpr/utils/cmdline.c

index 78de2f9..4fd07b8 100644 (file)
@@ -244,7 +244,8 @@ int main(int argc, char* argv[])
                        if (text)
                                fprintf(fp, "%s", text);
 
-                       if (arg->Flags == COMMAND_LINE_VALUE_BOOL)
+                       if (arg->Flags & COMMAND_LINE_VALUE_BOOL &&
+                           (!arg->Default || arg->Default == BoolValueTrue))
                                fprintf(fp, " (default:%s)", arg->Default ? "on" : "off");
                        else if (arg->Default)
                        {
index 548d507..8b9744d 100644 (file)
@@ -312,7 +312,8 @@ int CommandLineParseArgumentsA(int argc, LPSTR* argv, COMMAND_LINE_ARGUMENT_A* o
 
                                if (value)
                                {
-                                       if (options[j].Flags & (COMMAND_LINE_VALUE_FLAG | COMMAND_LINE_VALUE_BOOL))
+                                       if (!(options[j].Flags &
+                                             (COMMAND_LINE_VALUE_OPTIONAL | COMMAND_LINE_VALUE_REQUIRED)))
                                        {
                                                log_error(flags, "Failed at index %d [%s]: Unexpected value", i, argv[i]);
                                                return COMMAND_LINE_ERROR_UNEXPECTED_VALUE;