mirror of
https://github.com/tmux/tmux.git
synced 2024-12-13 01:48:47 +00:00
The output log is only useful once and it means creating a file, so open
it once at startup instead of in every call to tty_open.
This commit is contained in:
parent
01defc9f49
commit
abb4e9e2fa
@ -1178,7 +1178,6 @@ server_client_dispatch_identify(struct client *c, struct imsg *imsg)
|
|||||||
proc_send(c->peer, MSG_STDIN, -1, NULL, 0);
|
proc_send(c->peer, MSG_STDIN, -1, NULL, 0);
|
||||||
|
|
||||||
c->tty.fd = -1;
|
c->tty.fd = -1;
|
||||||
c->tty.log_fd = -1;
|
|
||||||
|
|
||||||
close(c->fd);
|
close(c->fd);
|
||||||
c->fd = -1;
|
c->fd = -1;
|
||||||
|
2
server.c
2
server.c
@ -173,6 +173,8 @@ server_start(struct event_base *base, int lockfd, char *lockfile)
|
|||||||
}
|
}
|
||||||
close(pair[0]);
|
close(pair[0]);
|
||||||
|
|
||||||
|
if (debug_level > 3)
|
||||||
|
tty_create_log();
|
||||||
if (pledge("stdio rpath wpath cpath fattr unix recvfd proc exec tty "
|
if (pledge("stdio rpath wpath cpath fattr unix recvfd proc exec tty "
|
||||||
"ps", NULL) != 0)
|
"ps", NULL) != 0)
|
||||||
fatal("pledge failed");
|
fatal("pledge failed");
|
||||||
|
3
tmux.h
3
tmux.h
@ -1102,8 +1102,6 @@ struct tty {
|
|||||||
int fd;
|
int fd;
|
||||||
struct bufferevent *event;
|
struct bufferevent *event;
|
||||||
|
|
||||||
int log_fd;
|
|
||||||
|
|
||||||
struct termios tio;
|
struct termios tio;
|
||||||
|
|
||||||
struct grid_cell cell;
|
struct grid_cell cell;
|
||||||
@ -1555,6 +1553,7 @@ void environ_update(const char *, struct environ *, struct environ *);
|
|||||||
void environ_push(struct environ *);
|
void environ_push(struct environ *);
|
||||||
|
|
||||||
/* tty.c */
|
/* tty.c */
|
||||||
|
void tty_create_log(void);
|
||||||
void tty_init_termios(int, struct termios *, struct bufferevent *);
|
void tty_init_termios(int, struct termios *, struct bufferevent *);
|
||||||
void tty_raw(struct tty *, const char *);
|
void tty_raw(struct tty *, const char *);
|
||||||
void tty_attributes(struct tty *, const struct grid_cell *,
|
void tty_attributes(struct tty *, const struct grid_cell *,
|
||||||
|
43
tty.c
43
tty.c
@ -31,6 +31,8 @@
|
|||||||
|
|
||||||
#include "tmux.h"
|
#include "tmux.h"
|
||||||
|
|
||||||
|
static int tty_log_fd = -1;
|
||||||
|
|
||||||
void tty_read_callback(struct bufferevent *, void *);
|
void tty_read_callback(struct bufferevent *, void *);
|
||||||
void tty_error_callback(struct bufferevent *, short, void *);
|
void tty_error_callback(struct bufferevent *, short, void *);
|
||||||
|
|
||||||
@ -59,6 +61,18 @@ void tty_default_colours(struct grid_cell *, const struct window_pane *);
|
|||||||
#define tty_pane_full_width(tty, ctx) \
|
#define tty_pane_full_width(tty, ctx) \
|
||||||
((ctx)->xoff == 0 && screen_size_x((ctx)->wp->screen) >= (tty)->sx)
|
((ctx)->xoff == 0 && screen_size_x((ctx)->wp->screen) >= (tty)->sx)
|
||||||
|
|
||||||
|
void
|
||||||
|
tty_create_log(void)
|
||||||
|
{
|
||||||
|
char name[64];
|
||||||
|
|
||||||
|
xsnprintf(name, sizeof name, "tmux-out-%ld.log", (long)getpid());
|
||||||
|
|
||||||
|
tty_log_fd = open(name, O_WRONLY|O_CREAT|O_TRUNC, 0644);
|
||||||
|
if (tty_log_fd != -1 && fcntl(tty_log_fd, F_SETFD, FD_CLOEXEC) == -1)
|
||||||
|
fatal("fcntl failed");
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
tty_init(struct tty *tty, struct client *c, int fd, char *term)
|
tty_init(struct tty *tty, struct client *c, int fd, char *term)
|
||||||
{
|
{
|
||||||
@ -68,7 +82,6 @@ tty_init(struct tty *tty, struct client *c, int fd, char *term)
|
|||||||
return (-1);
|
return (-1);
|
||||||
|
|
||||||
memset(tty, 0, sizeof *tty);
|
memset(tty, 0, sizeof *tty);
|
||||||
tty->log_fd = -1;
|
|
||||||
|
|
||||||
if (term == NULL || *term == '\0')
|
if (term == NULL || *term == '\0')
|
||||||
tty->termname = xstrdup("unknown");
|
tty->termname = xstrdup("unknown");
|
||||||
@ -139,17 +152,6 @@ tty_set_size(struct tty *tty, u_int sx, u_int sy) {
|
|||||||
int
|
int
|
||||||
tty_open(struct tty *tty, char **cause)
|
tty_open(struct tty *tty, char **cause)
|
||||||
{
|
{
|
||||||
char out[64];
|
|
||||||
int fd;
|
|
||||||
|
|
||||||
if (debug_level > 3) {
|
|
||||||
xsnprintf(out, sizeof out, "tmux-out-%ld.log", (long) getpid());
|
|
||||||
fd = open(out, O_WRONLY|O_CREAT|O_TRUNC, 0644);
|
|
||||||
if (fd != -1 && fcntl(fd, F_SETFD, FD_CLOEXEC) == -1)
|
|
||||||
fatal("fcntl failed");
|
|
||||||
tty->log_fd = fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
tty->term = tty_term_find(tty->termname, tty->fd, cause);
|
tty->term = tty_term_find(tty->termname, tty->fd, cause);
|
||||||
if (tty->term == NULL) {
|
if (tty->term == NULL) {
|
||||||
tty_close(tty);
|
tty_close(tty);
|
||||||
@ -308,11 +310,6 @@ tty_stop_tty(struct tty *tty)
|
|||||||
void
|
void
|
||||||
tty_close(struct tty *tty)
|
tty_close(struct tty *tty)
|
||||||
{
|
{
|
||||||
if (tty->log_fd != -1) {
|
|
||||||
close(tty->log_fd);
|
|
||||||
tty->log_fd = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event_initialized(&tty->key_timer))
|
if (event_initialized(&tty->key_timer))
|
||||||
evtimer_del(&tty->key_timer);
|
evtimer_del(&tty->key_timer);
|
||||||
tty_stop_tty(tty);
|
tty_stop_tty(tty);
|
||||||
@ -406,8 +403,8 @@ tty_puts(struct tty *tty, const char *s)
|
|||||||
return;
|
return;
|
||||||
bufferevent_write(tty->event, s, strlen(s));
|
bufferevent_write(tty->event, s, strlen(s));
|
||||||
|
|
||||||
if (tty->log_fd != -1)
|
if (tty_log_fd != -1)
|
||||||
write(tty->log_fd, s, strlen(s));
|
write(tty_log_fd, s, strlen(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -438,16 +435,16 @@ tty_putc(struct tty *tty, u_char ch)
|
|||||||
tty->cx++;
|
tty->cx++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tty->log_fd != -1)
|
if (tty_log_fd != -1)
|
||||||
write(tty->log_fd, &ch, 1);
|
write(tty_log_fd, &ch, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
tty_putn(struct tty *tty, const void *buf, size_t len, u_int width)
|
tty_putn(struct tty *tty, const void *buf, size_t len, u_int width)
|
||||||
{
|
{
|
||||||
bufferevent_write(tty->event, buf, len);
|
bufferevent_write(tty->event, buf, len);
|
||||||
if (tty->log_fd != -1)
|
if (tty_log_fd != -1)
|
||||||
write(tty->log_fd, buf, len);
|
write(tty_log_fd, buf, len);
|
||||||
tty->cx += width;
|
tty->cx += width;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user