From 7c070881e4a395f2e803aef0254508ee7a9dda99 Mon Sep 17 00:00:00 2001 From: Stephane Carrez Date: Sat, 25 Nov 2000 09:16:22 +0000 Subject: [PATCH] Fix memory leak in sim_parse_args --- sim/common/ChangeLog | 5 +++++ sim/common/sim-options.c | 21 +++++++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog index bc5a33c..831e274 100644 --- a/sim/common/ChangeLog +++ b/sim/common/ChangeLog @@ -1,3 +1,8 @@ +2000-11-24 Stephane Carrez + + * sim-options.c (sim_parse_args): Free the memory used for + long_options, short_options, handlers, opt_cpu, orig_val. + 2000-11-20 Ben Elliston * cgen-ops.h (SUBBI): New macro. 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. */ -- 2.7.4