Commit 23a8ae8d by Thomas Fitzsimmons Committed by Thomas Fitzsimmons

prims.cc (parse_verbose_args): Fix verbose argument parsing.

2005-04-07  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* prims.cc (parse_verbose_args): Fix verbose argument parsing.

From-SVN: r98097
parent 4a36a3f1
2005-04-07 Thomas Fitzsimmons <fitzsim@redhat.com>
* prims.cc (parse_verbose_args): Fix verbose argument parsing.
2005-04-12 Mike Stump <mrs@apple.com> 2005-04-12 Mike Stump <mrs@apple.com>
* configure: Regenerate. * configure: Regenerate.
......
...@@ -1049,7 +1049,7 @@ static jint ...@@ -1049,7 +1049,7 @@ static jint
parse_verbose_args (char* option_string, parse_verbose_args (char* option_string,
bool ignore_unrecognized) bool ignore_unrecognized)
{ {
size_t len = sizeof ("-verbose"); size_t len = sizeof ("-verbose") - 1;
if (strlen (option_string) < len) if (strlen (option_string) < len)
return -1; return -1;
...@@ -1058,69 +1058,72 @@ parse_verbose_args (char* option_string, ...@@ -1058,69 +1058,72 @@ parse_verbose_args (char* option_string,
&& option_string[len + 1] != '\0') && option_string[len + 1] != '\0')
{ {
char* verbose_args = option_string + len + 1; char* verbose_args = option_string + len + 1;
size_t last = 0;
do do
{ {
if (! strncmp (verbose_args, if (! strncmp (verbose_args,
"gc", (last = sizeof ("gc")) - 1) "gc", sizeof ("gc") - 1))
&& (verbose_args[last] == '\0' {
|| verbose_args[last] == ',')) if (verbose_args[sizeof ("gc") - 1] == '\0'
|| verbose_args[sizeof ("gc") - 1] == ',')
{ {
// FIXME: we should add functions to boehm-gc that // FIXME: we should add functions to boehm-gc that
// toggle GC_print_stats, GC_PRINT_ADDRESS_MAP and // toggle GC_print_stats, GC_PRINT_ADDRESS_MAP and
// GC_print_back_height. // GC_print_back_height.
verbose_args += sizeof ("gc") - 1;
}
else
{
verbose_arg_err:
fprintf (stderr, "libgcj: unknown verbose option: %s\n",
option_string);
return -1;
}
} }
else if (! strncmp (verbose_args, else if (! strncmp (verbose_args,
"class", "class",
(last = sizeof ("class")) - 1) sizeof ("class") - 1))
&& (verbose_args[last] == '\0' {
|| verbose_args[last] == ',')) if (verbose_args[sizeof ("class") - 1] == '\0'
|| verbose_args[sizeof ("class") - 1] == ',')
{ {
gcj::verbose_class_flag = true; gcj::verbose_class_flag = true;
verbose_args += sizeof ("class") - 1;
}
else
goto verbose_arg_err;
} }
else if (! strncmp (verbose_args, "jni", else if (! strncmp (verbose_args, "jni",
(last = sizeof ("jni")) - 1) sizeof ("jni") - 1))
&& (verbose_args[last] == '\0' {
|| verbose_args[last] == ',')) if (verbose_args[sizeof ("jni") - 1] == '\0'
|| verbose_args[sizeof ("jni") - 1] == ',')
{ {
// FIXME: enable JNI messages. // FIXME: enable JNI messages.
verbose_args += sizeof ("jni") - 1;
}
else
goto verbose_arg_err;
} }
else if (ignore_unrecognized else if (ignore_unrecognized
&& verbose_args[0] == 'X') && verbose_args[0] == 'X')
{ {
// ignore unrecognized non-standard verbose option // ignore unrecognized non-standard verbose option
last = 0; while (verbose_args[0] != '\0'
while (verbose_args[last] != '\0' && verbose_args[0] != ',')
&& verbose_args[last++] != ','); verbose_args++;
} }
else if (verbose_args[0] == ',')
if (strlen (verbose_args) >= last)
{
if (verbose_args[last] == ',')
{
if (verbose_args[last + 1] == '\0')
// trailing comma
return -1;
else
{ {
verbose_args = verbose_args + last + 1; verbose_args++;
last = 0;
}
}
// here verbose_args[last] is either '\0' or
// the first character in the next verbose
// argument.
} }
else else
// partial option goto verbose_arg_err;
return -1;
// verbose_args[last] will be '\0' here if we're if (verbose_args[0] == ',')
// done. verbose_args++;
} }
while (verbose_args[last] != '\0'); while (verbose_args[0] != '\0');
} }
else if (option_string[len] == 'g' else if (option_string[len] == 'g'
&& option_string[len + 1] == 'c' && option_string[len + 1] == 'c'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment