From f98e33be81f9748919aca83140f5eed889207407 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Thu, 26 Feb 2026 17:57:42 +0100 Subject: [PATCH] refactor: make Jid use glib functions --- src/command/cmd_funcs.c | 2 +- src/config/account.c | 4 ++-- src/config/account.h | 2 +- src/xmpp/jid.c | 24 +++++++++--------------- src/xmpp/jid.h | 20 ++++++++++---------- src/xmpp/presence.c | 8 ++++---- src/xmpp/session.c | 4 ++-- tests/unittests/test_jid.c | 4 ++-- 8 files changed, 31 insertions(+), 37 deletions(-) diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index ddef9dfe..c4864414 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -385,7 +385,7 @@ cmd_connect(ProfWin* window, const char* const command, gchar** args) } } - auto_char char* jid = NULL; + auto_gchar gchar* jid = NULL; auto_char char* user = strdup(user_orig); // connect with account diff --git a/src/config/account.c b/src/config/account.c index c8db480f..afda435b 100644 --- a/src/config/account.c +++ b/src/config/account.c @@ -144,13 +144,13 @@ account_new(gchar* name, gchar* jid, gchar* password, gchar* eval_password, gboo return new_account; } -char* +gchar* account_create_connect_jid(ProfAccount* account) { if (account->resource) { return create_fulljid(account->jid, account->resource); } else { - return strdup(account->jid); + return g_strdup(account->jid); } } diff --git a/src/config/account.h b/src/config/account.h index e8bda927..c6d15b46 100644 --- a/src/config/account.h +++ b/src/config/account.h @@ -84,7 +84,7 @@ ProfAccount* account_new(gchar* name, gchar* jid, gchar* password, gchar* eval_p GList* ox_enabled, GList* pgp_enabled, gchar* pgp_keyid, gchar* startscript, gchar* theme, gchar* tls_policy, gchar* auth_policy, gchar* client, int max_sessions); -char* account_create_connect_jid(ProfAccount* account); +gchar* account_create_connect_jid(ProfAccount* account); gboolean account_eval_password(ProfAccount* account); void account_free(ProfAccount* account); void account_set_server(ProfAccount* account, const char* server); diff --git a/src/xmpp/jid.c b/src/xmpp/jid.c index cdb36628..96c65f1c 100644 --- a/src/xmpp/jid.c +++ b/src/xmpp/jid.c @@ -69,13 +69,7 @@ jid_create(const gchar* const str) return NULL; } - result = malloc(sizeof(struct jid_t)); - result->str = NULL; - result->localpart = NULL; - result->domainpart = NULL; - result->resourcepart = NULL; - result->barejid = NULL; - result->fulljid = NULL; + result = g_new0(Jid, 1); result->refcnt = 1; gchar* atp = g_utf8_strchr(trimmed, -1, '@'); @@ -109,9 +103,9 @@ jid_create(const gchar* const str) } Jid* -jid_create_from_bare_and_resource(const char* const barejid, const char* const resource) +jid_create_from_bare_and_resource(const gchar* const barejid, const gchar* const resource) { - auto_char char* jid = create_fulljid(barejid, resource); + auto_gchar gchar* jid = create_fulljid(barejid, resource); return jid_create(jid); } @@ -160,8 +154,8 @@ jid_is_valid_room_form(Jid* jid) * barejid/resourcepart * Will return a newly created string that must be freed by the caller */ -char* -create_fulljid(const char* const barejid, const char* const resource) +gchar* +create_fulljid(const gchar* const barejid, const gchar* const resource) { auto_gchar gchar* barejidlower = g_utf8_strdown(barejid, -1); return g_strdup_printf("%s/%s", barejidlower, resource); @@ -172,11 +166,11 @@ create_fulljid(const char* const barejid, const char* const resource) * Full JID = "test@conference.server/person" * returns "person" */ -char* -get_nick_from_full_jid(const char* const full_room_jid) +gchar* +get_nick_from_full_jid(const gchar* const full_room_jid) { auto_gcharv gchar** tokens = g_strsplit(full_room_jid, "/", 0); - char* nick_part = NULL; + gchar* nick_part = NULL; if (tokens) { if (tokens[0] && tokens[1]) { @@ -190,7 +184,7 @@ get_nick_from_full_jid(const char* const full_room_jid) /* * get the fulljid, fall back to the barejid */ -const char* +const gchar* jid_fulljid_or_barejid(Jid* jid) { if (jid->fulljid) { diff --git a/src/xmpp/jid.h b/src/xmpp/jid.h index a591b743..ea738a63 100644 --- a/src/xmpp/jid.h +++ b/src/xmpp/jid.h @@ -41,18 +41,18 @@ struct jid_t { unsigned int refcnt; - char* str; - char* localpart; - char* domainpart; - char* resourcepart; - char* barejid; - char* fulljid; + gchar* str; + gchar* localpart; + gchar* domainpart; + gchar* resourcepart; + gchar* barejid; + gchar* fulljid; }; typedef struct jid_t Jid; Jid* jid_create(const gchar* const str); -Jid* jid_create_from_bare_and_resource(const char* const barejid, const char* const resource); +Jid* jid_create_from_bare_and_resource(const gchar* const barejid, const gchar* const resource); void jid_destroy(Jid* jid); void jid_ref(Jid* jid); @@ -60,10 +60,10 @@ void jid_auto_destroy(Jid** str); #define auto_jid __attribute__((__cleanup__(jid_auto_destroy))) gboolean jid_is_valid_room_form(Jid* jid); -char* create_fulljid(const char* const barejid, const char* const resource); -char* get_nick_from_full_jid(const char* const full_room_jid); +gchar* create_fulljid(const gchar* const barejid, const gchar* const resource); +gchar* get_nick_from_full_jid(const gchar* const full_room_jid); -const char* jid_fulljid_or_barejid(Jid* jid); +const gchar* jid_fulljid_or_barejid(Jid* jid); gchar* jid_random_resource(void); #endif diff --git a/src/xmpp/presence.c b/src/xmpp/presence.c index 3ad2880f..0ea74dde 100644 --- a/src/xmpp/presence.c +++ b/src/xmpp/presence.c @@ -268,7 +268,7 @@ _send_room_presence(xmpp_stanza_t* presence) const char* const nick = muc_nick(room); if (nick) { - auto_char char* full_room_jid = create_fulljid(room, nick); + auto_gchar gchar* full_room_jid = create_fulljid(room, nick); xmpp_stanza_set_to(presence, full_room_jid); log_debug("Sending presence to room: %s", full_room_jid); @@ -314,7 +314,7 @@ presence_change_room_nick(const char* const room, const char* const nick) const char* show = stanza_get_presence_string_from_type(presence_type); const char* status = connection_get_presence_msg(); int pri = accounts_get_priority_for_presence_type(session_get_account_name(), presence_type); - auto_char char* full_room_jid = create_fulljid(room, nick); + auto_gchar gchar* full_room_jid = create_fulljid(room, nick); xmpp_ctx_t* ctx = connection_get_ctx(); xmpp_stanza_t* presence = stanza_create_room_newnick_presence(ctx, full_room_jid); @@ -621,7 +621,7 @@ _available_handler(xmpp_stanza_t* const stanza) } return; } else { - const char* jid = jid_fulljid_or_barejid(xmpp_presence->jid); + const gchar* jid = jid_fulljid_or_barejid(xmpp_presence->jid); log_debug("Presence available handler fired for: %s", jid); } @@ -632,7 +632,7 @@ _available_handler(xmpp_stanza_t* const stanza) XMPPCaps* caps = stanza_parse_caps(stanza); if ((g_strcmp0(my_jid->fulljid, xmpp_presence->jid->fulljid) != 0) && caps) { log_debug("Presence contains capabilities."); - const char* jid = jid_fulljid_or_barejid(xmpp_presence->jid); + const gchar* jid = jid_fulljid_or_barejid(xmpp_presence->jid); _handle_caps(jid, caps); } stanza_free_caps(caps); diff --git a/src/xmpp/session.c b/src/xmpp/session.c index ebd49fef..033fa5f1 100644 --- a/src/xmpp/session.c +++ b/src/xmpp/session.c @@ -565,11 +565,11 @@ session_reconnect_now(void) return; } - auto_char char* jid = NULL; + auto_gchar gchar* jid = NULL; if (account->resource) { jid = create_fulljid(account->jid, account->resource); } else { - jid = strdup(account->jid); + jid = g_strdup(account->jid); } const char* server; unsigned short port; diff --git a/tests/unittests/test_jid.c b/tests/unittests/test_jid.c index 7bc2137e..6c472d0f 100644 --- a/tests/unittests/test_jid.c +++ b/tests/unittests/test_jid.c @@ -216,7 +216,7 @@ returns_fulljid_when_exists(void** state) { Jid* jid = jid_create("localpart@domainpart/resourcepart"); - const char* result = jid_fulljid_or_barejid(jid); + const gchar* result = jid_fulljid_or_barejid(jid); assert_string_equal("localpart@domainpart/resourcepart", result); @@ -228,7 +228,7 @@ returns_barejid_when_fulljid_not_exists(void** state) { Jid* jid = jid_create("localpart@domainpart"); - const char* result = jid_fulljid_or_barejid(jid); + const gchar* result = jid_fulljid_or_barejid(jid); assert_string_equal("localpart@domainpart", result);