/[mailutils]/mailutils/libsieve/tests.c
ViewVC logotype

Diff of /mailutils/libsieve/tests.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.10 by polak, Wed Dec 25 22:31:44 2002 UTC revision 1.11 by gray, Sun Jan 5 16:56:41 2003 UTC
# Line 89  retrieve_address (void *item, void *data Line 89  retrieve_address (void *item, void *data
89  int  int
90  sieve_test_address (sieve_machine_t mach, list_t args, list_t tags)  sieve_test_address (sieve_machine_t mach, list_t args, list_t tags)
91  {  {
92    sieve_value_t *h, *v;    sieve_value_t *h, *v, *arg;
93    header_t header = NULL;    header_t header = NULL;
94    sieve_comparator_t comp = sieve_get_comparator (mach, tags);    sieve_comparator_t comp = sieve_get_comparator (mach, tags);
95      sieve_relcmp_t test = sieve_get_relcmp (mach, tags);
96    struct address_closure clos;    struct address_closure clos;
97    int rc;    int rc;
98      size_t count;
99        
100    if (mach->debug_level & MU_SIEVE_DEBUG_TRACE)    if (mach->debug_level & MU_SIEVE_DEBUG_TRACE)
101      sieve_debug (mach, "ADDRESS\n");      sieve_debug (mach, "ADDRESS\n");
# Line 115  sieve_test_address (sieve_machine_t mach Line 117  sieve_test_address (sieve_machine_t mach
117    clos.data = header;    clos.data = header;
118    clos.aget = sieve_get_address_part (tags);    clos.aget = sieve_get_address_part (tags);
119    clos.addr = NULL;    clos.addr = NULL;
120    rc = sieve_vlist_compare (h, v, comp, retrieve_address, &clos);    rc = sieve_vlist_compare (h, v, comp, test, retrieve_address, &clos, &count);
121    address_destroy (&clos.addr);    address_destroy (&clos.addr);
122      
123      if (sieve_tag_lookup (tags, "count", &arg))
124        {
125          size_t limit;
126          char *str;
127          sieve_value_t *val;
128          sieve_relcmpn_t stest;
129          
130          val = sieve_value_get (args, 1);
131          list_get (val->v.list, 0, (void **) &str);
132          limit = strtoul (str, &str, 10);
133    
134          sieve_str_to_relcmp (arg->v.string, NULL, &stest);
135          return stest (count, limit);
136        }
137    
138    return rc;    return rc;
139  }  }
140    
# Line 131  retrieve_header (void *item, void *data, Line 149  retrieve_header (void *item, void *data,
149  int  int
150  sieve_test_header (sieve_machine_t mach, list_t args, list_t tags)  sieve_test_header (sieve_machine_t mach, list_t args, list_t tags)
151  {  {
152    sieve_value_t *h, *v;    sieve_value_t *h, *v, *arg;
153    header_t header = NULL;    header_t header = NULL;
154    sieve_comparator_t comp = sieve_get_comparator (mach, tags);    sieve_comparator_t comp = sieve_get_comparator (mach, tags);
155      sieve_relcmp_t test = sieve_get_relcmp (mach, tags);
156      size_t count, mcount = 0;
157        
158    if (mach->debug_level & MU_SIEVE_DEBUG_TRACE)    if (mach->debug_level & MU_SIEVE_DEBUG_TRACE)
159      sieve_debug (mach, "HEADER\n");      sieve_debug (mach, "HEADER\n");
# Line 168  sieve_test_header (sieve_machine_t mach, Line 188  sieve_test_header (sieve_machine_t mach,
188                if (message_get_part (mach->msg, i, &message) == 0)                if (message_get_part (mach->msg, i, &message) == 0)
189                  {                  {
190                    message_get_header (message, &header);                    message_get_header (message, &header);
191                    if (sieve_vlist_compare (h, v, comp,                    if (sieve_vlist_compare (h, v, comp, test,
192                                             retrieve_header, header))                                             retrieve_header, header, &mcount))
193                      return 1;                      return 1;
194                  }                  }
195              }              }
196          }          }
197      }      }
198    message_get_header (mach->msg, &header);    message_get_header (mach->msg, &header);
199    return sieve_vlist_compare (h, v, comp, retrieve_header, header);    if (sieve_vlist_compare (h, v, comp, test, retrieve_header, header, &count))
200        return 1;
201    
202      if (sieve_tag_lookup (tags, "count", &arg))
203        {
204          size_t limit;
205          char *str;
206          sieve_value_t *val;
207          sieve_relcmpn_t stest;
208          
209          val = sieve_value_get (args, 1);
210          list_get (val->v.list, 0, (void **) &str);
211          limit = strtoul (str, &str, 10);
212    
213          sieve_str_to_relcmp (arg->v.string, NULL, &stest);
214          return stest (count + mcount, limit);
215        }
216    
217      return 0;
218  }  }
219    
220  int  int
# Line 212  sieve_test_envelope (sieve_machine_t mac Line 250  sieve_test_envelope (sieve_machine_t mac
250  {  {
251    sieve_value_t *h, *v;    sieve_value_t *h, *v;
252    sieve_comparator_t comp = sieve_get_comparator (mach, tags);    sieve_comparator_t comp = sieve_get_comparator (mach, tags);
253      sieve_relcmp_t test = sieve_get_relcmp (mach, tags);
254    struct address_closure clos;    struct address_closure clos;
255    int rc;    int rc;
256        
# Line 234  sieve_test_envelope (sieve_machine_t mac Line 273  sieve_test_envelope (sieve_machine_t mac
273    message_get_envelope (sieve_get_message (mach), (envelope_t*)&clos.data);    message_get_envelope (sieve_get_message (mach), (envelope_t*)&clos.data);
274    clos.aget = sieve_get_address_part (tags);    clos.aget = sieve_get_address_part (tags);
275    clos.addr = NULL;    clos.addr = NULL;
276    rc = sieve_vlist_compare (h, v, comp, retrieve_envelope, &clos);    rc = sieve_vlist_compare (h, v, comp, test, retrieve_envelope, &clos, NULL);
277    address_destroy (&clos.addr);    address_destroy (&clos.addr);
278    return rc;    return rc;
279  }  }
# Line 322  static sieve_tag_def_t match_part_tags[] Line 361  static sieve_tag_def_t match_part_tags[]
361    { "contains", SVT_VOID },    { "contains", SVT_VOID },
362    { "matches", SVT_VOID },    { "matches", SVT_VOID },
363    { "regex", SVT_VOID },    { "regex", SVT_VOID },
364      { "count", SVT_STRING },
365      { "value", SVT_STRING },
366    { "comparator", SVT_STRING },    { "comparator", SVT_STRING },
367    { NULL }    { NULL }
368  };  };

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.11

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26