From f05ad8ee7170e06663d5231b7f8d6ed8b62bb10f Mon Sep 17 00:00:00 2001 From: Deanna Garcia Date: Wed, 10 Aug 2022 20:37:27 +0000 Subject: [PATCH 1/2] Use protoc version for --version --- .../protobuf/compiler/command_line_interface.cc | 2 +- src/google/protobuf/stubs/common.cc | 12 ++++++++++-- src/google/protobuf/stubs/common.h | 7 ++++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/google/protobuf/compiler/command_line_interface.cc b/src/google/protobuf/compiler/command_line_interface.cc index f5cc9a91737f5..652ce04495853 100644 --- a/src/google/protobuf/compiler/command_line_interface.cc +++ b/src/google/protobuf/compiler/command_line_interface.cc @@ -1844,7 +1844,7 @@ CommandLineInterface::InterpretArgument(const std::string& name, if (!version_info_.empty()) { std::cout << version_info_ << std::endl; } - std::cout << "libprotoc " << internal::VersionString(PROTOBUF_VERSION) + std::cout << "libprotoc " << internal::ProtocVersionString(PROTOBUF_VERSION) << PROTOBUF_VERSION_SUFFIX << std::endl; return PARSE_ARGUMENT_DONE_AND_EXIT; // Exit without running compiler. diff --git a/src/google/protobuf/stubs/common.cc b/src/google/protobuf/stubs/common.cc index f1a815022d4d5..5e6ce708288c8 100644 --- a/src/google/protobuf/stubs/common.cc +++ b/src/google/protobuf/stubs/common.cc @@ -92,7 +92,7 @@ void VerifyVersion(int headerVersion, } } -std::string VersionString(int version) { +std::string VersionString(int version, bool cppMajor) { int major = version / 1000000; int minor = (version / 1000) % 1000; int micro = version % 1000; @@ -100,7 +100,11 @@ std::string VersionString(int version) { // 128 bytes should always be enough, but we use snprintf() anyway to be // safe. char buffer[128]; - snprintf(buffer, sizeof(buffer), "%d.%d.%d", major, minor, micro); + if (cppMajor) { + snprintf(buffer, sizeof(buffer), "%d.%d.%d", major, minor, micro); + } else { + snprintf(buffer, sizeof(buffer), "%d.%d", minor, micro); + } // Guard against broken MSVC snprintf(). buffer[sizeof(buffer)-1] = '\0'; @@ -108,6 +112,10 @@ std::string VersionString(int version) { return buffer; } +std::string ProtocVersionString(int version) { + return VersionString(version, false); +} + } // namespace internal // =================================================================== diff --git a/src/google/protobuf/stubs/common.h b/src/google/protobuf/stubs/common.h index 427df67d4f1a9..2d6bcf86158cf 100644 --- a/src/google/protobuf/stubs/common.h +++ b/src/google/protobuf/stubs/common.h @@ -106,7 +106,12 @@ void PROTOBUF_EXPORT VerifyVersion(int headerVersion, int minLibraryVersion, const char* filename); // Converts a numeric version number to a string. -std::string PROTOBUF_EXPORT VersionString(int version); +// If cppMajor is true the string will have the C++ major version, otherwise +// the string will be the protoc version. +std::string PROTOBUF_EXPORT VersionString(int version, bool cppMajor = true); + +// Prints the protoc compiler version (no major version) +std::string PROTOBUF_EXPORT ProtocVersionString(int version); } // namespace internal From b8712d1a55673380e3960fa5212952eeac05cf5d Mon Sep 17 00:00:00 2001 From: Deanna Garcia Date: Wed, 10 Aug 2022 23:41:45 +0000 Subject: [PATCH 2/2] Update to have two distinct methods --- src/google/protobuf/stubs/common.cc | 22 +++++++++++++++------- src/google/protobuf/stubs/common.h | 4 +--- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/google/protobuf/stubs/common.cc b/src/google/protobuf/stubs/common.cc index 5e6ce708288c8..3fa3d04c759ac 100644 --- a/src/google/protobuf/stubs/common.cc +++ b/src/google/protobuf/stubs/common.cc @@ -92,7 +92,7 @@ void VerifyVersion(int headerVersion, } } -std::string VersionString(int version, bool cppMajor) { +std::string VersionString(int version) { int major = version / 1000000; int minor = (version / 1000) % 1000; int micro = version % 1000; @@ -100,11 +100,7 @@ std::string VersionString(int version, bool cppMajor) { // 128 bytes should always be enough, but we use snprintf() anyway to be // safe. char buffer[128]; - if (cppMajor) { - snprintf(buffer, sizeof(buffer), "%d.%d.%d", major, minor, micro); - } else { - snprintf(buffer, sizeof(buffer), "%d.%d", minor, micro); - } + snprintf(buffer, sizeof(buffer), "%d.%d.%d", major, minor, micro); // Guard against broken MSVC snprintf(). buffer[sizeof(buffer)-1] = '\0'; @@ -113,7 +109,19 @@ std::string VersionString(int version, bool cppMajor) { } std::string ProtocVersionString(int version) { - return VersionString(version, false); + int minor = (version / 1000) % 1000; + int micro = version % 1000; + + // 128 bytes should always be enough, but we use snprintf() anyway to be + // safe. + char buffer[128]; + snprintf(buffer, sizeof(buffer), "%d.%d", minor, micro); + + // Guard against broken MSVC snprintf(). + buffer[sizeof(buffer)-1] = '\0'; + + return buffer; + } } // namespace internal diff --git a/src/google/protobuf/stubs/common.h b/src/google/protobuf/stubs/common.h index 2d6bcf86158cf..64787684bbf88 100644 --- a/src/google/protobuf/stubs/common.h +++ b/src/google/protobuf/stubs/common.h @@ -106,9 +106,7 @@ void PROTOBUF_EXPORT VerifyVersion(int headerVersion, int minLibraryVersion, const char* filename); // Converts a numeric version number to a string. -// If cppMajor is true the string will have the C++ major version, otherwise -// the string will be the protoc version. -std::string PROTOBUF_EXPORT VersionString(int version, bool cppMajor = true); +std::string PROTOBUF_EXPORT VersionString(int version); // Prints the protoc compiler version (no major version) std::string PROTOBUF_EXPORT ProtocVersionString(int version);