1 /*
2 ** Copyright 2011 Double Precision, Inc.
3 ** See COPYING for distribution information.
4 */
5
6 #include "maildirsearch.h"
7
8
testmaildirsearch(const char * chset,const char * needle,const char * haystack)9 static int testmaildirsearch(const char *chset, const char *needle,
10 const char *haystack)
11 {
12 struct maildir_searchengine se;
13 char32_t *ucptr;
14 size_t ucsize;
15 size_t i;
16 unicode_convert_handle_t h=unicode_convert_tou_init(chset, &ucptr,
17 &ucsize, 1);
18
19 if (h == NULL)
20 {
21 perror("unicode_convert_tou_init");
22 return 1;
23 }
24
25 if (unicode_convert(h, haystack, strlen(haystack)))
26 {
27 unicode_convert_deinit(h, NULL);
28 perror("unicode_convert_tou");
29 return 1;
30 }
31
32 if (unicode_convert_deinit(h, NULL))
33 {
34 perror("unicode_convert_deinit");
35 return 1;
36 }
37
38 maildir_search_init(&se);
39
40 if (maildir_search_start_str_chset(&se, needle, chset))
41 {
42 perror("maildir_search_start_str_chset");
43 maildir_search_destroy(&se);
44 free(ucptr);
45 return 1;
46 }
47 maildir_search_reset(&se);
48
49 for (i=0; ucptr[i]; ++i)
50 {
51 maildir_search_step_unicode_lc(&se, ucptr[i]);
52 if (maildir_search_found(&se))
53 {
54 free(ucptr);
55 maildir_search_destroy(&se);
56 return 0;
57 }
58 }
59 free(ucptr);
60 maildir_search_destroy(&se);
61 return 2;
62 }
63
main(int argc,char ** argv)64 int main(int argc, char **argv)
65 {
66 if (argc < 4)
67 {
68 fprintf(stderr, "Invalid args\n");
69 return (1);
70 }
71
72 exit(testmaildirsearch(argv[1], argv[2], argv[3]));
73 return (0);
74 }
75