diff --git a/CMakeLists.txt b/CMakeLists.txt index bc25c95..4bfe932 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.16) project( uIRC - VERSION 0.2.1 + VERSION 0.2.2 DESCRIPTION "Simple and lightweight IRC protocol helper" LANGUAGES C ) diff --git a/src/memory/free.c b/src/memory/free.c index 53804a4..96c72d8 100644 --- a/src/memory/free.c +++ b/src/memory/free.c @@ -25,6 +25,7 @@ #include // free() #include // strcpy() +#ifdef UIRC_FEATURE_IRCV3 void uirc_free_tag(IRC_Tag* t) { @@ -39,6 +40,7 @@ uirc_free_capability(IRC_Capability* c) assert(c != NULL); free(c->name); } +#endif /* UIRC_FEATURE_IRCV3 */ void uirc_free_user(IRC_User* u) @@ -46,6 +48,7 @@ uirc_free_user(IRC_User* u) assert(u != NULL); free(u->user); free(u->nick); + free(u->host); free(u->real); } @@ -54,19 +57,20 @@ uirc_free_message(IRC_Message* m) { assert(m != NULL); - free(m->command); - - for (unsigned short i = 0; m->args[i] != NULL; i++) free(m->args[i]); - - for (llist_t* t = m->tag_list; t != NULL; t = t->next) { - uirc_free_tag(t->content); - remove_linked_list_elem(t); - } - if (m->source != NULL) { uirc_free_user(m->source); free(m->source); } + + free(m->command); + for (unsigned short i = 0; m->args[i] != NULL; i++) free(m->args[i]); + +#ifdef UIRC_FEATURE_IRCV3 + for (llist_t* t = m->tag_list; t != NULL; t = t->next) { + uirc_free_tag(t->content); + remove_linked_list_elem(t); + } +#endif /* UIRC_FEATURE_IRCV3 */ } void @@ -75,8 +79,8 @@ uirc_free_buffer(IRC_Buffer* b) assert(b != NULL); free(b->name); - free(b->key); free(b->topic); + free(b->key); for (llist_t* t = b->user_list; t != NULL; t = t->next) { uirc_free_user(t->content); @@ -96,8 +100,11 @@ uirc_free_network(IRC_Network* n) free(n->addr); free(n->svc); - uirc_free_user(n->user); - free(n->user); + + if (n->user != NULL) { + uirc_free_user(n->user); + free(n->user); + } for (llist_t* t = n->buf_list; t != NULL; t = t->next) { uirc_free_buffer(t->content);