From e047dbe884f5288943d5ba2f8843a078d647d7ef Mon Sep 17 00:00:00 2001
From: gcontini <1121667+gcontini@users.noreply.github.com>
Date: 周六, 25 4月 2020 21:01:33 +0800
Subject: [PATCH] first docker & vm detection

---
 src/library/os/windows/execution_environment.cpp |   82 +++++++++++++++-------------------------
 1 files changed, 31 insertions(+), 51 deletions(-)

diff --git a/src/library/os/windows/execution_environment.cpp b/src/library/os/windows/execution_environment.cpp
index 3e65bc8..50a255e 100644
--- a/src/library/os/windows/execution_environment.cpp
+++ b/src/library/os/windows/execution_environment.cpp
@@ -11,10 +11,8 @@
 #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"
 
@@ -22,65 +20,47 @@
 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
-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};
+CONTAINER_TYPE wine_container() {
+	size_t ndrives = 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;
+	CONTAINER_TYPE result = CONTAINER_TYPE::NONE;
+	const DWORD dwResult = GetLogicalDriveStrings(dwSize, szLogicalDrives);
+	
+	//FIXME! this code missed the increment in the loop... 
+	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
 				}
-			} 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
 }  // namespace license

--
Gitblit v1.9.1