From 3abfa2c24677666cfd7ad5120e254e6e459dc202 Mon Sep 17 00:00:00 2001 From: gcontini <1121667+gcontini@users.noreply.github.com> Date: 周六, 05 12月 2020 23:37:58 +0800 Subject: [PATCH] fix missing increment in wine --- src/library/os/windows/execution_environment.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 42 insertions(+), 14 deletions(-) diff --git a/src/library/os/windows/execution_environment.cpp b/src/library/os/windows/execution_environment.cpp index 03c789e..7423e9b 100644 --- a/src/library/os/windows/execution_environment.cpp +++ b/src/library/os/windows/execution_environment.cpp @@ -4,16 +4,15 @@ * Created on: Dec 15, 2019 * Author: GC */ +#include <windows.h> #include <sys/stat.h> #include <fstream> #include <iostream> #include <stdio.h> #include <string> -#include "isvm/BIOSReader.h" -#include "isvm/Native.h" #include "../../base/base.h" -#include "../../base/StringUtils.h" + #include "../cpu_info.hpp" #include "../execution_environment.hpp" @@ -21,19 +20,48 @@ namespace os { using namespace std; -ExecutionEnvironment::ExecutionEnvironment() { - if (InitEntryPoints()) { - BIOSReader reader; - SystemInformation info = reader.readSystemInfo(); - m_sys_vendor = toupper_copy(info.Manufacturer); - m_bios_vendor = toupper_copy(info.ProductName); - m_bios_description = toupper_copy(info.SysVersion) + toupper_copy(info.family); +ExecutionEnvironment::ExecutionEnvironment() : m_container_type(CONTAINER_TYPE::NONE) {} + +#define MAX_UNITS 20 +CONTAINER_TYPE wine_container() { + size_t ndrives = 0; + const DWORD dwSize = MAX_PATH; + char szLogicalDrives[MAX_PATH] = {0}; + + CONTAINER_TYPE result = CONTAINER_TYPE::NONE; + 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 = CONTAINER_TYPE::DOCKER; + for (string line; getline(systemd_container, line);) { + if (line.find("docker") != string::npos) { + result = CONTAINER_TYPE::DOCKER; + break; + } else if (line.find("lxc") != string::npos) { + result = CONTAINER_TYPE::LXC; + break; + } + } + } + } catch (...) { + // no problem,we're just guessing + } + } + szSingleDrive += strlen(szSingleDrive) + 1; + ndrives++; + } } + return result; } -//TODO -bool ExecutionEnvironment::is_docker() const { return false; } -//TODO -bool ExecutionEnvironment::is_container() const { return is_docker(); } } // namespace os } // namespace license -- Gitblit v1.9.1