OSDN Git Service

Fix bugs of asyncronous socket control.
[ffftp/ffftp.git] / regexp.c
1 /*=============================================================================\r
2 *\r
3 *                                                               正規表現検索\r
4 *\r
5 ===============================================================================\r
6 / Copyright (C) 1997-2007 Sota. All rights reserved.\r
7 /\r
8 / Redistribution and use in source and binary forms, with or without \r
9 / modification, are permitted provided that the following conditions \r
10 / are met:\r
11 /\r
12 /  1. Redistributions of source code must retain the above copyright \r
13 /     notice, this list of conditions and the following disclaimer.\r
14 /  2. Redistributions in binary form must reproduce the above copyright \r
15 /     notice, this list of conditions and the following disclaimer in the \r
16 /     documentation and/or other materials provided with the distribution.\r
17 /\r
18 / THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR \r
19 / IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES \r
20 / OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \r
21 / IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, \r
22 / INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, \r
23 / BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF \r
24 / USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON \r
25 / ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
26 / (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF \r
27 / THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
28 /============================================================================*/\r
29 \r
30 #define STRICT\r
31 #include <stdio.h>\r
32 #include <stdlib.h>\r
33 #include <winsock.h>\r
34 #include <windowsx.h>\r
35 \r
36 #include "common.h"\r
37 #include "jreusr.h"\r
38 \r
39 \r
40 /*===== ローカルなワーク =====*/\r
41 \r
42 static JRE2 m_jreData;\r
43 static HINSTANCE m_hDll = NULL;\r
44 static LPJRE2OPEN m_lpJre2Open = NULL;\r
45 static LPJRE2COMPILE m_lpJre2Compile = NULL;\r
46 static LPJRE2GETMATCHINFO m_lpJre2MatchInfo = NULL;\r
47 static LPJRE2CLOSE m_lpJre2Close = NULL;\r
48 static LPJREGETVERSION m_lpJreGetVersion = NULL;\r
49 static LPGETJREMESSAGE m_lpGetJreMessage = NULL;\r
50 \r
51 \r
52 \r
53 /*----- 正規表現ライブラリをロードする ----------------------------------------\r
54 *\r
55 *       Parameter\r
56 *               なし\r
57 *\r
58 *       Return Value\r
59 *               int ステータス\r
60 *                       TRUE/FALSE\r
61 *----------------------------------------------------------------------------*/\r
62 \r
63 int LoadJre(void)\r
64 {\r
65         int Sts;\r
66 \r
67         // UTF-8対応\r
68         // JRE32.DLLはUTF-8に非対応\r
69 #ifdef DISABLE_JRE32DLL\r
70         return FALSE;\r
71 #endif\r
72         Sts = FALSE;\r
73         if((m_hDll = LoadLibrary("jre32.dll")) != NULL)\r
74         {\r
75                 m_lpJre2Open = (LPJRE2OPEN)GetProcAddress(m_hDll, "Jre2Open");\r
76                 m_lpJre2Compile = (LPJRE2COMPILE)GetProcAddress(m_hDll, "Jre2Compile");\r
77                 m_lpJre2MatchInfo = (LPJRE2GETMATCHINFO)GetProcAddress(m_hDll, "Jre2GetMatchInfo");\r
78                 m_lpJre2Close = (LPJRE2CLOSE)GetProcAddress(m_hDll, "Jre2Close");\r
79                 m_lpJreGetVersion = (LPJREGETVERSION)GetProcAddress(m_hDll, "JreGetVersion");\r
80                 m_lpGetJreMessage = (LPGETJREMESSAGE)GetProcAddress(m_hDll, "GetJreMessage");\r
81 \r
82                 if((m_lpJre2Open != NULL) &&\r
83                    (m_lpJre2Compile != NULL) &&\r
84                    (m_lpJre2MatchInfo != NULL) &&\r
85                    (m_lpJre2Close != NULL) &&\r
86                    (m_lpJreGetVersion != NULL) &&\r
87                    (m_lpJreGetVersion != NULL))\r
88                 {\r
89                         memset(&m_jreData, 0, sizeof(JRE2));\r
90                         m_jreData.dwSize = sizeof(JRE2);\r
91                         m_jreData.wTranslate = 1;\r
92 \r
93                         if((*m_lpJre2Open)(&m_jreData) == TRUE)\r
94                                 Sts = TRUE;\r
95                         else\r
96                                 ReleaseJre();\r
97                 }\r
98 \r
99         }\r
100         return(Sts);;\r
101 }\r
102 \r
103 \r
104 /*----- 正規表現ライブラリをリリースする --------------------------------------\r
105 *\r
106 *       Parameter\r
107 *               なし\r
108 *\r
109 *       Return Value\r
110 *               なし\r
111 *----------------------------------------------------------------------------*/\r
112 \r
113 void ReleaseJre(void)\r
114 {\r
115         if(m_hDll != NULL)\r
116                 FreeLibrary(m_hDll);\r
117         m_hDll = NULL;\r
118 \r
119         return;\r
120 }\r
121 \r
122 \r
123 /*----- 正規表現ライブラリが使えるかどうかを返す ------------------------------\r
124 *\r
125 *       Parameter\r
126 *               なし\r
127 *\r
128 *       Return Value\r
129 *               int 正規表現ライブラリが使えるかどうか\r
130 *                       TRUE/FALSE\r
131 *----------------------------------------------------------------------------*/\r
132 \r
133 int AskJreUsable(void)\r
134 {\r
135         int Sts;\r
136 \r
137         Sts = FALSE;\r
138         if(m_hDll != NULL)\r
139                 Sts = TRUE;\r
140 \r
141         return(Sts);\r
142 }\r
143 \r
144 \r
145 /*----- 正規表現ライブラリのバージョンを返す a---------------------------------\r
146 *\r
147 *       Parameter\r
148 *               なし\r
149 *\r
150 *       Return Value\r
151 *               int バージョン\r
152 *----------------------------------------------------------------------------*/\r
153 \r
154 int GetJreVersion(void)\r
155 {\r
156         int Ver;\r
157 \r
158         Ver = -1;\r
159         if(m_hDll != NULL)\r
160                 Ver = (*m_lpJreGetVersion)();\r
161 \r
162         return(Ver);\r
163 }\r
164 \r
165 \r
166 /*----- 正規表現検索式をコンパイルする ----------------------------------------\r
167 *\r
168 *       Parameter\r
169 *               kchar *Str : 検索式\r
170 *\r
171 *       Return Value\r
172 *               int ステータス\r
173 *                       TRUE/FALSE\r
174 *----------------------------------------------------------------------------*/\r
175 \r
176 int JreCompileStr(char *Str)\r
177 {\r
178         int Sts;\r
179 \r
180         Sts = FALSE;\r
181         if(m_hDll != NULL)\r
182                 Sts = (*m_lpJre2Compile)(&m_jreData, Str);\r
183 \r
184         return(Sts);\r
185 }\r
186 \r
187 \r
188 /*----- 文字列が一致するかどうかを返す ----------------------------------------\r
189 *\r
190 *       Parameter\r
191 *               char *Str : 文字列\r
192 *               UINT nStart : 検索開始位置\r
193 *\r
194 *       Return Value\r
195 *               char *見つかった位置\r
196 *                       NULL=見つからなかった\r
197 *----------------------------------------------------------------------------*/\r
198 \r
199 char *JreGetStrMatchInfo(char *Str, UINT nStart)\r
200 {\r
201         char *Ret;\r
202 \r
203         Ret = NULL;\r
204         if(m_hDll != NULL)\r
205         {\r
206                 m_jreData.nStart = nStart;\r
207                 if((*m_lpJre2MatchInfo)(&m_jreData, Str) == TRUE)\r
208                          Ret = Str + m_jreData.nPosition;\r
209         }\r
210         return(Ret);\r
211 }\r
212 \r
213 \r