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