]> git.8kb.co.uk Git - dataflex/dfregex/blob - src/c/dfregex.c
Initial Commit
[dataflex/dfregex] / src / c / dfregex.c
1 /*-------------------------------------------------------------------------\r
2  * posix regex extensions\r
3  *\r
4  * Copyright (c) 2015, glyn@8kb.co.uk\r
5  * Author: Glyn Astill <glyn@8kb.co.uk>\r
6  *\r
7  *-------------------------------------------------------------------------\r
8  */\r
9 \r
10 #include <windows.h>\r
11 #include <stdio.h>\r
12 #include <stdlib.h>\r
13 #include "gnuregex.h"\r
14 #include "dfregex.h"\r
15 \r
16 DLLIMPORT int RegexpMatch (const char *str, const char *pattern, const char *flags, int errors)\r
17 {\r
18     return regexp_match(str, pattern, flags, errors);\r
19 }\r
20 \r
21 DLLIMPORT int RegexpMatches(const char *str, const char *pattern, const char *flags, char *output, int output_len, int errors)\r
22 {\r
23     char        *matches = regexp_matches(str, pattern, flags, errors);\r
24     int         matches_len;\r
25     int         result = 0;\r
26 \r
27     if (matches != NULL)\r
28     {\r
29         matches_len = strlen(matches);\r
30         if (matches_len <= output_len)\r
31         {\r
32             strncpy(output, matches, matches_len);\r
33             result = 0;\r
34         }\r
35         else\r
36             result = -1;\r
37 \r
38         wfree(matches);\r
39     }\r
40     else\r
41         result = -2;\r
42 \r
43     return result;\r
44 }\r
45 \r
46 DLLIMPORT int RegexpReplace(const char *str, const char *pattern, const char *replacement, const char *flags, char *output, int output_len, int errors)\r
47 {\r
48     char        *replaced = regexp_replace(str, pattern, replacement, flags, errors);\r
49     int         replaced_len;\r
50     int         result = 0;\r
51 \r
52     if (replaced != NULL)\r
53     {\r
54         replaced_len = strlen(replaced);\r
55 \r
56         if (replaced_len <= output_len)\r
57         {\r
58             strncpy(output, replaced, replaced_len);\r
59             result = 0;\r
60         }\r
61         else\r
62             result = -1;\r
63 \r
64         wfree(replaced);\r
65     }\r
66     else\r
67         result = -2;\r
68 \r
69 \r
70     return result;\r
71 }\r
72 \r
73 BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,\r
74                        DWORD reason        /* Reason this function is being called. */ ,\r
75                        LPVOID reserved     /* Not used. */ )\r
76 {\r
77     switch (reason)\r
78     {\r
79       case DLL_PROCESS_ATTACH:\r
80         break;\r
81 \r
82       case DLL_PROCESS_DETACH:\r
83         break;\r
84 \r
85       case DLL_THREAD_ATTACH:\r
86         break;\r
87 \r
88       case DLL_THREAD_DETACH:\r
89         break;\r
90     }\r
91 \r
92     /* Returns TRUE on success, FALSE on failure */\r
93     return TRUE;\r
94 }\r