Mercurial > masqmail
comparison src/expand.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 | f671821d8222 |
comparison
equal
deleted
inserted
replaced
9:31cc8a89cb74 | 10:26e34ae9a3e3 |
---|---|
18 | 18 |
19 #include "masqmail.h" | 19 #include "masqmail.h" |
20 | 20 |
21 #define MAX_VAR 50 | 21 #define MAX_VAR 50 |
22 | 22 |
23 GList *var_table_rcpt(GList *var_table, address *rcpt) | 23 GList* |
24 var_table_rcpt(GList * var_table, address * rcpt) | |
24 { | 25 { |
25 gchar *tmp_str; | 26 gchar *tmp_str; |
26 | |
27 var_table = g_list_prepend(var_table, create_pair_string("rcpt_local", rcpt->local_part)); | |
28 var_table = g_list_prepend(var_table, create_pair_string("rcpt_domain", rcpt->domain)); | |
29 | |
30 tmp_str = g_strdup_printf("%s@%s", rcpt->local_part, rcpt->domain); | |
31 var_table = g_list_prepend(var_table, create_pair_string("rcpt", tmp_str)); | |
32 g_free(tmp_str); | |
33 | 27 |
34 return var_table; | 28 var_table = g_list_prepend(var_table, create_pair_string("rcpt_local", rcpt->local_part)); |
29 var_table = g_list_prepend(var_table, create_pair_string("rcpt_domain", rcpt->domain)); | |
30 | |
31 tmp_str = g_strdup_printf("%s@%s", rcpt->local_part, rcpt->domain); | |
32 var_table = g_list_prepend(var_table, create_pair_string("rcpt", tmp_str)); | |
33 g_free(tmp_str); | |
34 | |
35 return var_table; | |
35 } | 36 } |
36 | 37 |
37 GList *var_table_msg(GList *var_table, message *msg) | 38 GList* |
39 var_table_msg(GList * var_table, message * msg) | |
38 { | 40 { |
39 address *ret_path = msg->return_path; | 41 address *ret_path = msg->return_path; |
40 gchar *tmp_str; | 42 gchar *tmp_str; |
41 | |
42 var_table = g_list_prepend(var_table, create_pair_string("uid", msg->uid)); | |
43 var_table = g_list_prepend(var_table, create_pair_string("received_host", | |
44 msg->received_host ? msg->received_host : "")); | |
45 var_table = g_list_prepend(var_table, create_pair_string("ident", msg->ident ? msg->ident : "")); | |
46 var_table = g_list_prepend(var_table, create_pair_string("return_path_local", ret_path->local_part)); | |
47 var_table = g_list_prepend(var_table, create_pair_string("return_path_domain", ret_path->domain)); | |
48 | |
49 tmp_str = g_strdup_printf("%s@%s", ret_path->local_part, ret_path->domain); | |
50 var_table = g_list_prepend(var_table, create_pair_string("return_path", tmp_str)); | |
51 g_free(tmp_str); | |
52 | 43 |
53 return var_table; | 44 var_table = g_list_prepend(var_table, create_pair_string("uid", msg->uid)); |
45 var_table = g_list_prepend(var_table, create_pair_string("received_host", msg->received_host ? msg->received_host : "")); | |
46 var_table = g_list_prepend(var_table, create_pair_string("ident", msg->ident ? msg->ident : "")); | |
47 var_table = g_list_prepend(var_table, create_pair_string("return_path_local", ret_path->local_part)); | |
48 var_table = g_list_prepend(var_table, create_pair_string("return_path_domain", ret_path->domain)); | |
49 | |
50 tmp_str = g_strdup_printf("%s@%s", ret_path->local_part, ret_path->domain); | |
51 var_table = g_list_prepend(var_table, create_pair_string("return_path", tmp_str)); | |
52 g_free(tmp_str); | |
53 | |
54 return var_table; | |
54 } | 55 } |
55 | 56 |
56 GList *var_table_conf(GList *var_table) | 57 GList* |
58 var_table_conf(GList * var_table) | |
57 { | 59 { |
58 var_table = g_list_prepend(var_table, create_pair_string("host_name", conf.host_name)); | 60 var_table = g_list_prepend(var_table, create_pair_string("host_name", conf.host_name)); |
59 var_table = g_list_prepend(var_table, create_pair_string("package", PACKAGE)); | 61 var_table = g_list_prepend(var_table, create_pair_string("package", PACKAGE)); |
60 var_table = g_list_prepend(var_table, create_pair_string("version", VERSION)); | 62 var_table = g_list_prepend(var_table, create_pair_string("version", VERSION)); |
61 | 63 |
62 return var_table; | 64 return var_table; |
63 } | 65 } |
64 | 66 |
65 gint expand(GList *var_list, gchar *format, gchar *result, gint result_len) | 67 gint |
68 expand(GList * var_list, gchar * format, gchar * result, gint result_len) | |
66 { | 69 { |
67 gchar *p = format, *q = result; | 70 gchar *p = format, *q = result; |
68 gchar *vq; | 71 gchar *vq; |
69 gint i = 0; | 72 gint i = 0; |
70 gboolean escape = FALSE; | 73 gboolean escape = FALSE; |
71 | 74 |
72 while(*p && (i < (result_len -1))){ | 75 while (*p && (i < (result_len - 1))) { |
73 if((*p == '$') && !escape){ | 76 if ((*p == '$') && !escape) { |
74 gchar *value; | 77 gchar *value; |
75 gchar var[MAX_VAR+1]; | 78 gchar var[MAX_VAR + 1]; |
76 int j = 0; | 79 int j = 0; |
77 | 80 |
78 p++; /* skip '$' */ | 81 p++; /* skip '$' */ |
79 vq = var; | 82 vq = var; |
80 | 83 |
81 if(*p == '{'){ | 84 if (*p == '{') { |
82 /* ${var} style */ | 85 /* ${var} style */ |
83 p++; /* skip '{' */ | 86 p++; /* skip '{' */ |
84 while(*p && (*p != '}') && (j < MAX_VAR)){ | 87 while (*p && (*p != '}') && (j < MAX_VAR)) { |
85 *(vq++) = *(p++); | 88 *(vq++) = *(p++); |
86 j++; | 89 j++; |
90 } | |
91 p++; | |
92 } else { | |
93 /* $var style */ | |
94 while (*p && (isalnum(*p) || (*p == '_') || (*p == '-')) && (j < MAX_VAR)) { | |
95 *(vq++) = *(p++); | |
96 j++; | |
97 } | |
98 } | |
99 *vq = 0; | |
100 | |
101 if (j < MAX_VAR) { | |
102 /* search var */ | |
103 value = (gchar *) table_find(var_list, var); | |
104 if (value) { | |
105 gchar *vp = value; | |
106 while (*vp && (i < (result_len - 1))) { | |
107 *(q++) = *(vp++); | |
108 i++; | |
109 } | |
110 } | |
111 } | |
112 } else { | |
113 if ((*p == '\\') && (!escape)) { | |
114 escape = TRUE; | |
115 } else { | |
116 *(q++) = *p; | |
117 i++; | |
118 escape = FALSE; | |
119 } | |
120 p++; | |
121 } | |
87 } | 122 } |
88 p++; | 123 *q = 0; |
89 }else{ | |
90 /* $var style */ | |
91 while(*p && (isalnum(*p) || (*p == '_') || (*p == '-')) && (j < MAX_VAR)){ | |
92 *(vq++) = *(p++); | |
93 j++; | |
94 } | |
95 } | |
96 *vq = 0; | |
97 | 124 |
98 if(j < MAX_VAR){ | 125 if (i >= (result_len - 1)) |
99 /* search var */ | 126 return -3; |
100 value = (gchar *)table_find(var_list, var); | |
101 if(value){ | |
102 gchar *vp = value; | |
103 while(*vp && (i < (result_len -1))){ | |
104 *(q++) = *(vp++); i++; | |
105 } | |
106 } | |
107 } | |
108 }else{ | |
109 if((*p == '\\') && (!escape)){ | |
110 escape = TRUE; | |
111 }else{ | |
112 *(q++) = *p; i++; | |
113 escape = FALSE; | |
114 } | |
115 p++; | |
116 } | |
117 } | |
118 *q = 0; | |
119 | 127 |
120 if(i >= (result_len -1)) | 128 return i; |
121 return -3; | |
122 | |
123 return i; | |
124 } | 129 } |
125 |