| | |
| | | #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" |
| | | |
| | |
| | | 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 |