4 * Copyright (c) 2009 Joshua Elsasser <josh@elsasser.org>
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
15 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
16 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 #include <sys/types.h>
20 #include <sys/sysctl.h>
22 #include <Availability.h>
30 char *osdep_get_name(int, char *);
31 char *osdep_get_cwd(int);
32 struct event_base
*osdep_event_init(void);
35 #define __unused __attribute__ ((__unused__))
39 osdep_get_name(int fd
, __unused
char *tty
)
42 struct proc_bsdshortinfo bsdinfo
;
46 if ((pgrp
= tcgetpgrp(fd
)) == -1)
49 ret
= proc_pidinfo(pgrp
, PROC_PIDT_SHORTBSDINFO
, 0,
50 &bsdinfo
, sizeof bsdinfo
);
51 if (ret
== sizeof bsdinfo
&& *bsdinfo
.pbsi_comm
!= '\0')
52 return (strdup(bsdinfo
.pbsi_comm
));
55 int mib
[4] = { CTL_KERN
, KERN_PROC
, KERN_PROC_PID
, 0 };
59 if ((mib
[3] = tcgetpgrp(fd
)) == -1)
63 if (sysctl(mib
, 4, &kp
, &size
, NULL
, 0) == -1)
65 if (size
!= (sizeof kp
) || *kp
.kp_proc
.p_comm
== '\0')
68 return (strdup(kp
.kp_proc
.p_comm
));
75 static char wd
[PATH_MAX
];
76 struct proc_vnodepathinfo pathinfo
;
80 if ((pgrp
= tcgetpgrp(fd
)) == -1)
83 ret
= proc_pidinfo(pgrp
, PROC_PIDVNODEPATHINFO
, 0,
84 &pathinfo
, sizeof pathinfo
);
85 if (ret
== sizeof pathinfo
) {
86 strlcpy(wd
, pathinfo
.pvi_cdir
.vip_path
, sizeof wd
);
93 osdep_event_init(void)
95 struct event_base
*base
;
98 * On OS X, kqueue and poll are both completely broken and don't
99 * work on anything except socket file descriptors (yes, really).
101 setenv("EVENT_NOKQUEUE", "1", 1);
102 setenv("EVENT_NOPOLL", "1", 1);
105 unsetenv("EVENT_NOKQUEUE");
106 unsetenv("EVENT_NOPOLL");