--- old/src/share/vm/services/writeableFlags.cpp 2015-06-16 15:48:08.000000000 -0500 +++ new/src/share/vm/services/writeableFlags.cpp 2015-06-16 15:48:08.000000000 -0500 @@ -28,69 +28,71 @@ #include "runtime/commandLineFlagRangeList.hpp" #include "runtime/java.hpp" #include "runtime/jniHandles.hpp" -#include "runtime/sharedRuntime.hpp" #include "services/writeableFlags.hpp" -#define TEMP_BUF_SIZE 256 +#define TEMP_BUF_SIZE 80 + +static void buffer_concat(char* buffer, const char* src) { + strncat(buffer, src, TEMP_BUF_SIZE - 1 - strlen(buffer)); +} static void print_flag_error_message_bounds(const char* name, char* buffer) { CommandLineFlagRange* range = CommandLineFlagRangeList::find(name); if (range != NULL) { - os::strlcat(buffer, "must have value in range ", TEMP_BUF_SIZE); + buffer_concat(buffer, "must have value in range "); stringStream stream; range->print(&stream); - char* range_string = stream.as_string(); - char range_string_no_whitespaces[TEMP_BUF_SIZE]; - int j = 0; - for (int i=0; i& err_msg) { - if (error != Flag::SUCCESS) { - char buffer[TEMP_BUF_SIZE] = {'\0'}; - if ((error != Flag::MISSING_NAME) && (name != NULL)) { - os::strlcat(buffer, name, TEMP_BUF_SIZE); - os::strlcat(buffer, " error: ", TEMP_BUF_SIZE); - } else { - os::strlcat(buffer, "Error: ", TEMP_BUF_SIZE); - } - switch (error) { - case Flag::MISSING_NAME: - os::strlcat(buffer, "flag name is missing.", TEMP_BUF_SIZE); break; - case Flag::MISSING_VALUE: - os::strlcat(buffer, "parsing the textual form of the value.", TEMP_BUF_SIZE); break; - case Flag::NON_WRITABLE: - os::strlcat(buffer, "flag is not writeable.", TEMP_BUF_SIZE); break; - case Flag::OUT_OF_BOUNDS: - print_flag_error_message_bounds(name, buffer); break; - case Flag::VIOLATES_CONSTRAINT: - os::strlcat(buffer, "value violates its flag's constraint.", TEMP_BUF_SIZE); break; - case Flag::INVALID_FLAG: - os::strlcat(buffer, "there is no flag with the given name.", TEMP_BUF_SIZE); break; - case Flag::ERR_OTHER: - os::strlcat(buffer, "other, unspecified error related to setting the flag.", TEMP_BUF_SIZE); break; - case Flag::SUCCESS: - break; - } - buffer[79] = '\0'; - PRAGMA_DIAG_PUSH - PRAGMA_FORMAT_NONLITERAL_IGNORED_INTERNAL - err_msg.print(buffer); - PRAGMA_DIAG_POP + if (error == Flag::SUCCESS) { + return; + } + + char buffer[TEMP_BUF_SIZE] = {'\0'}; + if ((error != Flag::MISSING_NAME) && (name != NULL)) { + buffer_concat(buffer, name); + buffer_concat(buffer, " error: "); + } else { + buffer_concat(buffer, "Error: "); } + switch (error) { + case Flag::MISSING_NAME: + buffer_concat(buffer, "flag name is missing."); break; + case Flag::MISSING_VALUE: + buffer_concat(buffer, "parsing the textual form of the value."); break; + case Flag::NON_WRITABLE: + buffer_concat(buffer, "flag is not writeable."); break; + case Flag::OUT_OF_BOUNDS: + print_flag_error_message_bounds(name, buffer); break; + case Flag::VIOLATES_CONSTRAINT: + buffer_concat(buffer, "value violates its flag's constraint."); break; + case Flag::INVALID_FLAG: + buffer_concat(buffer, "there is no flag with the given name."); break; + case Flag::ERR_OTHER: + buffer_concat(buffer, "other, unspecified error related to setting the flag."); break; + case Flag::SUCCESS: + break; + } + + PRAGMA_DIAG_PUSH + PRAGMA_FORMAT_NONLITERAL_IGNORED_INTERNAL + err_msg.print(buffer); + PRAGMA_DIAG_POP } // set a boolean global flag @@ -105,7 +107,7 @@ } Flag::Error WriteableFlags::set_bool_flag(const char* name, bool value, Flag::Flags origin, FormatBuffer<80>& err_msg) { - Flag::Error err = CommandLineFlags::boolAtPut((char*)name, &value, origin); + Flag::Error err = CommandLineFlags::boolAtPut(name, &value, origin); print_flag_error_message_if_needed(err, name, err_msg); return err; } @@ -156,7 +158,7 @@ } Flag::Error WriteableFlags::set_intx_flag(const char* name, intx value, Flag::Flags origin, FormatBuffer<80>& err_msg) { - Flag::Error err = CommandLineFlags::intxAtPut((char*)name, &value, origin); + Flag::Error err = CommandLineFlags::intxAtPut(name, &value, origin); print_flag_error_message_if_needed(err, name, err_msg); return err; } @@ -173,7 +175,7 @@ } Flag::Error WriteableFlags::set_uintx_flag(const char* name, uintx value, Flag::Flags origin, FormatBuffer<80>& err_msg) { - Flag::Error err = CommandLineFlags::uintxAtPut((char*)name, &value, origin); + Flag::Error err = CommandLineFlags::uintxAtPut(name, &value, origin); print_flag_error_message_if_needed(err, name, err_msg); return err; } @@ -190,7 +192,7 @@ } Flag::Error WriteableFlags::set_uint64_t_flag(const char* name, uint64_t value, Flag::Flags origin, FormatBuffer<80>& err_msg) { - Flag::Error err = CommandLineFlags::uint64_tAtPut((char*)name, &value, origin); + Flag::Error err = CommandLineFlags::uint64_tAtPut(name, &value, origin); print_flag_error_message_if_needed(err, name, err_msg); return err; } @@ -207,7 +209,7 @@ } Flag::Error WriteableFlags::set_size_t_flag(const char* name, size_t value, Flag::Flags origin, FormatBuffer<80>& err_msg) { - Flag::Error err = CommandLineFlags::size_tAtPut((char*)name, &value, origin); + Flag::Error err = CommandLineFlags::size_tAtPut(name, &value, origin); print_flag_error_message_if_needed(err, name, err_msg); return err; }