summaryrefslogtreecommitdiff
path: root/src/sysdep.c
diff options
context:
space:
mode:
authorLeo Liu <sdl.web@gmail.com>2012-04-22 10:58:23 +0800
committerLeo Liu <sdl.web@gmail.com>2012-04-22 10:58:23 +0800
commitf01769f9ca9cc718cc5ae3c9b6f2669ad8d93c24 (patch)
tree105c7c078f4b99c94d7a07f5c1498acf1c5011aa /src/sysdep.c
parent5790543d1fa79f5302c2415fd0d3294796008eda (diff)
downloademacs-f01769f9ca9cc718cc5ae3c9b6f2669ad8d93c24.tar.gz
* src/sysdep.c (list_system_processes): Support Darwin.
Fixes: debbugs:5725
Diffstat (limited to 'src/sysdep.c')
-rw-r--r--src/sysdep.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/sysdep.c b/src/sysdep.c
index d33e7a21acc..81529fc7d9b 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -44,6 +44,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include <math.h>
#endif
+#ifdef DARWIN_OS
+#include <sys/sysctl.h>
+#endif
+
#ifdef WINDOWSNT
#define read sys_read
#define write sys_write
@@ -2536,12 +2540,16 @@ list_system_processes (void)
return proclist;
}
-#elif defined __FreeBSD__
+#elif defined BSD_SYSTEM
Lisp_Object
list_system_processes (void)
{
+#ifdef DARWIN_OS
+ int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL};
+#else
int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PROC};
+#endif
size_t len;
struct kinfo_proc *procs;
size_t i;
@@ -2562,7 +2570,13 @@ list_system_processes (void)
GCPRO1 (proclist);
len /= sizeof (struct kinfo_proc);
for (i = 0; i < len; i++)
- proclist = Fcons (make_fixnum_or_float (procs[i].ki_pid), proclist);
+ {
+#ifdef DARWIN_OS
+ proclist = Fcons (make_fixnum_or_float (procs[i].kp_proc.p_pid), proclist);
+#else
+ proclist = Fcons (make_fixnum_or_float (procs[i].ki_pid), proclist);
+#endif
+ }
UNGCPRO;
xfree (procs);