mirror of
https://github.com/tmux/tmux.git
synced 2024-12-13 10:08:47 +00:00
Sync OpenBSD patchset 1139:
Actually write all the data to stdout/stderr.
This commit is contained in:
parent
dfc845e7f9
commit
bc47596313
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_update_event(void);
|
||||||
void client_signal(int, short, void *);
|
void client_signal(int, short, void *);
|
||||||
void client_stdin_callback(int, short, void *);
|
void client_stdin_callback(int, short, void *);
|
||||||
|
void client_write(int, const char *, size_t);
|
||||||
void client_callback(int, short, void *);
|
void client_callback(int, short, void *);
|
||||||
int client_dispatch_attached(void);
|
int client_dispatch_attached(void);
|
||||||
int client_dispatch_wait(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();
|
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). */
|
/* Dispatch imsgs when in wait state (before MSG_READY). */
|
||||||
int
|
int
|
||||||
client_dispatch_wait(void *data)
|
client_dispatch_wait(void *data)
|
||||||
@ -504,14 +523,14 @@ client_dispatch_wait(void *data)
|
|||||||
fatalx("bad MSG_STDOUT");
|
fatalx("bad MSG_STDOUT");
|
||||||
memcpy(&stdoutdata, imsg.data, sizeof stdoutdata);
|
memcpy(&stdoutdata, imsg.data, sizeof stdoutdata);
|
||||||
|
|
||||||
fwrite(stdoutdata.data, stdoutdata.size, 1, stdout);
|
client_write(STDOUT_FILENO, stdoutdata.data, stdoutdata.size);
|
||||||
break;
|
break;
|
||||||
case MSG_STDERR:
|
case MSG_STDERR:
|
||||||
if (datalen != sizeof stderrdata)
|
if (datalen != sizeof stderrdata)
|
||||||
fatalx("bad MSG_STDERR");
|
fatalx("bad MSG_STDERR");
|
||||||
memcpy(&stderrdata, imsg.data, sizeof stderrdata);
|
memcpy(&stderrdata, imsg.data, sizeof stderrdata);
|
||||||
|
|
||||||
fwrite(stderrdata.data, stderrdata.size, 1, stderr);
|
client_write(STDERR_FILENO, stderrdata.data, stderrdata.size);
|
||||||
break;
|
break;
|
||||||
case MSG_VERSION:
|
case MSG_VERSION:
|
||||||
if (datalen != 0)
|
if (datalen != 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user