From 6dd7902d6f148a4ac78e5478edb3a2ca8624f74c Mon Sep 17 00:00:00 2001 From: gcontini <1121667+gcontini@users.noreply.github.com> Date: 周日, 15 3月 2020 16:07:14 +0800 Subject: [PATCH] cpu brand --- src/library/os/windows/execution_environment.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 49 insertions(+), 2 deletions(-) diff --git a/src/library/os/windows/execution_environment.cpp b/src/library/os/windows/execution_environment.cpp index 03c789e..3e65bc8 100644 --- a/src/library/os/windows/execution_environment.cpp +++ b/src/library/os/windows/execution_environment.cpp @@ -4,6 +4,7 @@ * Created on: Dec 15, 2019 * Author: GC */ +#include <windows.h> #include <sys/stat.h> #include <fstream> #include <iostream> @@ -31,8 +32,54 @@ } } -//TODO -bool ExecutionEnvironment::is_docker() const { return false; } +#define MAX_UNITS 20 +int wine_container() { +DWORD fileMaxLen; +size_t ndrives = 0; +DWORD fileFlags; +char volName[MAX_PATH], fileSysName[MAX_PATH]; +DWORD volSerial = 0; +const DWORD dwSize = MAX_PATH; +char szLogicalDrives[MAX_PATH] = {0}; + +int result = 0; +const DWORD dwResult = GetLogicalDriveStrings(dwSize, szLogicalDrives); + +if (dwResult > 0 && dwResult <= MAX_PATH) { + char* szSingleDrive = szLogicalDrives; + while (*szSingleDrive && ndrives < MAX_UNITS) { + // get the next drive + UINT driveType = GetDriveType(szSingleDrive); + if (driveType == DRIVE_FIXED) { + string name = szSingleDrive + string("/var/run/systemd/container"); + try { + ifstream systemd_container(name); + if (systemd_container.good()) { + result = 1; + for (string line; getline(systemd_container, line);) { + if (line.find("docker") != string::npos) { + result = 1; + break; + } else if (line.find("lxc") != string::npos) { + result = 2; + break; + } + } + } + } catch (...) { + //no problem,we're just guessing + } + } + } +} + return result; +} + +bool ExecutionEnvironment::is_docker() const { + // let's check we're not in linux under wine ;) ... +//int cont = wine_container(); + return false; +} //TODO bool ExecutionEnvironment::is_container() const { return is_docker(); } } // namespace os -- Gitblit v1.9.1