From 9c33ad84278353286bbb4118cd11ca3fcfec439a Mon Sep 17 00:00:00 2001 From: gcontini <1121667+gcontini@users.noreply.github.com> Date: 周六, 31 10月 2020 23:36:25 +0800 Subject: [PATCH] codacy cleanup --- src/library/os/linux/execution_environment.cpp | 59 +++++++++++++++++++++++++---------------------------------- 1 files changed, 25 insertions(+), 34 deletions(-) diff --git a/src/library/os/linux/execution_environment.cpp b/src/library/os/linux/execution_environment.cpp index a69122a..1ca0cd0 100644 --- a/src/library/os/linux/execution_environment.cpp +++ b/src/library/os/linux/execution_environment.cpp @@ -1,9 +1,10 @@ /* - * virtualization.cpp + * execution_environment.cpp * * Created on: Dec 15, 2019 * Author: GC */ +#define __STDC_WANT_LIB_EXT1__1 #include <paths.h> #include <sys/stat.h> #include <unistd.h> @@ -17,42 +18,42 @@ #include "../../base/base.h" #include "../cpu_info.hpp" #include "../execution_environment.hpp" +#include "../../base/file_utils.hpp" +#include "../../base/string_utils.h" namespace license { +namespace os { using namespace std; // 0=NO 1=Docker/2=Lxc -static int checkContainerProc() { +static CONTAINER_TYPE checkContainerProc() { // in docer /proc/self/cgroups contains the "docker" or "lxc" string // https://stackoverflow.com/questions/23513045/how-to-check-if-a-process-is-running-inside-docker-container char path[MAX_PATH] = {0}; char proc_path[MAX_PATH], pidStr[64]; pid_t pid = getpid(); - sprintf(pidStr, "%d", pid); - strcpy(proc_path, "/proc/"); - strcat(proc_path, pidStr); - strcat(proc_path, "/cgroup"); + snprintf(pidStr, sizeof(pidStr), "%d", pid); + strncpy(proc_path, "/proc/", sizeof(proc_path)); + strncat(proc_path, pidStr, sizeof(proc_path)); + strncpy(proc_path, "/cgroup", sizeof(proc_path)); FILE *fp; char *line = NULL; size_t len = 0; ssize_t read; - int result = 0; + CONTAINER_TYPE result = CONTAINER_TYPE::NONE; fp = fopen(proc_path, "r"); if (fp == NULL) { - return 0; + return CONTAINER_TYPE::NONE; } while ((read = getline(&line, &len, fp)) != -1 && result == 0) { - // line[len]=0; - // printf("Retrieved line of length %zu:\n", read); - // printf("%s", line); if (strstr(line, "docker") != NULL) { - result = 1; + result = CONTAINER_TYPE::DOCKER; } if (strstr(line, "lxc") != NULL) { - result = 2; + result = CONTAINER_TYPE::LXC; } } @@ -62,17 +63,17 @@ } // 0=NO 1=Docker/2=Lxc -static int checkSystemdContainer() { +static CONTAINER_TYPE checkSystemdContainer() { ifstream systemd_container("/var/run/systemd/container"); - int result = 0; + CONTAINER_TYPE result = CONTAINER_TYPE::NONE; if (systemd_container.good()) { - result = 1; + result = CONTAINER_TYPE::DOCKER; for (string line; getline(systemd_container, line);) { if (line.find("docker") != string::npos) { - result = 1; + result = CONTAINER_TYPE::DOCKER; break; } else if (line.find("lxc") != string::npos) { - result = 2; + result = CONTAINER_TYPE::LXC; break; } } @@ -80,25 +81,15 @@ return result; } -VIRTUALIZATION ExecutionEnvironment::getVirtualization() { - VIRTUALIZATION result; - CpuInfo cpuInfo; - bool isContainer = checkContainerProc() != 0 || checkSystemdContainer() != 0; - if (isContainer) { - result = CONTAINER; - } else if (cpuInfo.cpu_virtual() || is_cloud()) { - result = VM; - } else { - result = NONE; +static CONTAINER_TYPE get_container_type() { + CONTAINER_TYPE result = checkContainerProc(); + if (result == CONTAINER_TYPE::NONE) { + result = checkSystemdContainer(); } return result; } -bool ExecutionEnvironment::is_cloud() { return getCloudProvider() == NONE; } +ExecutionEnvironment::ExecutionEnvironment() : m_container_type(get_container_type()) {} -bool ExecutionEnvironment::is_docker() { return (checkContainerProc() == 1 || checkSystemdContainer() == 1); } - -CLOUD_PROVIDER ExecutionEnvironment::getCloudProvider() {} - - +} // namespace os } // namespace license -- Gitblit v1.9.1