1 /* $Id: osdep-sunos.c,v 1.1.1.2 2011/08/17 18:40:06 jmmv Exp $ */ 2 3 /* 4 * Copyright (c) 2009 Todd Carson <toc@daybefore.net> 5 * 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. 9 * 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. 17 */ 18 19 #include <sys/types.h> 20 #include <sys/stat.h> 21 22 #include <event.h> 23 #include <fcntl.h> 24 #include <procfs.h> 25 #include <stdio.h> 26 #include <stdlib.h> 27 #include <unistd.h> 28 29 #include "tmux.h" 30 31 char * 32 osdep_get_name(int fd, char *tty) 33 { 34 struct psinfo p; 35 struct stat st; 36 char *path; 37 ssize_t bytes; 38 int f; 39 pid_t pgrp; 40 41 if ((f = open(tty, O_RDONLY)) < 0) 42 return (NULL); 43 44 if ((fstat(f, &st) != 0) || 45 (ioctl(f, TIOCGPGRP, &pgrp) != 0)) { 46 close(f); 47 return (NULL); 48 } 49 close(f); 50 51 xasprintf(&path, "/proc/%hu/psinfo", pgrp); 52 f = open(path, O_RDONLY); 53 xfree(path); 54 if (f < 0) 55 return (NULL); 56 57 bytes = read(f, &p, sizeof(p)); 58 close(f); 59 if (bytes != sizeof(p)) 60 return (NULL); 61 62 if (p.pr_ttydev != st.st_rdev) 63 return (NULL); 64 65 return (xstrdup(p.pr_fname)); 66 } 67 68 struct event_base * 69 osdep_event_init(void) 70 { 71 return (event_init()); 72 } 73