diff packages/redboot/current/src/main.c @ 117:bd1a71e3e476 ecos-sw-2000-08-25

Merge from eCos master repository on 2000-08-25-19:22:58-BST
author jlarmour
date Fri, 25 Aug 2000 19:17:22 +0000
parents 6ed91473a1cd
children 518f42066aba
line wrap: on
line diff
--- a/packages/redboot/current/src/main.c
+++ b/packages/redboot/current/src/main.c
@@ -303,9 +303,18 @@ scan_opts(int argc, char *argv[], int fi
     }
     opt = opts;
     for (j = 0;  j < num_opts;  j++, opt++) {
-        *opt->arg_set = false;
+        if (opt->arg_set) {
+            *opt->arg_set = false;
+        }
         if (!opt->takes_arg) {
-            *(int *)opt->arg = 0;
+            switch (opt->arg_type) {
+            case OPTION_ARG_TYPE_NUM:
+                *(int *)opt->arg = 0;
+                break;
+            case OPTION_ARG_TYPE_FLG:
+                *(bool *)opt->arg = false;
+                break;
+            }
         }
     }
     for (i = first;  i < argc;  i++) {
@@ -315,7 +324,7 @@ scan_opts(int argc, char *argv[], int fi
             opt = opts;
             for (j = 0;  j < num_opts;  j++, opt++) {
                 if (c == opt->flag) {
-                    if (*opt->arg_set) {
+                    if (opt->arg_set && *opt->arg_set) {
                         printf("%s alread set\n", opt->name);
                         ret = false;
                     }
@@ -339,7 +348,14 @@ scan_opts(int argc, char *argv[], int fi
                         }
                         *opt->arg_set = true;
                     } else {
-                        *(int *)opt->arg = *(int *)opt->arg + 1;
+                        switch (opt->arg_type) {
+                        case OPTION_ARG_TYPE_NUM:
+                            *(int *)opt->arg = *(int *)opt->arg + 1;
+                            break;
+                        case OPTION_ARG_TYPE_FLG:
+                            *(bool *)opt->arg = true;
+                            break;
+                        }
                     }
                     flag_ok = true;
                     break;