coding style fixes - closes #63
[smdp.git] / src / url.c
1 #include <stdlib.h>
2 #include <assert.h>
3 #include <string.h>
4 #include <stdio.h>
5
6 #include "url.h"
7
8 static void url_del_elem(url_t *elem);
9 static void url_print(url_t *u);
10
11 static url_t *list;
12 static int index_max;
13 static int init_ok;
14
15 void url_init(void) {
16     list = NULL;
17     index_max = 0;
18     init_ok = 1;
19 }
20
21 int url_add(const char *link_name, int link_name_length, const char *target, int target_length, int x, int y) {
22     if (!init_ok) return -1;
23
24     url_t *tmp = NULL;
25     int i = 0;
26
27     if (list) {
28         tmp = list;
29         while (tmp->next) {
30             tmp = tmp->next;
31             i++;
32         }
33         tmp->next = malloc(sizeof(url_t));
34         assert(tmp->next);
35         tmp = tmp->next;
36     } else {
37         list = malloc(sizeof(url_t));
38         tmp = list;
39         assert(tmp);
40     }
41
42     tmp -> link_name = calloc(link_name_length, sizeof(char));
43     assert(tmp->link_name);
44     strncpy(tmp->link_name, link_name, link_name_length);
45
46     tmp->target = calloc(target_length, sizeof(char));
47     assert(tmp->target);
48     strncpy(tmp->target, target, target_length);
49
50     tmp->x = x;
51     tmp->y = y;
52     tmp->next = NULL;
53
54     index_max++;
55
56     return index_max-1;
57 }
58
59 char * url_get_target(int index) {
60     url_t *tmp = list;
61
62     while (index > 0 && tmp && tmp->next) {
63         tmp = tmp->next;
64         index--;
65     }
66
67     if (!index) {
68         return tmp->target;
69     } else return NULL;
70 }
71
72 char * url_get_name(int index) {
73     url_t *tmp = list;
74
75     while (index > 0 && tmp && tmp->next) {
76         tmp = tmp->next;
77         index --;
78     }
79
80     if (!index) {
81         return tmp->link_name;
82     } else return NULL;
83 }
84
85 void url_purge() {
86     url_del_elem(list);
87     list = NULL;
88     index_max = 0;
89     init_ok = 0;
90 }
91
92 static void url_del_elem(url_t *elem) {
93     if (!elem) return;
94
95     if (elem->next) {
96         url_del_elem(elem->next);
97         elem->next = NULL;
98     }
99
100     if (elem->target) {
101         free(elem->target);
102         elem->target = NULL;
103     }
104
105     if (elem->link_name) {
106         free(elem->link_name);
107         elem->link_name = NULL;
108     }
109
110     free(elem);
111 }
112
113 void url_dump(void) {
114     if (!list) return;
115
116     url_t *tmp = list;
117
118     while (tmp) {
119         url_print(tmp);
120         if (tmp->next)
121             tmp = tmp->next;
122         else break;
123     }
124 }
125
126 static void url_print(url_t *u) {
127     printf("url_t @ %p\n", u);
128 }
129
130 int url_get_amount(void) {
131     return index_max;
132 }