diff options
Diffstat (limited to 'devel/electron35/files/patch-base_process_process__handle__openbsd.cc')
| -rw-r--r-- | devel/electron35/files/patch-base_process_process__handle__openbsd.cc | 138 |
1 files changed, 0 insertions, 138 deletions
diff --git a/devel/electron35/files/patch-base_process_process__handle__openbsd.cc b/devel/electron35/files/patch-base_process_process__handle__openbsd.cc deleted file mode 100644 index 4dfafb34d672..000000000000 --- a/devel/electron35/files/patch-base_process_process__handle__openbsd.cc +++ /dev/null @@ -1,138 +0,0 @@ ---- base/process/process_handle_openbsd.cc.orig 2025-03-24 20:50:14 UTC -+++ base/process/process_handle_openbsd.cc -@@ -3,17 +3,25 @@ - // found in the LICENSE file. - - #include "base/process/process_handle.h" -+#include "base/files/file_util.h" - - #include <stddef.h> -+#include <stdlib.h> -+#include <sys/param.h> -+#include <sys/proc.h> -+#include <sys/stat.h> - #include <sys/sysctl.h> - #include <sys/types.h> - #include <unistd.h> - -+#include <kvm.h> -+ - namespace base { - - ProcessId GetParentProcessId(ProcessHandle process) { -- struct kinfo_proc info; -+ struct kinfo_proc *info; - size_t length; -+ pid_t ppid; - int mib[] = { - CTL_KERN, KERN_PROC, KERN_PROC_PID, process, sizeof(struct kinfo_proc), - 0}; -@@ -22,37 +30,87 @@ ProcessId GetParentProcessId(ProcessHandle process) { - return -1; - } - -- mib[5] = (length / sizeof(struct kinfo_proc)); -+ info = (struct kinfo_proc *)malloc(length); - -- if (sysctl(mib, std::size(mib), &info, &length, NULL, 0) < 0) { -- return -1; -+ mib[5] = static_cast<int>((length / sizeof(struct kinfo_proc))); -+ -+ if (sysctl(mib, std::size(mib), info, &length, NULL, 0) < 0) { -+ ppid = -1; -+ goto out; - } - -- return info.p_ppid; -+ ppid = info->p_ppid; -+ -+out: -+ free(info); -+ return ppid; - } - - FilePath GetProcessExecutablePath(ProcessHandle process) { -- struct kinfo_proc kp; -+ struct kinfo_file *files; -+ kvm_t *kd = NULL; -+ char errbuf[_POSIX2_LINE_MAX]; -+ char **retvalargs, *cpath, retval[PATH_MAX]; -+ int cnt; - size_t len; -- int mib[] = { -- CTL_KERN, KERN_PROC, KERN_PROC_PID, process, sizeof(struct kinfo_proc), -- 0}; -+ char *tokens[2]; -+ struct stat sb; -+ FilePath result; - -- if (sysctl(mib, std::size(mib), NULL, &len, NULL, 0) == -1) { -- return FilePath(); -+ int mib[] = { CTL_KERN, KERN_PROC_ARGS, process, KERN_PROC_ARGV }; -+ -+ if ((cpath = getenv("CHROME_EXE_PATH")) != NULL) -+ result = FilePath(cpath); -+ else -+ result = FilePath("/usr/local/chrome/chrome"); -+ -+ if (sysctl(mib, std::size(mib), NULL, &len, NULL, 0) != -1) { -+ retvalargs = static_cast<char**>(malloc(len)); -+ if (!retvalargs) -+ return result; -+ -+ if (sysctl(mib, std::size(mib), retvalargs, &len, NULL, 0) < 0) { -+ free(retvalargs); -+ return result; -+ } -+ -+ if ((*tokens = strtok(retvalargs[0], ":")) == NULL) { -+ free(retvalargs); -+ return result; -+ } -+ -+ free(retvalargs); -+ -+ if (tokens[0] == NULL) -+ return result; -+ -+ if (realpath(tokens[0], retval) == NULL) -+ return result; -+ -+ if (stat(retval, &sb) < 0) -+ return result; -+ -+ if ((kd = kvm_openfiles(NULL, NULL, NULL, (int)KVM_NO_FILES, -+ errbuf)) == NULL) -+ return result; -+ -+ if ((files = kvm_getfiles(kd, KERN_FILE_BYPID, process, -+ sizeof(struct kinfo_file), &cnt)) == NULL) { -+ kvm_close(kd); -+ return result; -+ } -+ -+ for (int i = 0; i < cnt; i++) { -+ if (files[i].fd_fd == KERN_FILE_TEXT && -+ files[i].va_fsid == static_cast<uint32_t>(sb.st_dev) && -+ files[i].va_fileid == sb.st_ino) { -+ kvm_close(kd); -+ result = FilePath(retval); -+ } -+ } - } -- mib[5] = (len / sizeof(struct kinfo_proc)); -- if (sysctl(mib, std::size(mib), &kp, &len, NULL, 0) < 0) { -- return FilePath(); -- } -- if ((kp.p_flag & P_SYSTEM) != 0) { -- return FilePath(); -- } -- if (strcmp(kp.p_comm, "chrome") == 0) { -- return FilePath(kp.p_comm); -- } - -- return FilePath(); -+ return result; - } - - } // namespace base |
