roster.c - jacc - Jabber/XMPP client for Plan 9
(HTM) git clone git://r-36.net/jacc
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
roster.c (1309B)
---
1 /*
2 * Copy me if you can.
3 * by 20h
4 */
5
6 #include <u.h>
7 #include <libc.h>
8 #include "dat.h"
9 #include "roster.h"
10
11 void
12 freeilist(ilist *i)
13 {
14 while(i != nil){
15 if(i->name != nil)
16 free(i->name);
17 if(i->val != nil)
18 free(i->val);
19 if(i->n != nil){
20 i = i->n;
21 free(i->p);
22 } else {
23 free(i);
24 i = nil;
25 }
26 }
27 }
28
29
30 void
31 freejabberc(jabberc *j)
32 {
33 if(j != nil){
34 if(j->stat != nil)
35 free(j->stat);
36 if(j->name != nil)
37 free(j->name);
38 if(j->reso != nil)
39 free(j->reso);
40 if(j->serv != nil)
41 free(j->serv);
42 if(j->jid != nil)
43 free(j->jid);
44 if(j->show != nil)
45 free(j->show);
46 if(j->dest != nil)
47 free(j->dest);
48 if(j->list != nil)
49 freeilist(j->list);
50 free(j);
51 }
52 return;
53 }
54
55 jabberc *
56 mkjabberc(void)
57 {
58 return reallocj(nil, sizeof(jabberc), 2);
59 }
60
61 ilist *
62 lastilist(ilist *i)
63 {
64 if(i != nil)
65 while(i->n != nil)
66 i = i->n;
67
68 return i;
69 }
70
71 ilist *
72 mkilist(char *name, char *val)
73 {
74 ilist *ret;
75
76 ret = reallocj(nil, sizeof(ilist), 2);
77 if(name != nil)
78 ret->name = strdup(name);
79 if(val != nil)
80 ret->val = strdup(val);
81
82 return ret;
83 }
84
85 ilist *
86 addilist(ilist *i, char *name, char *val)
87 {
88 ilist *ret;
89
90 ret = lastilist(i);
91 if(ret == nil)
92 return mkilist(name, val);
93 else {
94 ret->n = mkilist(name, val);
95 ret->n->p = ret;
96 }
97 ret->n->n = nil;
98
99 return i;
100 }
101
102