From 5492dc4597b6d41f2dcdb1518a02ad40b2c3c3e9 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 14 Oct 2014 14:35:52 +0200 Subject: [PATCH] CDB: Parse version number from output. Change-Id: I7b0624c6f1caf6a6a73e9956c91706a74e8ef0a0 Reviewed-by: Christian Stenger --- src/libs/qtcreatorcdbext/extensioncontext.cpp | 35 +++++++++++++++++++ src/libs/qtcreatorcdbext/extensioncontext.h | 11 ++++++ 2 files changed, 46 insertions(+) diff --git a/src/libs/qtcreatorcdbext/extensioncontext.cpp b/src/libs/qtcreatorcdbext/extensioncontext.cpp index 35a27f78bb7..7f0a5b3181b 100644 --- a/src/libs/qtcreatorcdbext/extensioncontext.cpp +++ b/src/libs/qtcreatorcdbext/extensioncontext.cpp @@ -265,6 +265,41 @@ ULONG64 ExtensionContext::jsExecutionContext(ExtensionCommandContext &exc, return result; } +ExtensionContext::CdbVersion ExtensionContext::cdbVersion() +{ + static CdbVersion version; + static bool first = true; + if (!first) + return version; + first = false; + startRecordingOutput(); + const HRESULT hr = m_control->OutputVersionInformation(DEBUG_OUTCTL_ALL_CLIENTS); + if (FAILED(hr)) { + stopRecordingOutput(); + return version; + } + const std::wstring &output = stopRecordingOutput(); + const std::wstring &versionOutput = L"Microsoft (R) Windows Debugger Version"; + auto majorPos = output.find(versionOutput); + if (majorPos == std::wstring::npos) + return version; + majorPos += versionOutput.length(); + std::wstring::size_type minorPos; + std::wstring::size_type patchPos; + try { + version.major = std::stoi(output.substr(majorPos), &minorPos); + minorPos += majorPos + 1; + version.minor = std::stoi(output.substr(minorPos), &patchPos); + patchPos += minorPos + 1; + version.patch = std::stoi(output.substr(patchPos)); + } + catch (...) + { + version.clear(); + } + return version; +} + // Complete stop parameters with common parameters and report static inline ExtensionContext::StopReasonMap completeStopReasons(CIDebugClient *client, ExtensionContext::StopReasonMap stopReasons, ULONG ex) diff --git a/src/libs/qtcreatorcdbext/extensioncontext.h b/src/libs/qtcreatorcdbext/extensioncontext.h index 9d784f5517b..d2c39e3d618 100644 --- a/src/libs/qtcreatorcdbext/extensioncontext.h +++ b/src/libs/qtcreatorcdbext/extensioncontext.h @@ -129,6 +129,17 @@ public: bool stateNotification() const { return m_stateNotification; } void setStateNotification(bool s) { m_stateNotification = s; } + struct CdbVersion + { + CdbVersion() : major(0), minor(0), patch(0) {} + int major; + int minor; + int patch; + void clear () { major = minor = patch = 0; } + }; + + CdbVersion cdbVersion(); + private: bool isInitialized() const;