diff options
Diffstat (limited to 'server-client.c')
-rw-r--r-- | server-client.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/server-client.c b/server-client.c index ccddee7a..048a138b 100644 --- a/server-client.c +++ b/server-client.c @@ -1636,3 +1636,34 @@ server_client_push_stderr(struct client *c) log_debug("%s: client %p, queued", __func__, c); } } + +/* Add to client message log. */ +void +server_client_add_message(struct client *c, const char *fmt, ...) +{ + struct message_entry *msg, *msg1; + char *s; + va_list ap; + u_int limit; + + va_start(ap, fmt); + xvasprintf(&s, fmt, ap); + va_end(ap); + + log_debug("%s: message %s", c->tty.path, s); + + msg = xcalloc(1, sizeof *msg); + msg->msg_time = time(NULL); + msg->msg_num = c->message_next++; + msg->msg = s; + TAILQ_INSERT_TAIL(&c->message_log, msg, entry); + + limit = options_get_number(global_options, "message-limit"); + TAILQ_FOREACH_SAFE(msg, &c->message_log, entry, msg1) { + if (msg->msg_num + limit >= c->message_next) + break; + free(msg->msg); + TAILQ_REMOVE(&c->message_log, msg, entry); + free(msg); + } +} |