mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Add format_expand_time and use it instead of status_replace where
command execution is not needed.
This commit is contained in:
		@@ -22,6 +22,7 @@
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <paths.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
@@ -49,11 +50,14 @@ cmd_pipe_pane_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
{
 | 
			
		||||
	struct args		*args = self->args;
 | 
			
		||||
	struct client		*c;
 | 
			
		||||
	struct session		*s;
 | 
			
		||||
	struct winlink		*wl;
 | 
			
		||||
	struct window_pane	*wp;
 | 
			
		||||
	char			*command;
 | 
			
		||||
	char			*cmd;
 | 
			
		||||
	int			 old_fd, pipe_fd[2], null_fd;
 | 
			
		||||
	struct format_tree	*ft;
 | 
			
		||||
 | 
			
		||||
	if (cmd_find_pane(cmdq, args_get(args, 't'), NULL, &wp) == NULL)
 | 
			
		||||
	if ((wl = cmd_find_pane(cmdq, args_get(args, 't'), &s, &wp)) == NULL)
 | 
			
		||||
		return (CMD_RETURN_ERROR);
 | 
			
		||||
	c = cmd_find_client(cmdq, NULL, 1);
 | 
			
		||||
 | 
			
		||||
@@ -84,10 +88,18 @@ cmd_pipe_pane_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
		return (CMD_RETURN_ERROR);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Expand the command. */
 | 
			
		||||
	ft = format_create();
 | 
			
		||||
	format_defaults(ft, c, s, wl, wp);
 | 
			
		||||
	cmd = format_expand_time(ft, args->argv[0], time(NULL));
 | 
			
		||||
	format_free(ft);
 | 
			
		||||
 | 
			
		||||
	/* Fork the child. */
 | 
			
		||||
	switch (fork()) {
 | 
			
		||||
	case -1:
 | 
			
		||||
		cmdq_error(cmdq, "fork error: %s", strerror(errno));
 | 
			
		||||
 | 
			
		||||
		free(cmd);
 | 
			
		||||
		return (CMD_RETURN_ERROR);
 | 
			
		||||
	case 0:
 | 
			
		||||
		/* Child process. */
 | 
			
		||||
@@ -109,8 +121,7 @@ cmd_pipe_pane_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
 | 
			
		||||
		closefrom(STDERR_FILENO + 1);
 | 
			
		||||
 | 
			
		||||
		command = status_replace(c, NULL, args->argv[0], time(NULL), 0);
 | 
			
		||||
		execl(_PATH_BSHELL, "sh", "-c", command, (char *) NULL);
 | 
			
		||||
		execl(_PATH_BSHELL, "sh", "-c", cmd, (char *) NULL);
 | 
			
		||||
		_exit(1);
 | 
			
		||||
	default:
 | 
			
		||||
		/* Parent process. */
 | 
			
		||||
@@ -124,6 +135,8 @@ cmd_pipe_pane_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
		bufferevent_enable(wp->pipe_event, EV_WRITE);
 | 
			
		||||
 | 
			
		||||
		setblocking(wp->pipe_fd, 0);
 | 
			
		||||
 | 
			
		||||
		free(cmd);
 | 
			
		||||
		return (CMD_RETURN_NORMAL);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user