From 4586b0e1e475f73ed7ac025b0c3a546f76fb3230 Mon Sep 17 00:00:00 2001 From: Přemysl Janouch Date: Mon, 8 Jan 2018 22:15:29 +0100 Subject: degesch: introduce cstr_set() --- common.c | 7 +++++ degesch.c | 106 +++++++++++++++++++------------------------------------------- 2 files changed, 39 insertions(+), 74 deletions(-) diff --git a/common.c b/common.c index bd5184c..a735aeb 100644 --- a/common.c +++ b/common.c @@ -51,6 +51,13 @@ init_openssl (void) // --- To be moved to liberty -------------------------------------------------- +static void +cstr_set (char **s, char *new) +{ + free (*s); + *s = new; +} + static ssize_t strv_find (const struct strv *v, const char *s) { diff --git a/degesch.c b/degesch.c index 3ac042d..015c33c 100644 --- a/degesch.c +++ b/degesch.c @@ -320,8 +320,7 @@ static void input_rl_set_prompt (void *input, char *prompt) { struct input_rl *self = input; - free (self->prompt); - self->prompt = prompt; + cstr_set (&self->prompt, prompt); if (!self->active) return; @@ -543,8 +542,7 @@ input_rl__restore_buffer (struct input_rl *self, struct input_rl_buffer *buffer) rl_replace_line (buffer->saved_line, true); rl_point = buffer->saved_point; rl_mark = buffer->saved_mark; - free (buffer->saved_line); - buffer->saved_line = NULL; + cstr_set (&buffer->saved_line, NULL); if (self->prompt_shown > 0) rl_redisplay (); @@ -652,8 +650,7 @@ input_rl__restore (struct input_rl *self) rl_replace_line (self->saved_line, false); rl_point = self->saved_point; rl_mark = self->saved_mark; - free (self->saved_line); - self->saved_line = NULL; + cstr_set (&self->saved_line, NULL); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -834,8 +831,7 @@ static void input_el_set_prompt (void *input, char *prompt) { struct input_el *self = input; - free (self->prompt); - self->prompt = prompt; + cstr_set (&self->prompt, prompt); if (self->prompt_shown > 0) input_el__redisplay (self); @@ -1020,8 +1016,7 @@ input_el__restore_buffer (struct input_el *self, struct input_el_buffer *buffer) el_winsertstr (self->editline, buffer->saved_line); el_cursor (self->editline, -(buffer->saved_len - buffer->saved_point)); - free (buffer->saved_line); - buffer->saved_line = NULL; + cstr_set (&buffer->saved_line, NULL); } } @@ -2697,10 +2692,9 @@ on_config_attribute_change (struct config_item *item) ssize_t id = attr_by_name (item->schema->name); if (id != -1) { - free (ctx->attrs[id]); - ctx->attrs[id] = xstrdup (item->type == CONFIG_ITEM_NULL + cstr_set (&ctx->attrs[id], xstrdup (item->type == CONFIG_ITEM_NULL ? ctx->attrs_defaults[id] - : item->value.string.str); + : item->value.string.str)); } } @@ -4256,8 +4250,7 @@ buffer_rename (struct app_context *ctx, buffer_close_log_file (buffer); buffer_open_log_file (ctx, buffer); - free (buffer->name); - buffer->name = xstrdup (new_name); + cstr_set (&buffer->name, xstrdup (new_name)); // We might have renamed the current buffer refresh_prompt (ctx); @@ -4854,8 +4847,7 @@ irc_destroy_state (struct server *s) } str_reset (&s->irc_user_mode); - free (s->irc_user_host); - s->irc_user_host = NULL; + cstr_set (&s->irc_user_host, NULL); s->cap_echo_message = false; @@ -6753,8 +6745,7 @@ irc_handle_nick (struct server *s, const struct irc_message *msg) str_map_set (&s->irc_users, user->nickname, NULL); str_map_set (&s->irc_users, new_nickname, user); - free (user->nickname); - user->nickname = xstrdup (new_nickname); + cstr_set (&user->nickname, xstrdup (new_nickname)); } static void @@ -7066,10 +7057,7 @@ irc_handle_topic (struct server *s, const struct irc_message *msg) // It would be is weird for this to be false if (channel) - { - free (channel->topic); - channel->topic = xstrdup (topic); - } + cstr_set (&channel->topic, xstrdup (topic)); if (buffer) { @@ -7111,9 +7099,8 @@ irc_try_parse_word_for_userhost (struct server *s, const char *word) bool result = false; if (!regexec (&re, word, 2, matches, 0)) { - free (s->irc_user_host); - s->irc_user_host = xstrndup (word + matches[1].rm_so, - matches[1].rm_eo - matches[1].rm_so); + cstr_set (&s->irc_user_host, xstrndup (word + matches[1].rm_so, + matches[1].rm_eo - matches[1].rm_so)); result = true; } regfree (&re); @@ -7140,7 +7127,7 @@ irc_on_registered (struct server *s, const char *nickname) { s->irc_user = irc_get_or_make_user (s, nickname); str_reset (&s->irc_user_mode); - s->irc_user_host = NULL; + cstr_set (&s->irc_user_host, NULL); s->state = IRC_REGISTERED; refresh_prompt (s->ctx); @@ -7200,12 +7187,8 @@ irc_handle_rpl_userhost (struct server *s, const struct irc_message *msg) char *userhost = equals + 2; if (irc_is_this_us (s, nick)) - { - free (s->irc_user_host); - s->irc_user_host = xstrdup (userhost); - } + cstr_set (&s->irc_user_host, xstrdup (userhost)); } - strv_free (&v); } @@ -7401,10 +7384,7 @@ irc_handle_rpl_topic (struct server *s, const struct irc_message *msg) hard_assert (channel || !buffer); if (channel) - { - free (channel->topic); - channel->topic = xstrdup (topic); - } + cstr_set (&channel->topic, xstrdup (topic)); if (buffer) log_server_status (s, buffer, "The topic is: #m", topic); @@ -7541,11 +7521,8 @@ irc_handle_isupport_prefix (struct server *s, char *value) if (*modes++ != '(' || !prefixes++ || strlen (value) != 2 * n_prefixes--) return; - free (s->irc_chanuser_modes); - free (s->irc_chanuser_prefixes); - - s->irc_chanuser_modes = xstrndup (modes, n_prefixes); - s->irc_chanuser_prefixes = xstrndup (prefixes, n_prefixes); + cstr_set (&s->irc_chanuser_modes, xstrndup (modes, n_prefixes)); + cstr_set (&s->irc_chanuser_prefixes, xstrndup (prefixes, n_prefixes)); } static void @@ -7562,8 +7539,7 @@ irc_handle_isupport_casemapping (struct server *s, char *value) static void irc_handle_isupport_chantypes (struct server *s, char *value) { - free (s->irc_chantypes); - s->irc_chantypes = xstrdup (value); + cstr_set (&s->irc_chantypes, xstrdup (value)); } static void @@ -7581,16 +7557,13 @@ irc_handle_isupport_idchan (struct server *s, char *value) str_append_data (&prefixes, pair, colon - pair); } strv_free (&v); - - free (s->irc_idchan_prefixes); - s->irc_idchan_prefixes = str_steal (&prefixes); + cstr_set (&s->irc_idchan_prefixes, str_steal (&prefixes)); } static void irc_handle_isupport_statusmsg (struct server *s, char *value) { - free (s->irc_statusmsg); - s->irc_statusmsg = xstrdup (value); + cstr_set (&s->irc_statusmsg, xstrdup (value)); } static void @@ -7600,14 +7573,10 @@ irc_handle_isupport_chanmodes (struct server *s, char *value) cstr_split (value, ",", true, &v); if (v.len >= 4) { - free (s->irc_chanmodes_list); - s->irc_chanmodes_list = xstrdup (v.vector[0]); - free (s->irc_chanmodes_param_always); - s->irc_chanmodes_param_always = xstrdup (v.vector[1]); - free (s->irc_chanmodes_param_when_set); - s->irc_chanmodes_param_when_set = xstrdup (v.vector[2]); - free (s->irc_chanmodes_param_never); - s->irc_chanmodes_param_never = xstrdup (v.vector[3]); + cstr_set (&s->irc_chanmodes_list, xstrdup (v.vector[0])); + cstr_set (&s->irc_chanmodes_param_always, xstrdup (v.vector[1])); + cstr_set (&s->irc_chanmodes_param_when_set, xstrdup (v.vector[2])); + cstr_set (&s->irc_chanmodes_param_never, xstrdup (v.vector[3])); } strv_free (&v); } @@ -8188,9 +8157,7 @@ server_rename (struct app_context *ctx, struct server *s, const char *new_name) struct str_map *servers = get_servers_config (ctx); str_map_set (servers, new_name, str_map_steal (servers, s->name)); - free (s->name); - s->name = xstrdup (new_name); - + cstr_set (&s->name, xstrdup (new_name)); buffer_rename (ctx, s->buffer, new_name); struct str_map_iter iter = str_map_iter_make (&s->irc_buffer_map); @@ -8366,8 +8333,7 @@ lua_plugin_handle_string_filter_result (struct lua_plugin *self, lua_State *L = self->L; if (lua_isnil (L, -1)) { - free (*original); - *original = NULL; + cstr_set (original, NULL); return true; } if (!lua_isstring (L, -1)) @@ -8380,10 +8346,7 @@ lua_plugin_handle_string_filter_result (struct lua_plugin *self, // Only replace the string if it's different if (strcmp (processed, *original)) - { - free (*original); - *original = xstrdup (processed); - } + cstr_set (original, xstrdup (processed)); return true; } @@ -9889,8 +9852,7 @@ static void lua_wait_dial_on_error (void *user_data, const char *error) { struct lua_wait_dial *self = user_data; - free (self->last_error); - self->last_error = xstrdup (error); + cstr_set (&self->last_error, xstrdup (error)); } static int @@ -10393,8 +10355,7 @@ plugin_load (struct app_context *ctx, const char *name) { // FIXME: this way the real name isn't available to the plugin on load, // which has effect on e.g. plugin_config_name() - free (plugin->name); - plugin->name = xstrdup (name); + cstr_set (&plugin->name, xstrdup (name)); log_global_status (ctx, "Plugin \"#s\" loaded", name); LIST_PREPEND (ctx->plugins, plugin); @@ -12431,8 +12392,7 @@ utf8_vector_to_locale (struct app_context *ctx, char **vector) if (!soft_assert (converted)) converted = xstrdup (""); - free (*vector); - *vector = converted; + cstr_set (vector, converted); } } @@ -12647,9 +12607,7 @@ input_editor_cleanup (struct app_context *ctx) log_global_error (ctx, "Could not unlink `#s': #l", ctx->editor_filename, strerror (errno)); - free (ctx->editor_filename); - ctx->editor_filename = NULL; - + cstr_set (&ctx->editor_filename, NULL); ctx->running_editor = false; } -- cgit v1.2.3-70-g09d2