summaryrefslogtreecommitdiff
path: root/libjava/prims.cc
diff options
context:
space:
mode:
authorfitzsim <fitzsim@138bc75d-0d04-0410-961f-82ee72b054a4>2005-04-13 16:37:20 +0000
committerfitzsim <fitzsim@138bc75d-0d04-0410-961f-82ee72b054a4>2005-04-13 16:37:20 +0000
commit7dabe00d53e0c63a186e9f922ea3517502eff07a (patch)
tree8fcda03160ab247c86db3fb08227c6a610993c65 /libjava/prims.cc
parentbaef8e75dd1aa5b49368670395f2c67c112e40f7 (diff)
downloadgcc-7dabe00d53e0c63a186e9f922ea3517502eff07a.tar.gz
2005-04-07 Thomas Fitzsimmons <fitzsim@redhat.com>
* prims.cc (parse_verbose_args): Fix verbose argument parsing. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@98097 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/prims.cc')
-rw-r--r--libjava/prims.cc103
1 files changed, 53 insertions, 50 deletions
diff --git a/libjava/prims.cc b/libjava/prims.cc
index fadc466bc0e..b62514581dd 100644
--- a/libjava/prims.cc
+++ b/libjava/prims.cc
@@ -1049,7 +1049,7 @@ static jint
parse_verbose_args (char* option_string,
bool ignore_unrecognized)
{
- size_t len = sizeof ("-verbose");
+ size_t len = sizeof ("-verbose") - 1;
if (strlen (option_string) < len)
return -1;
@@ -1058,69 +1058,72 @@ parse_verbose_args (char* option_string,
&& option_string[len + 1] != '\0')
{
char* verbose_args = option_string + len + 1;
- size_t last = 0;
do
{
if (! strncmp (verbose_args,
- "gc", (last = sizeof ("gc")) - 1)
- && (verbose_args[last] == '\0'
- || verbose_args[last] == ','))
- {
- // FIXME: we should add functions to boehm-gc that
- // toggle GC_print_stats, GC_PRINT_ADDRESS_MAP and
- // GC_print_back_height.
-
- }
+ "gc", sizeof ("gc") - 1))
+ {
+ if (verbose_args[sizeof ("gc") - 1] == '\0'
+ || verbose_args[sizeof ("gc") - 1] == ',')
+ {
+ // FIXME: we should add functions to boehm-gc that
+ // toggle GC_print_stats, GC_PRINT_ADDRESS_MAP and
+ // 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,
"class",
- (last = sizeof ("class")) - 1)
- && (verbose_args[last] == '\0'
- || verbose_args[last] == ','))
- {
- gcj::verbose_class_flag = true;
- }
+ sizeof ("class") - 1))
+ {
+ if (verbose_args[sizeof ("class") - 1] == '\0'
+ || verbose_args[sizeof ("class") - 1] == ',')
+ {
+ gcj::verbose_class_flag = true;
+ verbose_args += sizeof ("class") - 1;
+ }
+ else
+ goto verbose_arg_err;
+ }
else if (! strncmp (verbose_args, "jni",
- (last = sizeof ("jni")) - 1)
- && (verbose_args[last] == '\0'
- || verbose_args[last] == ','))
- {
- // FIXME: enable JNI messages.
- }
+ sizeof ("jni") - 1))
+ {
+ if (verbose_args[sizeof ("jni") - 1] == '\0'
+ || verbose_args[sizeof ("jni") - 1] == ',')
+ {
+ // FIXME: enable JNI messages.
+ verbose_args += sizeof ("jni") - 1;
+ }
+ else
+ goto verbose_arg_err;
+ }
else if (ignore_unrecognized
&& verbose_args[0] == 'X')
{
// ignore unrecognized non-standard verbose option
- last = 0;
- while (verbose_args[last] != '\0'
- && verbose_args[last++] != ',');
+ while (verbose_args[0] != '\0'
+ && verbose_args[0] != ',')
+ verbose_args++;
}
+ else if (verbose_args[0] == ',')
+ {
+ verbose_args++;
+ }
+ else
+ goto verbose_arg_err;
- 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;
- last = 0;
- }
- }
- // here verbose_args[last] is either '\0' or
- // the first character in the next verbose
- // argument.
- }
- else
- // partial option
- return -1;
-
- // verbose_args[last] will be '\0' here if we're
- // done.
+ if (verbose_args[0] == ',')
+ verbose_args++;
}
- while (verbose_args[last] != '\0');
+ while (verbose_args[0] != '\0');
}
else if (option_string[len] == 'g'
&& option_string[len + 1] == 'c'