diff options
author | fitzsim <fitzsim@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-04-13 16:37:20 +0000 |
---|---|---|
committer | fitzsim <fitzsim@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-04-13 16:37:20 +0000 |
commit | 7dabe00d53e0c63a186e9f922ea3517502eff07a (patch) | |
tree | 8fcda03160ab247c86db3fb08227c6a610993c65 /libjava/prims.cc | |
parent | baef8e75dd1aa5b49368670395f2c67c112e40f7 (diff) | |
download | gcc-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.cc | 103 |
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' |