mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-03 16:46:18 +00:00 
			
		
		
		
	Rather than constructing an entire termios struct from ttydefaults.h, just let
forkpty do it and then alter the bits that should be changed after fork. A little neater and more portable.
This commit is contained in:
		
							
								
								
									
										11
									
								
								window.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								window.c
									
									
									
									
									
								
							@@ -454,6 +454,7 @@ window_pane_spawn(struct window_pane *wp, const char *cmd, const char *shell,
 | 
			
		||||
	struct environ_entry	*envent;
 | 
			
		||||
	const char		*ptr;
 | 
			
		||||
	struct timeval	 	 tv;
 | 
			
		||||
	struct termios		 tio2;
 | 
			
		||||
	u_int		 	 i;
 | 
			
		||||
 | 
			
		||||
	if (wp->fd != -1)
 | 
			
		||||
@@ -484,7 +485,7 @@ window_pane_spawn(struct window_pane *wp, const char *cmd, const char *shell,
 | 
			
		||||
	tv.tv_usec = NAME_INTERVAL * 1000L;
 | 
			
		||||
	timeradd(&wp->window->name_timer, &tv, &wp->window->name_timer);
 | 
			
		||||
 | 
			
		||||
 	switch (wp->pid = forkpty(&wp->fd, wp->tty, tio, &ws)) {
 | 
			
		||||
 	switch (wp->pid = forkpty(&wp->fd, wp->tty, NULL, &ws)) {
 | 
			
		||||
	case -1:
 | 
			
		||||
		wp->fd = -1;
 | 
			
		||||
		xasprintf(cause, "%s: %s", cmd, strerror(errno));
 | 
			
		||||
@@ -493,6 +494,14 @@ window_pane_spawn(struct window_pane *wp, const char *cmd, const char *shell,
 | 
			
		||||
		if (chdir(wp->cwd) != 0)
 | 
			
		||||
			chdir("/");
 | 
			
		||||
 | 
			
		||||
		if (tcgetattr(STDIN_FILENO, &tio2) != 0)
 | 
			
		||||
			fatal("tcgetattr failed");
 | 
			
		||||
		if (tio != NULL)
 | 
			
		||||
			memcpy(tio2.c_cc, tio->c_cc, sizeof tio2.c_cc);
 | 
			
		||||
		tio2.c_cc[VERASE] = '\177';
 | 
			
		||||
		if (tcsetattr(STDIN_FILENO, TCSANOW, &tio2) != 0)
 | 
			
		||||
			fatal("tcgetattr failed");
 | 
			
		||||
 | 
			
		||||
		ARRAY_INIT(&varlist);
 | 
			
		||||
		for (varp = environ; *varp != NULL; varp++) {
 | 
			
		||||
			var = xstrdup(*varp);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user