mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-03 16:46:18 +00:00 
			
		
		
		
	Switch jobs over to use a bufferevent.
This commit is contained in:
		@@ -77,31 +77,33 @@ cmd_run_shell_callback(struct job *job)
 | 
			
		||||
{
 | 
			
		||||
	struct cmd_run_shell_data	*cdata = job->data;
 | 
			
		||||
	struct cmd_ctx			*ctx = &cdata->ctx;
 | 
			
		||||
	char				*cmd, *msg, *line, *buf;
 | 
			
		||||
	size_t				 off, len, llen;
 | 
			
		||||
	char				*cmd, *msg, *line;
 | 
			
		||||
	size_t				 size;
 | 
			
		||||
	int				 retcode;
 | 
			
		||||
	u_int				 lines;
 | 
			
		||||
 | 
			
		||||
	buf = BUFFER_OUT(job->out);
 | 
			
		||||
	len = BUFFER_USED(job->out);
 | 
			
		||||
	lines = 0;
 | 
			
		||||
	do {
 | 
			
		||||
		if ((line = evbuffer_readline(job->event->input)) != NULL) {
 | 
			
		||||
			ctx->print(ctx, "%s", line);
 | 
			
		||||
			lines++;
 | 
			
		||||
		}
 | 
			
		||||
	} while (line != NULL);
 | 
			
		||||
 | 
			
		||||
	size = EVBUFFER_LENGTH(job->event->input);
 | 
			
		||||
	if (size != 0) {
 | 
			
		||||
		line = xmalloc(size + 1);
 | 
			
		||||
		memcpy(line, EVBUFFER_DATA(job->event->input), size);
 | 
			
		||||
		line[size] = '\0';
 | 
			
		||||
 | 
			
		||||
		ctx->print(ctx, "%s", line);
 | 
			
		||||
		lines++;
 | 
			
		||||
 | 
			
		||||
		xfree(line);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	cmd = cdata->cmd;
 | 
			
		||||
 | 
			
		||||
	if (len != 0) {
 | 
			
		||||
		line = buf;
 | 
			
		||||
		for (off = 0; off < len; off++) {
 | 
			
		||||
			if (buf[off] == '\n') {
 | 
			
		||||
				llen = buf + off - line;
 | 
			
		||||
				if (llen > INT_MAX)
 | 
			
		||||
					break;
 | 
			
		||||
				ctx->print(ctx, "%.*s", (int) llen, line);
 | 
			
		||||
				line = buf + off + 1;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		llen = buf + len - line;
 | 
			
		||||
		if (llen > 0 && llen < INT_MAX)
 | 
			
		||||
			ctx->print(ctx, "%.*s", (int) llen, line);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	msg = NULL;
 | 
			
		||||
	if (WIFEXITED(job->status)) {
 | 
			
		||||
		if ((retcode = WEXITSTATUS(job->status)) != 0)
 | 
			
		||||
@@ -111,7 +113,7 @@ cmd_run_shell_callback(struct job *job)
 | 
			
		||||
		xasprintf(&msg, "'%s' terminated by signal %d", cmd, retcode);
 | 
			
		||||
	}
 | 
			
		||||
	if (msg != NULL) {
 | 
			
		||||
		if (len != 0)
 | 
			
		||||
		if (lines != 0)
 | 
			
		||||
			ctx->print(ctx, "%s", msg);
 | 
			
		||||
		else
 | 
			
		||||
			ctx->info(ctx, "%s", msg);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user