diff options
author | Lars Ingebrigtsen <larsi@gnus.org> | 2020-08-16 20:25:44 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@openbsd6.gnus.org> | 2020-08-16 20:25:44 +0200 |
commit | ada0b9b94e60806e854140881289dfeafc837062 (patch) | |
tree | 596c0ee62f993d13b8cb29821e532c339e82f52c /src/sysdep.c | |
parent | 5680faad8fdf81cc14e7e7023b61854839931aae (diff) | |
download | emacs-ada0b9b94e60806e854140881289dfeafc837062.tar.gz emacs-ada0b9b94e60806e854140881289dfeafc837062.tar.bz2 emacs-ada0b9b94e60806e854140881289dfeafc837062.zip |
Implement list-system-processes on OpenBSD
* src/sysdep.c: Implement list-system-processes on OpenBSD:
(bug#13881). Based on a patch by Jérémie Courrèges-Anglas.
Diffstat (limited to 'src/sysdep.c')
-rw-r--r-- | src/sysdep.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/sysdep.c b/src/sysdep.c index 6b54ed3b6ec..b1371cd411b 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -49,7 +49,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ # include <cygwin/fs.h> #endif -#if defined DARWIN_OS || defined __FreeBSD__ +#if defined DARWIN_OS || defined __FreeBSD__ || defined __OpenBSD__ # include <sys/sysctl.h> #endif @@ -3061,37 +3061,43 @@ list_system_processes (void) return proclist; } -#elif defined DARWIN_OS || defined __FreeBSD__ +#elif defined DARWIN_OS || defined __FreeBSD__ || defined __OpenBSD__ Lisp_Object list_system_processes (void) { #ifdef DARWIN_OS int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL}; +#elif defined __OpenBSD__ + int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0, + sizeof (struct kinfo_proc), 4096}; #else int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PROC}; #endif size_t len; + size_t mibsize = sizeof mib / sizeof mib[0]; struct kinfo_proc *procs; size_t i; Lisp_Object proclist = Qnil; - if (sysctl (mib, 3, NULL, &len, NULL, 0) != 0 || len == 0) + if (sysctl (mib, mibsize, NULL, &len, NULL, 0) != 0 || len == 0) return proclist; procs = xmalloc (len); - if (sysctl (mib, 3, procs, &len, NULL, 0) != 0 || len == 0) + if (sysctl (mib, mibsize, procs, &len, NULL, 0) != 0 || len == 0) { xfree (procs); return proclist; } - len /= sizeof (struct kinfo_proc); + len /= sizeof procs[0]; for (i = 0; i < len; i++) { #ifdef DARWIN_OS proclist = Fcons (INT_TO_INTEGER (procs[i].kp_proc.p_pid), proclist); +#elif defined __OpenBSD__ + proclist = Fcons (INT_TO_INTEGER (procs[i].p_pid), proclist); #else proclist = Fcons (INT_TO_INTEGER (procs[i].ki_pid), proclist); #endif |