masqmail
diff src/rewrite.c @ 272:681863fdafbb
refactoring in the small
author | markus schnalke <meillo@marmaro.de> |
---|---|
date | Fri, 03 Dec 2010 19:13:25 -0300 |
parents | f671821d8222 |
children | 41958685480d |
line diff
1.1 --- a/src/rewrite.c Fri Dec 03 13:05:59 2010 -0300 1.2 +++ b/src/rewrite.c Fri Dec 03 19:13:25 2010 -0300 1.3 @@ -26,39 +26,38 @@ 1.4 gchar *p = hdr->value; 1.5 gchar *new_hdr = g_strndup(hdr->header, hdr->value - hdr->header); 1.6 gint tmp; 1.7 + gchar *loc_beg, *loc_end; 1.8 + gchar *dom_beg, *dom_end; 1.9 + gchar *addr_end; 1.10 + gchar *rewr_string; 1.11 + gchar *left, *right; 1.12 1.13 while (*p) { 1.14 - gchar *loc_beg, *loc_end; 1.15 - gchar *dom_beg, *dom_end; 1.16 - gchar *addr_end; 1.17 - gchar *rewr_string; 1.18 + if (!parse_address_rfc822(p, &loc_beg, &loc_end, &dom_beg, &dom_end, &addr_end)) { 1.19 + return FALSE; 1.20 + } 1.21 1.22 - if (parse_address_rfc822(p, &loc_beg, &loc_end, &dom_beg, &dom_end, &addr_end)) { 1.23 - gchar *left, *right; 1.24 + if (dom_beg) { 1.25 + left = g_strndup(p, dom_beg - p); 1.26 + right = g_strndup(dom_end, addr_end - dom_end); 1.27 1.28 - if (dom_beg != NULL) { 1.29 - left = g_strndup(p, dom_beg - p); 1.30 - right = g_strndup(dom_end, addr_end - dom_end); 1.31 + rewr_string = g_strconcat(left, domain, right, NULL); 1.32 + } else { 1.33 + left = g_strndup(p, loc_end - p); 1.34 + right = g_strndup(loc_end, addr_end - loc_end); 1.35 1.36 - rewr_string = g_strconcat(left, domain, right, NULL); 1.37 - } else { 1.38 - left = g_strndup(p, loc_end - p); 1.39 - right = g_strndup(loc_end, addr_end - loc_end); 1.40 + rewr_string = g_strconcat(left, "@", domain, right, NULL); 1.41 + } 1.42 + g_free(left); 1.43 + g_free(right); 1.44 1.45 - rewr_string = g_strconcat(left, "@", domain, right, NULL); 1.46 - } 1.47 - g_free(left); 1.48 - g_free(right); 1.49 + p = addr_end; 1.50 + if (*p == ',') { 1.51 + p++; 1.52 + } 1.53 + new_hdr = g_strconcat(new_hdr, rewr_string, *p != '\0' ? "," : NULL, NULL); 1.54 + } 1.55 1.56 - p = addr_end; 1.57 - if (*p == ',') 1.58 - p++; 1.59 - 1.60 - new_hdr = g_strconcat(new_hdr, rewr_string, *p != '\0' ? "," : NULL, NULL); 1.61 - 1.62 - } else 1.63 - return FALSE; 1.64 - } 1.65 tmp = (hdr->value - hdr->header); 1.66 g_free(hdr->header); 1.67 hdr->header = new_hdr; 1.68 @@ -79,19 +78,22 @@ 1.69 address *addr = (address *) (addr_node->data); 1.70 gchar *rewr_string = (gchar *) table_find_fnmatch(table, addr->local_part); 1.71 1.72 - if (rewr_string == NULL) 1.73 + if (rewr_string) { 1.74 + did_change = TRUE; 1.75 + } else { 1.76 rewr_string = addr->address; 1.77 - else 1.78 - did_change = TRUE; 1.79 + } 1.80 1.81 - if (rewr_string) 1.82 + if (rewr_string) { 1.83 new_hdr = g_strconcat(new_hdr, rewr_string, g_list_next(addr_node) ? "," : "\n", NULL); 1.84 + } 1.85 } 1.86 if (did_change) { 1.87 g_free(hdr->header); 1.88 hdr->header = new_hdr; 1.89 - } else 1.90 + } else { 1.91 g_free(new_hdr); 1.92 + } 1.93 1.94 return did_change; 1.95 }