src/share/vm/services/diagnosticArgument.cpp

Print this page
rev 4773 : 8005849: JEP 167: Event-Based JVM Tracing
Reviewed-by: acorn, coleenp, sla
Contributed-by: Karen Kinnear <karen.kinnear@oracle.com>, Bengt Rutisson <bengt.rutisson@oracle.com>, Calvin Cheung <calvin.cheung@oracle.com>, Erik Gahlin <erik.gahlin@oracle.com>, Erik Helin <erik.helin@oracle.com>, Jesper Wilhelmsson <jesper.wilhelmsson@oracle.com>, Keith McGuigan <keith.mcguigan@oracle.com>, Mattias Tobiasson <mattias.tobiasson@oracle.com>, Markus Gronlund <markus.gronlund@oracle.com>, Mikael Auno <mikael.auno@oracle.com>, Nils Eliasson <nils.eliasson@oracle.com>, Nils Loodin <nils.loodin@oracle.com>, Rickard Backman <rickard.backman@oracle.com>, Staffan Larsen <staffan.larsen@oracle.com>, Stefan Karlsson <stefan.karlsson@oracle.com>, Yekaterina Kantserova <yekaterina.kantserova@oracle.com>

*** 22,31 **** --- 22,32 ---- * */ #include "precompiled.hpp" #include "memory/allocation.inline.hpp" + #include "memory/resourceArea.hpp" #include "runtime/thread.hpp" #include "services/diagnosticArgument.hpp" void GenDCmdArgument::read_value(const char* str, size_t len, TRAPS) { /* NOTE:Some argument types doesn't require a value,
*** 84,104 **** } } template <> void DCmdArgument<jlong>::parse_value(const char* str, size_t len, TRAPS) { ! if (str == NULL || sscanf(str, JLONG_FORMAT, &_value) != 1) { ! THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), ! "Integer parsing error in diagnostic command arguments\n"); } } template <> void DCmdArgument<jlong>::init_value(TRAPS) { if (has_default()) { this->parse_value(_default_string, strlen(_default_string), THREAD); if (HAS_PENDING_EXCEPTION) { ! fatal("Default string must be parsable"); } } else { set_value(0); } } --- 85,114 ---- } } template <> void DCmdArgument<jlong>::parse_value(const char* str, size_t len, TRAPS) { ! int scanned = -1; ! if (str == NULL ! || sscanf(str, JLONG_FORMAT"%n", &_value, &scanned) != 1 ! || (size_t)scanned != len) ! { ! ResourceMark rm; ! ! char* buf = NEW_RESOURCE_ARRAY(char, len + 1); ! strncpy(buf, str, len); ! buf[len] = '\0'; ! Exceptions::fthrow(THREAD_AND_LOCATION, vmSymbols::java_lang_IllegalArgumentException(), ! "Integer parsing error in command argument '%s'. Could not parse: %s.", _name, buf); } } template <> void DCmdArgument<jlong>::init_value(TRAPS) { if (has_default()) { this->parse_value(_default_string, strlen(_default_string), THREAD); if (HAS_PENDING_EXCEPTION) { ! fatal("Default string must be parseable"); } } else { set_value(0); } }
*** 114,125 **** if (len == strlen("true") && strncasecmp(str, "true", len) == 0) { set_value(true); } else if (len == strlen("false") && strncasecmp(str, "false", len) == 0) { set_value(false); } else { ! THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), ! "Boolean parsing error in diagnostic command arguments"); } } } template <> void DCmdArgument<bool>::init_value(TRAPS) { --- 124,140 ---- if (len == strlen("true") && strncasecmp(str, "true", len) == 0) { set_value(true); } else if (len == strlen("false") && strncasecmp(str, "false", len) == 0) { set_value(false); } else { ! ResourceMark rm; ! ! char* buf = NEW_RESOURCE_ARRAY(char, len + 1); ! strncpy(buf, str, len); ! buf[len] = '\0'; ! Exceptions::fthrow(THREAD_AND_LOCATION, vmSymbols::java_lang_IllegalArgumentException(), ! "Boolean parsing error in command argument '%s'. Could not parse: %s.", _name, buf); } } } template <> void DCmdArgument<bool>::init_value(TRAPS) {
*** 166,176 **** template <> void DCmdArgument<NanoTimeArgument>::parse_value(const char* str, size_t len, TRAPS) { if (str == NULL) { THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), ! "Integer parsing error nanotime value: syntax error"); } int argc = sscanf(str, JLONG_FORMAT, &_value._time); if (argc != 1) { THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), --- 181,191 ---- template <> void DCmdArgument<NanoTimeArgument>::parse_value(const char* str, size_t len, TRAPS) { if (str == NULL) { THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), ! "Integer parsing error nanotime value: syntax error, value is null"); } int argc = sscanf(str, JLONG_FORMAT, &_value._time); if (argc != 1) { THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),