summaryrefslogtreecommitdiff
path: root/src/sysdep.c
diff options
context:
space:
mode:
authorLars Ingebrigtsen <larsi@gnus.org>2020-08-16 20:25:44 +0200
committerLars Ingebrigtsen <larsi@openbsd6.gnus.org>2020-08-16 20:25:44 +0200
commitada0b9b94e60806e854140881289dfeafc837062 (patch)
tree596c0ee62f993d13b8cb29821e532c339e82f52c /src/sysdep.c
parent5680faad8fdf81cc14e7e7023b61854839931aae (diff)
downloademacs-ada0b9b94e60806e854140881289dfeafc837062.tar.gz
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.c16
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