From 76fb1ec3cbafa6bee4279766b159d865139dc59e Mon Sep 17 00:00:00 2001 From: FlightlessMango Date: Sun, 14 Feb 2021 18:14:42 +0100 Subject: [PATCH] Remove lsof as dependency --- src/vulkan.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/vulkan.cpp b/src/vulkan.cpp index 1bc22bb..97212d3 100644 --- a/src/vulkan.cpp +++ b/src/vulkan.cpp @@ -665,20 +665,22 @@ void init_system_info(){ wineVersion = ""; } // check for gamemode and vkbasalt - if (system("which lsof > /dev/null 2>&1")) { - printf("MANGOHUD: lsof is missing, can't check for gamemode and vkbasalt"); - } else { - auto pid = getpid(); - string command = "lsof -w -lnPX -L -p " + to_string(pid) + " | grep gamemode"; - string ret = exec(command); - if (!ret.empty()) + stringstream ss; + string line; + auto pid = getpid(); + string path = "/proc/" + to_string(pid) + "/map_files/"; + auto files = exec("ls " + path); + ss << files; + while(std::getline(ss, line, '\n')){ + auto file = path + line; + auto sym = read_symlink(file.c_str()); + if (sym.find("gamemode") != std::string::npos) HUDElements.gamemode_bol = true; - command = "lsof -w -lnPX -L -p " + to_string(pid) + " | grep vkbasalt"; - ret = exec(command); - if (!ret.empty()) + if (sym.find("vkbasalt") != std::string::npos) HUDElements.vkbasalt_bol = true; + if (HUDElements.gamemode_bol && HUDElements.vkbasalt_bol) + break; } - //driver = itox(device_data->properties.driverVersion); if (ld_preload) setenv("LD_PRELOAD", ld_preload, 1);