Merge of r85:88 from branch polarssl into trunk.
[umurmur.git] / src / channel.c
index c3ddda8377ed939b211778e153b3094498643a70..3524a966f9c958dfe52ca70eefc296596c0172ed 100644 (file)
@@ -29,6 +29,8 @@
    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 #include <limits.h>
+#include <stdlib.h>
+#include <string.h>
 #include "log.h"
 #include "list.h"
 #include "client.h"
@@ -212,6 +214,7 @@ void Chan_init()
                        ch_dst = ch_itr;
                
                list_add_tail(&ch_dst->link_node, &ch_src->channel_links);
+               ch_src->linkcount++;
                Log_info("Adding channel link '%s' -> '%s'", ch_src->name, ch_dst->name);
        }
 }
@@ -342,3 +345,28 @@ void Chan_removeChannel(channel_t *ch)
 {
        list_del(&ch->node);
 }
+
+void Chan_buildTreeList(channel_t *ch, struct dlist *head)
+{
+       channellist_t *chl;
+       struct dlist *itr;
+       channel_t *sub;
+       
+       chl = malloc(sizeof(channellist_t));
+       chl->chan = ch;
+       init_list_entry(&chl->node);
+       list_add_tail(&chl->node, head);
+
+       list_iterate(itr, &ch->subs) {
+               sub = list_get_entry(itr, channel_t, node);
+               Chan_buildTreeList(sub, head);
+       }
+}
+
+void Chan_freeTreeList(struct dlist *head)
+{
+       struct dlist *itr, *save;
+       list_iterate_safe(itr, save, head) {
+               free(list_get_entry(itr, channellist_t, node));
+       }
+}