degesch: buffer creation cleanup
This commit is contained in:
parent
3dc6ee9a5b
commit
8f5dec0456
41
degesch.c
41
degesch.c
@ -1591,12 +1591,14 @@ static struct ispect_field g_buffer_ispect[] =
|
||||
};
|
||||
|
||||
static struct buffer *
|
||||
buffer_new (struct input *input)
|
||||
buffer_new (struct input *input, enum buffer_type type, char *name)
|
||||
{
|
||||
struct buffer *self = xcalloc (1, sizeof *self);
|
||||
self->ref_count = 1;
|
||||
self->input = input;
|
||||
self->input_data = CALL (input, buffer_new);
|
||||
self->type = type;
|
||||
self->name = name;
|
||||
return self;
|
||||
}
|
||||
|
||||
@ -4446,9 +4448,8 @@ buffer_remove_safe (struct app_context *ctx, struct buffer *buffer)
|
||||
static void
|
||||
init_global_buffer (struct app_context *ctx)
|
||||
{
|
||||
struct buffer *global = ctx->global_buffer = buffer_new (ctx->input);
|
||||
global->type = BUFFER_GLOBAL;
|
||||
global->name = xstrdup (PROGRAM_NAME);
|
||||
struct buffer *global = ctx->global_buffer =
|
||||
buffer_new (ctx->input, BUFFER_GLOBAL, xstrdup (PROGRAM_NAME));
|
||||
|
||||
buffer_add (ctx, global);
|
||||
buffer_activate (ctx, global);
|
||||
@ -4456,6 +4457,19 @@ init_global_buffer (struct app_context *ctx)
|
||||
|
||||
// --- Users, channels ---------------------------------------------------------
|
||||
|
||||
static char *
|
||||
irc_make_buffer_name (struct server *s, const char *target)
|
||||
{
|
||||
if (!target)
|
||||
return xstrdup (s->name);
|
||||
|
||||
// XXX: this may be able to trigger the uniqueness assertion with non-UTF-8
|
||||
char *target_utf8 = irc_to_utf8 (target);
|
||||
char *result = xstrdup_printf ("%s.%s", s->name, target_utf8);
|
||||
free (target_utf8);
|
||||
return result;
|
||||
}
|
||||
|
||||
static void
|
||||
irc_user_on_destroy (void *object, void *user_data)
|
||||
{
|
||||
@ -4495,11 +4509,8 @@ irc_get_or_make_user_buffer (struct server *s, const char *nickname)
|
||||
struct user *user = irc_get_or_make_user (s, nickname);
|
||||
|
||||
// Open a new buffer for the user
|
||||
buffer = buffer_new (s->ctx->input);
|
||||
buffer->type = BUFFER_PM;
|
||||
char *nickname_utf8 = irc_to_utf8 (nickname);
|
||||
buffer->name = xstrdup_printf ("%s.%s", s->name, nickname_utf8);
|
||||
free (nickname_utf8);
|
||||
buffer = buffer_new (s->ctx->input,
|
||||
BUFFER_PM, irc_make_buffer_name (s, nickname));
|
||||
buffer->server = s;
|
||||
buffer->user = user;
|
||||
str_map_set (&s->irc_buffer_map, user->nickname, buffer);
|
||||
@ -6644,11 +6655,8 @@ irc_handle_join (struct server *s, const struct irc_message *msg)
|
||||
if (!irc_is_this_us (s, msg->prefix))
|
||||
return;
|
||||
|
||||
buffer = buffer_new (s->ctx->input);
|
||||
buffer->type = BUFFER_CHANNEL;
|
||||
char *channel_name_utf8 = irc_to_utf8 (channel_name);
|
||||
buffer->name = xstrdup_printf ("%s.%s", s->name, channel_name_utf8);
|
||||
free (channel_name_utf8);
|
||||
buffer = buffer_new (s->ctx->input,
|
||||
BUFFER_CHANNEL, irc_make_buffer_name (s, channel_name));
|
||||
buffer->server = s;
|
||||
buffer->channel = channel =
|
||||
irc_make_channel (s, xstrdup (channel_name));
|
||||
@ -8318,9 +8326,8 @@ server_add (struct app_context *ctx,
|
||||
s->config = subtree;
|
||||
|
||||
// Add a buffer and activate it
|
||||
struct buffer *buffer = s->buffer = buffer_new (ctx->input);
|
||||
buffer->type = BUFFER_SERVER;
|
||||
buffer->name = xstrdup (s->name);
|
||||
struct buffer *buffer = s->buffer = buffer_new (ctx->input,
|
||||
BUFFER_SERVER, irc_make_buffer_name (s, NULL));
|
||||
buffer->server = s;
|
||||
|
||||
buffer_add (ctx, buffer);
|
||||
|
Loading…
Reference in New Issue
Block a user