Browse Source

fix #562: support OPTIONAL_ARGUMENT

ithewei 1 year ago
parent
commit
0325f2d07f
1 changed files with 5 additions and 2 deletions
  1. 5 2
      base/hmain.c

+ 5 - 2
base/hmain.c

@@ -316,7 +316,7 @@ int parse_opt_long(int argc, char** argv, const option_t* long_options, int size
         if (pOption->arg_type == NO_ARGUMENT) {
         if (pOption->arg_type == NO_ARGUMENT) {
             // -h
             // -h
             value = OPTION_ENABLE;
             value = OPTION_ENABLE;
-        } else if (pOption->arg_type == REQUIRED_ARGUMENT) {
+        } else {
             if (delim) {
             if (delim) {
                 // --port=80
                 // --port=80
                 value = delim+1;
                 value = delim+1;
@@ -327,9 +327,12 @@ int parse_opt_long(int argc, char** argv, const option_t* long_options, int size
                 } else if (argv[i+1] != NULL) {
                 } else if (argv[i+1] != NULL) {
                     // --port 80
                     // --port 80
                     value = argv[++i];
                     value = argv[++i];
-                } else {
+                } else if (pOption->arg_type == REQUIRED_ARGUMENT) {
                     printf("Option '%s' requires parament\n", opt);
                     printf("Option '%s' requires parament\n", opt);
                     return -20;
                     return -20;
+                } else {
+                    // arg_type == OPTIONAL_ARGUMENT
+                    value = OPTION_ENABLE;
                 }
                 }
             }
             }
         }
         }