degesch: make buffer_send_*() accept a NULL buffer
This commit is contained in:
parent
7bd0eefea8
commit
3c982c7077
89
degesch.c
89
degesch.c
|
@ -2507,6 +2507,9 @@ buffer_send_internal (struct app_context *ctx, struct buffer *buffer,
|
|||
enum buffer_line_type type, int flags,
|
||||
struct buffer_line_args a)
|
||||
{
|
||||
if (!buffer)
|
||||
buffer = ctx->global_buffer;
|
||||
|
||||
struct buffer_line *line = buffer_line_new ();
|
||||
line->type = type;
|
||||
line->flags = flags;
|
||||
|
@ -2990,12 +2993,12 @@ irc_initialize_ssl (struct server *s, struct error **e)
|
|||
{
|
||||
char *path = resolve_config_filename (ssl_cert);
|
||||
if (!path)
|
||||
buffer_send_error (s->ctx, s->ctx->global_buffer,
|
||||
buffer_send_error (s->ctx, NULL,
|
||||
"%s: %s", "Cannot open file", ssl_cert);
|
||||
// XXX: perhaps we should read the file ourselves for better messages
|
||||
else if (!SSL_use_certificate_file (s->ssl, path, SSL_FILETYPE_PEM)
|
||||
|| !SSL_use_PrivateKey_file (s->ssl, path, SSL_FILETYPE_PEM))
|
||||
buffer_send_error (s->ctx, s->ctx->global_buffer,
|
||||
buffer_send_error (s->ctx, NULL,
|
||||
"%s: %s", "Setting the SSL client certificate failed",
|
||||
ERR_error_string (ERR_get_error (), NULL));
|
||||
free (path);
|
||||
|
@ -3155,7 +3158,7 @@ try_finish_quit (struct app_context *ctx)
|
|||
static void
|
||||
initiate_quit (struct app_context *ctx)
|
||||
{
|
||||
buffer_send_status (ctx, ctx->global_buffer, "Shutting down");
|
||||
buffer_send_status (ctx, NULL, "Shutting down");
|
||||
|
||||
// Destroy the user interface
|
||||
input_stop (&ctx->input);
|
||||
|
@ -5862,8 +5865,7 @@ try_handle_buffer_goto (struct app_context *ctx, const char *word)
|
|||
return false;
|
||||
|
||||
if (n > INT_MAX || !buffer_goto (ctx, n))
|
||||
buffer_send_error (ctx, ctx->global_buffer,
|
||||
"%s: %s", "No such buffer", word);
|
||||
buffer_send_error (ctx, NULL, "%s: %s", "No such buffer", word);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -5883,13 +5885,12 @@ try_decode_buffer (struct app_context *ctx, const char *word)
|
|||
static void
|
||||
show_buffers_list (struct app_context *ctx)
|
||||
{
|
||||
buffer_send_status (ctx, ctx->global_buffer, "%s", "");
|
||||
buffer_send_status (ctx, ctx->global_buffer, "Buffers list:");
|
||||
buffer_send_status (ctx, NULL, "%s", "");
|
||||
buffer_send_status (ctx, NULL, "Buffers list:");
|
||||
|
||||
int i = 1;
|
||||
LIST_FOR_EACH (struct buffer, iter, ctx->buffers)
|
||||
buffer_send_status (ctx, ctx->global_buffer,
|
||||
" [%d] %s", i++, iter->name);
|
||||
buffer_send_status (ctx, NULL, " [%d] %s", i++, iter->name);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -5903,14 +5904,11 @@ handle_buffer_close (struct app_context *ctx, char *arguments)
|
|||
buffer = try_decode_buffer (ctx, (which = cut_word (&arguments)));
|
||||
|
||||
if (!buffer)
|
||||
buffer_send_error (ctx, ctx->global_buffer,
|
||||
"%s: %s", "No such buffer", which);
|
||||
buffer_send_error (ctx, NULL, "%s: %s", "No such buffer", which);
|
||||
else if (buffer == ctx->global_buffer)
|
||||
buffer_send_error (ctx, ctx->global_buffer,
|
||||
"Can't close the global buffer");
|
||||
buffer_send_error (ctx, NULL, "Can't close the global buffer");
|
||||
else if (buffer->type == BUFFER_SERVER)
|
||||
buffer_send_error (ctx, ctx->global_buffer,
|
||||
"Can't close a server buffer");
|
||||
buffer_send_error (ctx, NULL, "Can't close a server buffer");
|
||||
else
|
||||
{
|
||||
if (buffer == ctx->current_buffer)
|
||||
|
@ -6029,7 +6027,7 @@ handle_command_set_assign_item (struct app_context *ctx,
|
|||
|
||||
if (e)
|
||||
{
|
||||
buffer_send_error (ctx, ctx->global_buffer,
|
||||
buffer_send_error (ctx, NULL,
|
||||
"Failed to set option \"%s\": %s", key, e->message);
|
||||
error_free (e);
|
||||
}
|
||||
|
@ -6038,8 +6036,7 @@ handle_command_set_assign_item (struct app_context *ctx,
|
|||
struct str_vector tmp;
|
||||
str_vector_init (&tmp);
|
||||
dump_matching_options (ctx, key, &tmp);
|
||||
buffer_send_status (ctx, ctx->global_buffer,
|
||||
"Option changed: %s", tmp.vector[0]);
|
||||
buffer_send_status (ctx, NULL, "Option changed: %s", tmp.vector[0]);
|
||||
str_vector_free (&tmp);
|
||||
}
|
||||
}
|
||||
|
@ -6064,15 +6061,14 @@ handle_command_set_assign
|
|||
config_item_parse (arguments, strlen (arguments), true, &e);
|
||||
if (e)
|
||||
{
|
||||
buffer_send_error (ctx, ctx->global_buffer,
|
||||
"Invalid value: %s", e->message);
|
||||
buffer_send_error (ctx, NULL, "Invalid value: %s", e->message);
|
||||
error_free (e);
|
||||
return true;
|
||||
}
|
||||
|
||||
if ((add | remove) && !config_item_type_is_string (new_->type))
|
||||
{
|
||||
buffer_send_error (ctx, ctx->global_buffer,
|
||||
buffer_send_error (ctx, NULL,
|
||||
"+= / -= operators need a string argument");
|
||||
config_item_destroy (new_);
|
||||
return true;
|
||||
|
@ -6100,12 +6096,12 @@ handle_command_set (struct app_context *ctx, struct handler_args *a)
|
|||
|
||||
bool result = true;
|
||||
if (!all.len)
|
||||
buffer_send_error (ctx, ctx->global_buffer, "No matches: %s", option);
|
||||
buffer_send_error (ctx, NULL, "No matches: %s", option);
|
||||
else if (!*a->arguments)
|
||||
{
|
||||
buffer_send_status (ctx, ctx->global_buffer, "%s", "");
|
||||
buffer_send_status (ctx, NULL, "%s", "");
|
||||
for (size_t i = 0; i < all.len; i++)
|
||||
buffer_send_status (ctx, ctx->global_buffer, "%s", all.vector[i]);
|
||||
buffer_send_status (ctx, NULL, "%s", all.vector[i]);
|
||||
}
|
||||
else
|
||||
result = handle_command_set_assign (ctx, &all, a->arguments);
|
||||
|
@ -6130,12 +6126,12 @@ handle_command_save (struct app_context *ctx, struct handler_args *a)
|
|||
|
||||
if (!filename)
|
||||
{
|
||||
buffer_send_error (ctx, ctx->global_buffer,
|
||||
buffer_send_error (ctx, NULL,
|
||||
"%s: %s", "Saving configuration failed", e->message);
|
||||
error_free (e);
|
||||
}
|
||||
else
|
||||
buffer_send_status (ctx, ctx->global_buffer,
|
||||
buffer_send_status (ctx, NULL,
|
||||
"Configuration written to `%s'", filename);
|
||||
free (filename);
|
||||
return true;
|
||||
|
@ -6528,11 +6524,11 @@ resolve_server (struct app_context *ctx, struct handler_args *a,
|
|||
{
|
||||
char *server_name = cut_word (&a->arguments);
|
||||
if (!(s = str_map_find (&ctx->servers, server_name)))
|
||||
buffer_send_error (ctx, ctx->global_buffer, "/%s: %s: %s",
|
||||
buffer_send_error (ctx, NULL, "/%s: %s: %s",
|
||||
command_name, "no such server", server_name);
|
||||
}
|
||||
else if (a->buffer->type == BUFFER_GLOBAL)
|
||||
buffer_send_error (ctx, a->buffer, "/%s: %s",
|
||||
buffer_send_error (ctx, NULL, "/%s: %s",
|
||||
command_name, "no server name given and this buffer is global");
|
||||
else
|
||||
s = a->buffer->server;
|
||||
|
@ -6828,25 +6824,24 @@ try_handle_command_help_option (struct app_context *ctx, const char *name)
|
|||
struct config_schema *schema = item->schema;
|
||||
if (!schema)
|
||||
{
|
||||
buffer_send_error (ctx, ctx->global_buffer,
|
||||
"%s: %s", "Option not recognized", name);
|
||||
buffer_send_error (ctx, NULL, "%s: %s", "Option not recognized", name);
|
||||
return true;
|
||||
}
|
||||
|
||||
buffer_send_status (ctx, ctx->global_buffer, "%s", "");
|
||||
buffer_send_status (ctx, ctx->global_buffer,
|
||||
buffer_send_status (ctx, NULL, "%s", "");
|
||||
buffer_send_status (ctx, NULL,
|
||||
"Option \"%s\":", name);
|
||||
buffer_send_status (ctx, ctx->global_buffer,
|
||||
buffer_send_status (ctx, NULL,
|
||||
" Description: %s", schema->comment);
|
||||
buffer_send_status (ctx, ctx->global_buffer,
|
||||
buffer_send_status (ctx, NULL,
|
||||
" Type: %s", config_item_type_name (schema->type));
|
||||
buffer_send_status (ctx, ctx->global_buffer,
|
||||
buffer_send_status (ctx, NULL,
|
||||
" Default: %s", schema->default_ ? schema->default_ : "null");
|
||||
|
||||
struct str tmp;
|
||||
str_init (&tmp);
|
||||
config_item_write (item, false, &tmp);
|
||||
buffer_send_status (ctx, ctx->global_buffer,
|
||||
buffer_send_status (ctx, NULL,
|
||||
" Current value: %s", tmp.str);
|
||||
str_free (&tmp);
|
||||
return true;
|
||||
|
@ -6857,8 +6852,8 @@ handle_command_help (struct app_context *ctx, struct handler_args *a)
|
|||
{
|
||||
if (!*a->arguments)
|
||||
{
|
||||
buffer_send_status (ctx, ctx->global_buffer, "%s", "");
|
||||
buffer_send_status (ctx, ctx->global_buffer, "Commands:");
|
||||
buffer_send_status (ctx, NULL, "%s", "");
|
||||
buffer_send_status (ctx, NULL, "Commands:");
|
||||
|
||||
int longest = 0;
|
||||
for (size_t i = 0; i < N_ELEMENTS (g_command_handlers); i++)
|
||||
|
@ -6869,8 +6864,8 @@ handle_command_help (struct app_context *ctx, struct handler_args *a)
|
|||
for (size_t i = 0; i < N_ELEMENTS (g_command_handlers); i++)
|
||||
{
|
||||
struct command_handler *handler = &g_command_handlers[i];
|
||||
buffer_send_status (ctx, ctx->global_buffer, " %-*s %s",
|
||||
longest, handler->name, handler->description);
|
||||
buffer_send_status (ctx, NULL,
|
||||
" %-*s %s", longest, handler->name, handler->description);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -6882,16 +6877,16 @@ handle_command_help (struct app_context *ctx, struct handler_args *a)
|
|||
if (strcasecmp_ascii (command, handler->name))
|
||||
continue;
|
||||
|
||||
buffer_send_status (ctx, ctx->global_buffer, "%s", "");
|
||||
buffer_send_status (ctx, ctx->global_buffer, "%s: %s",
|
||||
buffer_send_status (ctx, NULL, "%s", "");
|
||||
buffer_send_status (ctx, NULL, "%s: %s",
|
||||
handler->name, handler->description);
|
||||
buffer_send_status (ctx, ctx->global_buffer, " Arguments: %s",
|
||||
buffer_send_status (ctx, NULL, " Arguments: %s",
|
||||
handler->usage ? handler->usage : "(none)");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!try_handle_command_help_option (ctx, command))
|
||||
buffer_send_error (ctx, ctx->global_buffer,
|
||||
buffer_send_error (ctx, NULL,
|
||||
"%s: %s", "No such command or option", command);
|
||||
return true;
|
||||
}
|
||||
|
@ -6954,11 +6949,11 @@ process_user_command (struct app_context *ctx, char *input)
|
|||
|
||||
struct command_handler *handler = str_map_find (&partial, command_name);
|
||||
if (!handler)
|
||||
buffer_send_error (ctx, ctx->global_buffer,
|
||||
buffer_send_error (ctx, NULL,
|
||||
"%s: %s", "No such command", command_name);
|
||||
else if ((handler->flags & HANDLER_SERVER)
|
||||
&& args.buffer->type == BUFFER_GLOBAL)
|
||||
buffer_send_error (ctx, ctx->global_buffer,
|
||||
buffer_send_error (ctx, NULL,
|
||||
"/%s: %s", command_name, "can't do this from a global buffer");
|
||||
else if ((handler->flags & HANDLER_SERVER)
|
||||
&& !irc_is_connected ((args.s = args.buffer->server)))
|
||||
|
@ -6975,7 +6970,7 @@ process_user_command (struct app_context *ctx, char *input)
|
|||
buffer_send_error (ctx, args.buffer, "/%s: %s", command_name,
|
||||
"no channel name given and this buffer is not a channel");
|
||||
else if (!handler->handler (ctx, &args))
|
||||
buffer_send_error (ctx, ctx->global_buffer,
|
||||
buffer_send_error (ctx, NULL,
|
||||
"%s: /%s %s", "Usage", handler->name, handler->usage);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue