diff --git a/src/common.h b/src/common.h index c223627..89cdab7 100644 --- a/src/common.h +++ b/src/common.h @@ -93,6 +93,13 @@ void *strophe_realloc(const xmpp_ctx_t *ctx, void *p, size_t size); char *strophe_strdup(const xmpp_ctx_t *ctx, const char *s); char *strophe_strndup(const xmpp_ctx_t *ctx, const char *s, size_t len); void strophe_free(const xmpp_ctx_t *ctx, void *p); +#define strophe_free_and_null(ctx, p) \ + do { \ + if (p) { \ + strophe_free(ctx, (p)); \ + (p) = NULL; \ + } \ + } while (0) /* wrappers for xmpp_log at specific levels */ void strophe_error(const xmpp_ctx_t *ctx, diff --git a/src/conn.c b/src/conn.c index 47bf9da..a7e378e 100644 --- a/src/conn.c +++ b/src/conn.c @@ -1804,21 +1804,13 @@ static void _conn_reset(xmpp_conn_t *conn) if (conn->stream_error) { xmpp_stanza_release(conn->stream_error->stanza); - if (conn->stream_error->text) - strophe_free(ctx, conn->stream_error->text); - strophe_free(ctx, conn->stream_error); - conn->stream_error = NULL; + strophe_free_and_null(ctx, conn->stream_error->text); + strophe_free_and_null(ctx, conn->stream_error); } - if (conn->domain) - strophe_free(ctx, conn->domain); - if (conn->bound_jid) - strophe_free(ctx, conn->bound_jid); - if (conn->stream_id) - strophe_free(ctx, conn->stream_id); - conn->domain = NULL; - conn->bound_jid = NULL; - conn->stream_id = NULL; + strophe_free_and_null(ctx, conn->domain); + strophe_free_and_null(ctx, conn->bound_jid); + strophe_free_and_null(ctx, conn->stream_id); conn->authenticated = 0; conn->secured = 0; conn->tls_failed = 0;