diff options
Diffstat (limited to 'sim/common/sim-options.c')
-rw-r--r-- | sim/common/sim-options.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/sim/common/sim-options.c b/sim/common/sim-options.c index 077019c..9ccc51d 100644 --- a/sim/common/sim-options.c +++ b/sim/common/sim-options.c @@ -499,6 +499,7 @@ sim_parse_args (sd, argv) const OPTION *opt; OPTION_HANDLER **handlers; sim_cpu **opt_cpu; + SIM_RC result = SIM_RC_OK; /* Count the number of arguments. */ for (argc = 0; argv[argc] != NULL; ++argc) @@ -579,7 +580,8 @@ sim_parse_args (sd, argv) if (opt->shortopt != 0) { sim_io_eprintf (sd, "internal error, short cpu specific option"); - return SIM_RC_FAIL; + result = SIM_RC_FAIL; + break; } if (opt->opt.name != NULL) { @@ -617,13 +619,24 @@ sim_parse_args (sd, argv) break; } if (optc == '?') - return SIM_RC_FAIL; + { + result = SIM_RC_FAIL; + break; + } if ((*handlers[optc]) (sd, opt_cpu[optc], orig_val[optc], optarg, 0/*!is_command*/) == SIM_RC_FAIL) - return SIM_RC_FAIL; + { + result = SIM_RC_FAIL; + break; + } } - return SIM_RC_OK; + zfree (long_options); + zfree (short_options); + zfree (handlers); + zfree (opt_cpu); + zfree (orig_val); + return result; } /* Utility of sim_print_help to print a list of option tables. */ |