mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Implement osdep_get_name and osdep_get_cwd for AIX, from J Raynor.
This commit is contained in:
		| @@ -40,6 +40,10 @@ forkpty(int *master, unused char *name, struct termios *tio, struct winsize *ws) | |||||||
|  |  | ||||||
| 	if ((path = ttyname(*master)) == NULL) | 	if ((path = ttyname(*master)) == NULL) | ||||||
| 		goto out; | 		goto out; | ||||||
|  |  | ||||||
|  | 	if (name != NULL) | ||||||
|  | 		strlcpy(name, path, TTY_NAME_MAX); | ||||||
|  |  | ||||||
| 	if ((slave = open(path, O_RDWR|O_NOCTTY)) == -1) | 	if ((slave = open(path, O_RDWR|O_NOCTTY)) == -1) | ||||||
| 		goto out; | 		goto out; | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										64
									
								
								osdep-aix.c
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								osdep-aix.c
									
									
									
									
									
								
							| @@ -16,21 +16,75 @@ | |||||||
|  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #include <sys/types.h> | #include <sys/param.h> | ||||||
|  | #include <sys/procfs.h> | ||||||
|  |  | ||||||
| #include <event.h> | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <fcntl.h> | ||||||
|  |  | ||||||
| #include "tmux.h" | #include "tmux.h" | ||||||
|  |  | ||||||
| char * | char * | ||||||
| osdep_get_name(unused int fd, unused char *tty) | osdep_get_name(unused int fd, char *tty) | ||||||
| { | { | ||||||
| 	return (NULL); | 	struct psinfo	 p; | ||||||
|  | 	char		*path; | ||||||
|  | 	ssize_t		 bytes; | ||||||
|  | 	int		 f, ttyfd, retval; | ||||||
|  | 	pid_t		 pgrp; | ||||||
|  |  | ||||||
|  | 	if ((ttyfd = open(tty, O_RDONLY|O_NOCTTY)) == -1) | ||||||
|  | 		return (NULL); | ||||||
|  |  | ||||||
|  | 	retval = ioctl(ttyfd, TIOCGPGRP, &pgrp); | ||||||
|  | 	close(ttyfd); | ||||||
|  | 	if (retval == -1) | ||||||
|  | 		return (NULL); | ||||||
|  |  | ||||||
|  | 	xasprintf(&path, "/proc/%u/psinfo", (u_int) pgrp); | ||||||
|  | 	f = open(path, O_RDONLY); | ||||||
|  | 	free(path); | ||||||
|  | 	if (f < 0) | ||||||
|  | 		return (NULL); | ||||||
|  |  | ||||||
|  | 	bytes = read(f, &p, sizeof(p)); | ||||||
|  | 	close(f); | ||||||
|  | 	if (bytes != sizeof(p)) | ||||||
|  | 		return (NULL); | ||||||
|  |  | ||||||
|  | 	return (xstrdup(p.pr_fname)); | ||||||
| } | } | ||||||
|  |  | ||||||
| char * | char * | ||||||
| osdep_get_cwd(unused int fd) | osdep_get_cwd(int fd) | ||||||
| { | { | ||||||
|  | 	static char      target[MAXPATHLEN + 1]; | ||||||
|  | 	char            *path; | ||||||
|  | 	const char      *ttypath; | ||||||
|  | 	ssize_t          n; | ||||||
|  | 	pid_t            pgrp; | ||||||
|  | 	int              len, retval, ttyfd; | ||||||
|  |  | ||||||
|  | 	if ((ttypath = ptsname(fd)) == NULL) | ||||||
|  | 		return (NULL); | ||||||
|  | 	if ((ttyfd = open(ttypath, O_RDONLY|O_NOCTTY)) == -1) | ||||||
|  | 		return (NULL); | ||||||
|  |  | ||||||
|  | 	retval = ioctl(ttyfd, TIOCGPGRP, &pgrp); | ||||||
|  | 	close(ttyfd); | ||||||
|  | 	if (retval == -1) | ||||||
|  | 		return (NULL); | ||||||
|  |  | ||||||
|  | 	xasprintf(&path, "/proc/%u/cwd", (u_int) pgrp); | ||||||
|  | 	n = readlink(path, target, MAXPATHLEN); | ||||||
|  | 	free(path); | ||||||
|  | 	if (n > 0) { | ||||||
|  | 		target[n] = '\0'; | ||||||
|  | 		if ((len = strlen(target)) > 1 && target[len - 1] == '/') | ||||||
|  | 			target[len - 1] = '\0'; | ||||||
|  | 		return (target); | ||||||
|  | 	} | ||||||
| 	return (NULL); | 	return (NULL); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Nicholas Marriott
					Nicholas Marriott