--- old/src/share/vm/compiler/compilerOracle.cpp 2014-02-25 12:30:28.800103000 +0100 +++ new/src/share/vm/compiler/compilerOracle.cpp 2014-02-25 12:30:28.656167000 +0100 @@ -387,12 +387,6 @@ // cmd java/lang/String[. ]foo // -static const char* patterns[] = { - "%*[ \t]%255" RANGEDOT " " "%255" RANGE0 "%n", - "%*[ \t]%255" RANGEDOT "::" "%255" RANGE0 "%n", - "%*[ \t]%255" RANGESLASH "%*[ .]" "%255" RANGE0 "%n", -}; - static MethodMatcher::Mode check_mode(char name[], const char*& error_msg) { int match = MethodMatcher::Exact; while (name[0] == '*') { @@ -421,13 +415,18 @@ int* bytes_read, const char*& error_msg) { *bytes_read = 0; error_msg = NULL; - for (uint i = 0; i < ARRAY_SIZE(patterns); i++) { - if (2 == sscanf(line, patterns[i], class_name, method_name, bytes_read)) { - *c_mode = check_mode(class_name, error_msg); - *m_mode = check_mode(method_name, error_msg); - return *c_mode != MethodMatcher::Unknown && *m_mode != MethodMatcher::Unknown; + int scanned = sscanf(line, "%*[ \t]%255" RANGEDOT " " "%255" RANGE0 "%n", class_name, method_name, bytes_read); + if (scanned != 2) { + scanned = sscanf(line, "%*[ \t]%255" RANGEDOT "::" "%255" RANGE0 "%n", class_name, method_name, bytes_read); + if (scanned != 2) { + scanned = sscanf(line, "%*[ \t]%255" RANGESLASH "%*[ .]" "%255" RANGE0 "%n", class_name, method_name, bytes_read); } } + if (scanned == 2) { + *c_mode = check_mode(class_name, error_msg); + *m_mode = check_mode(method_name, error_msg); + return *c_mode != MethodMatcher::Unknown && *m_mode != MethodMatcher::Unknown; + } return false; }