comparison src/address.c @ 10:26e34ae9a3e3

changed indention and line wrapping to a more consistent style
author meillo@marmaro.de
date Mon, 27 Oct 2008 16:23:10 +0100
parents 08114f7dcc23
children 49dab67fe461
comparison
equal deleted inserted replaced
9:31cc8a89cb74 10:26e34ae9a3e3
17 */ 17 */
18 18
19 #include "masqmail.h" 19 #include "masqmail.h"
20 #include <fnmatch.h> 20 #include <fnmatch.h>
21 21
22 address *create_address(gchar *path, gboolean is_rfc821) 22 address*
23 { 23 create_address(gchar * path, gboolean is_rfc821)
24 address *addr; 24 {
25 addr = _create_address(path, NULL, is_rfc821); 25 address *addr;
26 26 addr = _create_address(path, NULL, is_rfc821);
27 if(addr != NULL){ 27
28 addr_unmark_delivered(addr); 28 if (addr != NULL) {
29 } 29 addr_unmark_delivered(addr);
30 return addr; 30 }
31 } 31 return addr;
32 32 }
33 address *create_address_qualified(gchar *path, gboolean is_rfc821, 33
34 gchar *domain) 34 address*
35 { 35 create_address_qualified(gchar * path, gboolean is_rfc821, gchar * domain)
36 address *addr = create_address(path, is_rfc821); 36 {
37 if(addr != NULL){ 37 address *addr = create_address(path, is_rfc821);
38 if(addr->domain == NULL) 38 if (addr != NULL) {
39 addr->domain = g_strdup(domain); 39 if (addr->domain == NULL)
40 } 40 addr->domain = g_strdup(domain);
41 41 }
42 return addr; 42
43 return addr;
43 } 44 }
44 45
45 /* nothing special about pipes here, 46 /* nothing special about pipes here,
46 but its only called for that purpose */ 47 but its only called for that purpose */
47 address *create_address_pipe(gchar *path) 48 address*
48 { 49 create_address_pipe(gchar * path)
49 address *addr = g_malloc(sizeof(address)); 50 {
50 51 address *addr = g_malloc(sizeof(address));
51 if(addr){ 52
52 memset(addr, 0, sizeof(address)); 53 if (addr) {
53 addr->address = g_strchomp(g_strdup(path)); 54 memset(addr, 0, sizeof(address));
54 addr->local_part = g_strdup(addr->address); 55 addr->address = g_strchomp(g_strdup(path));
55 56 addr->local_part = g_strdup(addr->address);
56 addr->domain = g_strdup("localhost"); /* quick hack */ 57
57 } 58 addr->domain = g_strdup("localhost"); /* quick hack */
58 return addr; 59 }
59 } 60 return addr;
60 61 }
61 void destroy_address(address *addr) 62
62 { 63 void
63 DEBUG(6) debugf("destroy_address entered\n"); 64 destroy_address(address * addr)
64 65 {
65 g_free(addr->address); 66 DEBUG(6) debugf("destroy_address entered\n");
66 g_free(addr->local_part); 67
67 g_free(addr->domain); 68 g_free(addr->address);
68 69 g_free(addr->local_part);
69 g_free(addr); 70 g_free(addr->domain);
70 } 71
71 72 g_free(addr);
72 address *copy_modify_address(const address *orig, gchar *l_part, gchar *dom) 73 }
73 { 74
74 address *addr = NULL; 75 address*
75 76 copy_modify_address(const address * orig, gchar * l_part, gchar * dom)
76 if(orig){ 77 {
77 addr = g_malloc(sizeof(address)); 78 address *addr = NULL;
78 if(addr){ 79
79 addr->address = g_strdup(orig->address); 80 if (orig) {
80 81 addr = g_malloc(sizeof(address));
81 if(l_part == NULL) 82 if (addr) {
82 addr->local_part = g_strdup(orig->local_part); 83 addr->address = g_strdup(orig->address);
83 else 84
84 addr->local_part = g_strdup(l_part); 85 if (l_part == NULL)
85 86 addr->local_part = g_strdup(orig->local_part);
86 if(dom == NULL) 87 else
87 addr->domain = g_strdup(orig->domain); 88 addr->local_part = g_strdup(l_part);
88 else 89
89 addr->domain = g_strdup(dom); 90 if (dom == NULL)
90 91 addr->domain = g_strdup(orig->domain);
91 addr->flags = 0; 92 else
92 addr->children = NULL; 93 addr->domain = g_strdup(dom);
93 addr->parent = NULL; 94
94 } 95 addr->flags = 0;
95 } 96 addr->children = NULL;
96 return addr; 97 addr->parent = NULL;
97 } 98 }
98 99 }
99 gboolean addr_isequal(address *addr1, address *addr2) 100 return addr;
100 { 101 }
101 return 102
102 (strcmp(addr1->local_part, addr2->local_part) == 0) && 103 gboolean
103 (strcasecmp(addr1->domain, addr2->domain) == 0); 104 addr_isequal(address * addr1, address * addr2)
105 {
106 return
107 (strcmp(addr1->local_part, addr2->local_part) == 0) &&
108 (strcasecmp(addr1->domain, addr2->domain) == 0);
104 } 109 }
105 110
106 /* searches in ancestors of addr1 */ 111 /* searches in ancestors of addr1 */
107 gboolean addr_isequal_parent(address *addr1, address *addr2) 112 gboolean
108 { 113 addr_isequal_parent(address * addr1, address * addr2)
109 address *addr; 114 {
110 115 address *addr;
111 for(addr = addr1; addr; addr = addr->parent) 116
112 if(addr_isequal(addr, addr2)) 117 for (addr = addr1; addr; addr = addr->parent)
113 return TRUE; 118 if (addr_isequal(addr, addr2))
114 119 return TRUE;
115 return FALSE; 120
121 return FALSE;
116 } 122 }
117 123
118 /* careful, this is recursive */ 124 /* careful, this is recursive */
119 /* returns TRUE if ALL children have been delivered */ 125 /* returns TRUE if ALL children have been delivered */
120 gboolean addr_is_delivered_children(address *addr) 126 gboolean
121 { 127 addr_is_delivered_children(address * addr)
122 GList *addr_node; 128 {
123 129 GList *addr_node;
124 if(addr->children == NULL) return addr_is_delivered(addr); 130
125 131 if (addr->children == NULL)
126 foreach(addr->children, addr_node){ 132 return addr_is_delivered(addr);
127 address *addr = (address *)(addr_node->data); 133
128 if(!addr_is_delivered_children(addr)) 134 foreach(addr->children, addr_node) {
129 return FALSE; 135 address *addr = (address *) (addr_node->data);
130 } 136 if (!addr_is_delivered_children(addr))
131 return TRUE; 137 return FALSE;
138 }
139 return TRUE;
132 } 140 }
133 141
134 /* careful, this is recursive */ 142 /* careful, this is recursive */
135 /* returns TRUE if ALL children have been either delivered or have failed */ 143 /* returns TRUE if ALL children have been either delivered or have failed */
136 gboolean addr_is_finished_children(address *addr) 144 gboolean
137 { 145 addr_is_finished_children(address * addr)
138 GList *addr_node; 146 {
139 147 GList *addr_node;
140 if(addr->children == NULL) return (addr_is_failed(addr) || addr_is_delivered(addr)); 148
141 149 if (addr->children == NULL)
142 foreach(addr->children, addr_node){ 150 return (addr_is_failed(addr) || addr_is_delivered(addr));
143 address *addr = (address *)(addr_node->data); 151
144 if(!addr_is_finished_children(addr)) 152 foreach(addr->children, addr_node) {
145 return FALSE; 153 address *addr = (address *) (addr_node->data);
146 } 154 if (!addr_is_finished_children(addr))
147 return TRUE; 155 return FALSE;
156 }
157 return TRUE;
148 } 158 }
149 159
150 /* find original address */ 160 /* find original address */
151 address *addr_find_ancestor(address *addr) 161 address*
152 { 162 addr_find_ancestor(address * addr)
153 while(addr->parent) addr = addr->parent; 163 {
154 return addr; 164 while (addr->parent)
155 } 165 addr = addr->parent;
156 166 return addr;
157 gchar *addr_string(address *addr) 167 }
158 { 168
159 static gchar *buffer = NULL; 169 gchar*
160 170 addr_string(address * addr)
161 if(addr == NULL){ 171 {
162 g_free(buffer); 172 static gchar *buffer = NULL;
163 buffer = NULL; 173
164 return NULL; 174 if (addr == NULL) {
165 } 175 g_free(buffer);
166 if(buffer) 176 buffer = NULL;
167 g_free(buffer); 177 return NULL;
168 178 }
169 if(addr->local_part[0] == 0){ 179 if (buffer)
170 buffer = g_strdup("<>"); 180 g_free(buffer);
171 }else{ 181
172 buffer = g_strdup_printf("<%s@%s>", 182 if (addr->local_part[0] == 0) {
173 addr->local_part ? addr->local_part : "", 183 buffer = g_strdup("<>");
174 addr->domain ? addr->domain : ""); 184 } else {
175 } 185 buffer = g_strdup_printf("<%s@%s>", addr->local_part ? addr->local_part : "", addr->domain ? addr->domain : "");
176 return buffer; 186 }
177 } 187 return buffer;
178 188 }
179 gint addr_match(address *addr1, address *addr2) 189
180 { 190 gint
181 int res; 191 addr_match(address * addr1, address * addr2)
182 192 {
183 if((res = fnmatch(addr1->local_part, addr2->local_part, 0)) == 0){ 193 int res;
184 if((res = fnmatch(addr1->domain, addr2->domain, FNM_CASEFOLD)) == 0) 194
185 return 0; 195 if ((res = fnmatch(addr1->local_part, addr2->local_part, 0)) == 0) {
186 } 196 if ((res = fnmatch(addr1->domain, addr2->domain, FNM_CASEFOLD)) == 0)
187 return res; 197 return 0;
188 } 198 }
189 199 return res;
200 }