diff options
Diffstat (limited to 'devel/electron33/files/patch-tools_gn_src_util_exe__path.cc')
-rw-r--r-- | devel/electron33/files/patch-tools_gn_src_util_exe__path.cc | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/devel/electron33/files/patch-tools_gn_src_util_exe__path.cc b/devel/electron33/files/patch-tools_gn_src_util_exe__path.cc deleted file mode 100644 index 54f6fb40afea..000000000000 --- a/devel/electron33/files/patch-tools_gn_src_util_exe__path.cc +++ /dev/null @@ -1,90 +0,0 @@ ---- tools/gn/src/util/exe_path.cc.orig 2022-02-07 13:39:41 UTC -+++ tools/gn/src/util/exe_path.cc -@@ -15,7 +15,7 @@ - #include <windows.h> - - #include "base/win/win_util.h" --#elif defined(OS_FREEBSD) || defined(OS_NETBSD) -+#elif defined(OS_FREEBSD) || defined(OS_NETBSD) || defined(OS_OPENBSD) - #include <limits.h> - #include <sys/sysctl.h> - #include <sys/types.h> -@@ -26,6 +26,10 @@ - #include <stdlib.h> - #endif - -+#if defined(OS_OPENBSD) -+#include <kvm.h> -+#endif -+ - #if defined(OS_MACOSX) - - base::FilePath GetExePath() { -@@ -102,6 +106,67 @@ base::FilePath GetExePath() { - return base::FilePath(); - } - return base::FilePath(raw); -+} -+ -+#elif defined(OS_OPENBSD) -+ -+base::FilePath GetExePath() { -+ struct kinfo_file *files; -+ kvm_t *kd = NULL; -+ char errbuf[_POSIX2_LINE_MAX]; -+ char **retvalargs; -+#define MAXTOKENS 2 -+ char *tokens[MAXTOKENS]; -+ static char retval[PATH_MAX]; -+ int cnt; -+ size_t len; -+ struct stat sb; -+ pid_t cpid = getpid(); -+ -+ int mib[] = { CTL_KERN, KERN_PROC_ARGS, cpid, KERN_PROC_ARGV }; -+ -+ if (sysctl(mib, 4, NULL, &len, NULL, 0) != -1) { -+ retvalargs = static_cast<char**>(malloc(len)); -+ if (!retvalargs) -+ goto out; -+ -+ if (sysctl(mib, 4, retvalargs, &len, NULL, 0) < 0) -+ goto out; -+ -+ char *cr = strdup(retvalargs[0]); -+ free(retvalargs); -+ -+ *tokens = strtok(cr, ":"); -+ if (tokens[0] == NULL) -+ goto out; -+ -+ if (realpath(tokens[0], retval) == NULL) -+ goto out; -+ -+ if (stat(retval, &sb) < 0) -+ goto out; -+ -+ if ((kd = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, errbuf)) == NULL) -+ goto out; -+ -+ if ((files = kvm_getfiles(kd, KERN_FILE_BYPID, cpid, -+ sizeof(struct kinfo_file), &cnt)) == NULL) { -+ kvm_close(kd); -+ goto out; -+ } -+ -+ 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); -+ return base::FilePath(retval); -+ } -+ } -+ } -+ -+out: -+ return base::FilePath(); - } - - #elif defined(OS_ZOS) |