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