version 1.126, 2015/04/24 22:19:36 |
version 1.127, 2015/04/25 18:33:59 |
|
|
status_message_set(struct client *c, const char *fmt, ...) |
status_message_set(struct client *c, const char *fmt, ...) |
{ |
{ |
struct timeval tv; |
struct timeval tv; |
struct message_entry *msg; |
struct message_entry *msg, *msg1; |
va_list ap; |
va_list ap; |
int delay; |
int delay; |
u_int i, limit; |
u_int first, limit; |
|
|
|
limit = options_get_number(&global_options, "message-limit"); |
|
|
status_prompt_clear(c); |
status_prompt_clear(c); |
status_message_clear(c); |
status_message_clear(c); |
|
|
|
|
xvasprintf(&c->message_string, fmt, ap); |
xvasprintf(&c->message_string, fmt, ap); |
va_end(ap); |
va_end(ap); |
|
|
ARRAY_EXPAND(&c->message_log, 1); |
msg = xcalloc(1, sizeof *msg); |
msg = &ARRAY_LAST(&c->message_log); |
|
msg->msg_time = time(NULL); |
msg->msg_time = time(NULL); |
|
msg->msg_num = c->message_next++; |
msg->msg = xstrdup(c->message_string); |
msg->msg = xstrdup(c->message_string); |
|
TAILQ_INSERT_TAIL(&c->message_log, msg, entry); |
|
|
limit = options_get_number(&global_options, "message-limit"); |
first = c->message_next - limit; |
if (ARRAY_LENGTH(&c->message_log) > limit) { |
TAILQ_FOREACH_SAFE(msg, &c->message_log, entry, msg1) { |
limit = ARRAY_LENGTH(&c->message_log) - limit; |
if (msg->msg_num >= first) |
for (i = 0; i < limit; i++) { |
continue; |
msg = &ARRAY_FIRST(&c->message_log); |
free(msg->msg); |
free(msg->msg); |
TAILQ_REMOVE(&c->message_log, msg, entry); |
ARRAY_REMOVE(&c->message_log, 0); |
free(msg); |
} |
|
} |
} |
|
|
delay = options_get_number(&c->session->options, "display-time"); |
delay = options_get_number(&c->session->options, "display-time"); |