gcontini
2020-03-15 6dd7902d6f148a4ac78e5478edb3a2ca8624f74c
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