mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-03 16:46:18 +00:00 
			
		
		
		
	Sync OpenBSD patchset 1139:
Actually write all the data to stdout/stderr.
This commit is contained in:
		
							
								
								
									
										23
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								client.c
									
									
									
									
									
								
							@@ -58,6 +58,7 @@ void		client_write_server(enum msgtype, void *, size_t);
 | 
			
		||||
void		client_update_event(void);
 | 
			
		||||
void		client_signal(int, short, void *);
 | 
			
		||||
void		client_stdin_callback(int, short, void *);
 | 
			
		||||
void		client_write(int, const char *, size_t);
 | 
			
		||||
void		client_callback(int, short, void *);
 | 
			
		||||
int		client_dispatch_attached(void);
 | 
			
		||||
int		client_dispatch_wait(void *);
 | 
			
		||||
@@ -460,6 +461,24 @@ client_stdin_callback(unused int fd, unused short events, unused void *data1)
 | 
			
		||||
	client_update_event();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Force write to file descriptor. */
 | 
			
		||||
void
 | 
			
		||||
client_write(int fd, const char *data, size_t size)
 | 
			
		||||
{
 | 
			
		||||
	ssize_t	used;
 | 
			
		||||
 | 
			
		||||
	while (size != 0) {
 | 
			
		||||
		used = write(fd, data, size);
 | 
			
		||||
		if (used == -1) {
 | 
			
		||||
			if (errno == EINTR || errno == EAGAIN)
 | 
			
		||||
				continue;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
		data += used;
 | 
			
		||||
		size -= used;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Dispatch imsgs when in wait state (before MSG_READY). */
 | 
			
		||||
int
 | 
			
		||||
client_dispatch_wait(void *data)
 | 
			
		||||
@@ -504,14 +523,14 @@ client_dispatch_wait(void *data)
 | 
			
		||||
				fatalx("bad MSG_STDOUT");
 | 
			
		||||
			memcpy(&stdoutdata, imsg.data, sizeof stdoutdata);
 | 
			
		||||
 | 
			
		||||
			fwrite(stdoutdata.data, stdoutdata.size, 1, stdout);
 | 
			
		||||
			client_write(STDOUT_FILENO, stdoutdata.data, stdoutdata.size);
 | 
			
		||||
			break;
 | 
			
		||||
		case MSG_STDERR:
 | 
			
		||||
			if (datalen != sizeof stderrdata)
 | 
			
		||||
				fatalx("bad MSG_STDERR");
 | 
			
		||||
			memcpy(&stderrdata, imsg.data, sizeof stderrdata);
 | 
			
		||||
 | 
			
		||||
			fwrite(stderrdata.data, stderrdata.size, 1, stderr);
 | 
			
		||||
			client_write(STDERR_FILENO, stderrdata.data, stderrdata.size);
 | 
			
		||||
			break;
 | 
			
		||||
		case MSG_VERSION:
 | 
			
		||||
			if (datalen != 0)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user