aboutsummaryrefslogtreecommitdiff
path: root/devel/electron33/files/patch-base_process_process__handle__openbsd.cc
diff options
context:
space:
mode:
Diffstat (limited to 'devel/electron33/files/patch-base_process_process__handle__openbsd.cc')
-rw-r--r--devel/electron33/files/patch-base_process_process__handle__openbsd.cc133
1 files changed, 0 insertions, 133 deletions
diff --git a/devel/electron33/files/patch-base_process_process__handle__openbsd.cc b/devel/electron33/files/patch-base_process_process__handle__openbsd.cc
deleted file mode 100644
index c3ef5fe46561..000000000000
--- a/devel/electron33/files/patch-base_process_process__handle__openbsd.cc
+++ /dev/null
@@ -1,133 +0,0 @@
---- base/process/process_handle_openbsd.cc.orig 2024-04-15 20:33:42 UTC
-+++ base/process/process_handle_openbsd.cc
-@@ -3,48 +3,112 @@
- // 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 };
-
- if (sysctl(mib, std::size(mib), NULL, &length, NULL, 0) < 0)
- 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)));
-
-- return info.p_ppid;
-+ if (sysctl(mib, std::size(mib), info, &length, NULL, 0) < 0) {
-+ ppid = -1;
-+ goto out;
-+ }
-+
-+ 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();
-- 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);
-+ int mib[] = { CTL_KERN, KERN_PROC_ARGS, process, KERN_PROC_ARGV };
-
-- return FilePath();
-+ 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);
-+ }
-+ }
-+ }
-+
-+ return result;
- }
-
- } // namespace base