Define stanza's attributes as const char*

In most get-like funcitons libstrophe returns pointer to a string
that resides in an internal structure (e.g. xmpp_stanza_t). Hence,
Profanity must not change such strings. Define respective variables
as 'const char*' to reduce a chance of error and conform future
libstrophe's interface.

This patch mostly replaces 'char *' with 'const char*', but also
fixes two memory leaks after stanza_get_reason(). Add comment within
stanza_get_reason() to fix conflict with different allocator types.
This commit is contained in:
Dmitry Podgorny
2016-04-27 10:31:28 +00:00
parent 5687c3e419
commit efbf233c85
13 changed files with 170 additions and 164 deletions

View File

@@ -245,11 +245,12 @@ _bookmark_result_id_handler(xmpp_stanza_t *const stanza, void *const userdata)
xmpp_ctx_t *ctx = connection_get_ctx();
char *id = (char *)userdata;
xmpp_stanza_t *ptr;
xmpp_stanza_t *nick;
xmpp_stanza_t *nick_st;
xmpp_stanza_t *password_st;
char *name;
char *jid;
char *autojoin;
const char *name;
const char *jid;
const char *autojoin;
char *nick;
char *password;
gboolean autojoin_val;
Jid *my_jid;
@@ -291,13 +292,13 @@ _bookmark_result_id_handler(xmpp_stanza_t *const stanza, void *const userdata)
log_debug("Handle bookmark for %s", jid);
name = NULL;
nick = xmpp_stanza_get_child_by_name(ptr, "nick");
if (nick) {
nick = NULL;
nick_st = xmpp_stanza_get_child_by_name(ptr, "nick");
if (nick_st) {
char *tmp;
tmp = xmpp_stanza_get_text(nick);
tmp = xmpp_stanza_get_text(nick_st);
if (tmp) {
name = strdup(tmp);
nick = strdup(tmp);
xmpp_free(ctx, tmp);
}
}
@@ -323,7 +324,7 @@ _bookmark_result_id_handler(xmpp_stanza_t *const stanza, void *const userdata)
autocomplete_add(bookmark_ac, jid);
item = malloc(sizeof(*item));
item->jid = strdup(jid);
item->nick = name;
item->nick = nick;
item->password = password;
item->autojoin = autojoin_val;
bookmark_list = g_list_append(bookmark_list, item);
@@ -333,15 +334,15 @@ _bookmark_result_id_handler(xmpp_stanza_t *const stanza, void *const userdata)
char *account_name = jabber_get_account_name();
ProfAccount *account = accounts_get_account(account_name);
if (name == NULL) {
name = account->muc_nick;
if (nick == NULL) {
nick = account->muc_nick;
}
log_debug("Autojoin %s with nick=%s", jid, name);
room_jid = jid_create_from_bare_and_resource(jid, name);
log_debug("Autojoin %s with nick=%s", jid, nick);
room_jid = jid_create_from_bare_and_resource(jid, nick);
if (!muc_active(room_jid->barejid)) {
presence_join_room(jid, name, password);
muc_join(jid, name, password, TRUE);
presence_join_room(jid, nick, password);
muc_join(jid, nick, password, TRUE);
}
jid_destroy(room_jid);
account_free(account);