diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 | 
| commit | 9e6d35490a6542f9c97607f93c2ef8ca8e03cbcc (patch) | |
| tree | dd2a1ddf0476664c2b823409c36cbccd52662ca7 /source/Host/windows/HostInfoWindows.cpp | |
| parent | 3bd2e91faeb9eeec1aae82c64a3253afff551cfd (diff) | |
Notes
Diffstat (limited to 'source/Host/windows/HostInfoWindows.cpp')
| -rw-r--r-- | source/Host/windows/HostInfoWindows.cpp | 118 | 
1 files changed, 118 insertions, 0 deletions
| diff --git a/source/Host/windows/HostInfoWindows.cpp b/source/Host/windows/HostInfoWindows.cpp new file mode 100644 index 0000000000000..6dce71d9172ad --- /dev/null +++ b/source/Host/windows/HostInfoWindows.cpp @@ -0,0 +1,118 @@ +//===-- HostInfoWindows.cpp -------------------------------------*- C++ -*-===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "lldb/Host/windows/windows.h" + +#include <mutex> // std::once + +#include "lldb/Host/windows/HostInfoWindows.h" +#include "llvm/ADT/SmallString.h" +#include "llvm/Support/FileSystem.h" +#include "llvm/Support/raw_ostream.h" +#include "llvm/Support/Path.h" + +using namespace lldb_private; + +FileSpec HostInfoWindows::m_program_filespec; + +size_t +HostInfoWindows::GetPageSize() +{ +    SYSTEM_INFO systemInfo; +    GetNativeSystemInfo(&systemInfo); +    return systemInfo.dwPageSize; +} + +bool +HostInfoWindows::GetOSVersion(uint32_t &major, uint32_t &minor, uint32_t &update) +{ +    OSVERSIONINFOEX info; + +    ZeroMemory(&info, sizeof(OSVERSIONINFOEX)); +    info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); +#pragma warning(push) +#pragma warning(disable : 4996) +    // Starting with Microsoft SDK for Windows 8.1, this function is deprecated in favor of the +    // new Windows Version Helper APIs.  Since we don't specify a minimum SDK version, it's easier +    // to simply disable the warning rather than try to support both APIs. +    if (GetVersionEx((LPOSVERSIONINFO)&info) == 0) +    { +        return false; +    } +#pragma warning(pop) + +    major = info.dwMajorVersion; +    minor = info.dwMinorVersion; +    update = info.wServicePackMajor; + +    return true; +} + +bool +HostInfoWindows::GetOSBuildString(std::string &s) +{ +    s.clear(); +    uint32_t major, minor, update; +    if (!GetOSVersion(major, minor, update)) +        return false; + +    llvm::raw_string_ostream stream(s); +    stream << "Windows NT " << major << "." << minor << "." << update; +    return true; +} + +bool +HostInfoWindows::GetOSKernelDescription(std::string &s) +{ +    return GetOSBuildString(s); +} + +bool +HostInfoWindows::GetHostname(std::string &s) +{ +    char buffer[MAX_COMPUTERNAME_LENGTH + 1]; +    DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1; +    if (!::GetComputerName(buffer, &dwSize)) +        return false; + +    s.assign(buffer, buffer + dwSize); +    return true; +} + +FileSpec +HostInfoWindows::GetProgramFileSpec() +{ +    static std::once_flag g_once_flag; +    std::call_once(g_once_flag,  []() { +        char buffer[PATH_MAX]; +        ::GetModuleFileName(NULL, buffer, sizeof(buffer)); +        m_program_filespec.SetFile(buffer, false); +    }); +    return m_program_filespec; +} + +FileSpec +HostInfoWindows::GetDefaultShell() +{ +    return FileSpec(::getenv("ComSpec"), false); +} + +bool +HostInfoWindows::ComputePythonDirectory(FileSpec &file_spec) +{ +    FileSpec lldb_file_spec; +    if (!GetLLDBPath(lldb::ePathTypeLLDBShlibDir, lldb_file_spec)) +        return false; +    llvm::SmallString<64> path(lldb_file_spec.GetDirectory().AsCString()); +    llvm::sys::path::remove_filename(path); +    llvm::sys::path::append(path, "lib", "site-packages"); +    std::replace(path.begin(), path.end(), '\\', '/'); +    file_spec.GetDirectory().SetString(path.c_str()); +    return true; +} | 
