Line data Source code
1 : #include "../../burp.h"
2 : #include "../../alloc.h"
3 : #include "../../log.h"
4 : #include "lline.h"
5 :
6 : static void lline_free_content(struct lline *lline)
7 : {
8 3 : free_w(&lline->line);
9 : }
10 :
11 3 : static void lline_free(struct lline **lline)
12 : {
13 6 : if(!lline || !*lline) return;
14 3 : lline_free_content(*lline);
15 3 : free_v((void **)lline);
16 : }
17 :
18 30 : void llines_free(struct lline **lline)
19 : {
20 : struct lline *l;
21 30 : struct lline *lhead=*lline;
22 63 : while(lhead)
23 : {
24 3 : l=lhead;
25 3 : lhead=lhead->next;
26 3 : lline_free(&l);
27 : }
28 30 : *lline=NULL;
29 30 : }
30 :
31 4 : static struct lline *lline_alloc(char *line)
32 : {
33 4 : struct lline *llnew=NULL;
34 4 : if(!line)
35 : {
36 1 : logp("%s called with NULL line!\n", __func__);
37 1 : return NULL;
38 : }
39 3 : if(!(llnew=(struct lline *)
40 : calloc_w(1, sizeof(struct lline), __func__))
41 3 : || !(llnew->line=strdup_w(line, __func__)))
42 : return NULL;
43 3 : return llnew;
44 : }
45 :
46 4 : int lline_add(struct lline **lline, char *line)
47 : {
48 4 : struct lline *l=NULL;
49 4 : struct lline *llast=NULL;
50 4 : struct lline *llnew=NULL;
51 :
52 4 : if(!(llnew=lline_alloc(line))) return -1;
53 :
54 6 : for(l=*lline; l; l=l->next)
55 : {
56 3 : l->prev=llast;
57 3 : llast=l;
58 : }
59 3 : if(llast)
60 : {
61 2 : llnew->next=llast->next;
62 2 : llast->next=llnew;
63 2 : llnew->prev=llast;
64 : }
65 : else
66 : {
67 1 : *lline=llnew;
68 1 : llnew->next=l;
69 : }
70 :
71 : return 0;
72 : }
|