Fix memory leak in sim_parse_args
authorStephane Carrez <stcarrez@nerim.fr>
Sat, 25 Nov 2000 09:16:22 +0000 (09:16 +0000)
committerStephane Carrez <stcarrez@nerim.fr>
Sat, 25 Nov 2000 09:16:22 +0000 (09:16 +0000)
sim/common/ChangeLog
sim/common/sim-options.c

index bc5a33c..831e274 100644 (file)
@@ -1,3 +1,8 @@
+2000-11-24  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
+
+       * 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  <bje@redhat.com>
 
        * cgen-ops.h (SUBBI): New macro.
index 077019c..9ccc51d 100644 (file)
@@ -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.  */