Browse code

cli_findpos() speedup

git-svn-id: file:///var/lib/svn/clamav-devel/trunk/clamav-devel@585 77e5149b-7576-45b1-b177-96237e5ba77b

Tomasz Kojm authored on 2004/05/30 10:42:19
Showing 3 changed files
... ...
@@ -75,6 +75,7 @@ Jens Elkner <elkner*linofee.org>
75 75
 Jason Englander <jason*englanders.cc>
76 76
 Tony Finch <dot*dotat.at>
77 77
 David Ford <david+cert*blue-labs.org>
78
+Dean Gaudet <dean-clamav*arctic.org>
78 79
 Michel Gaudet <Michel.Gaudet*ehess.fr>
79 80
 Philippe Gay <ph.gay*free.fr>
80 81
 Luca 'NERvOus' Gibelli <nervous*clamav.net>
... ...
@@ -1,3 +1,8 @@
1
+Sun May 30 03:35:38 CEST 2004 (tk)
2
+----------------------------------
3
+  * libclamav: cli_findpos: do not use modulo inside the loop; inline
4
+	       (patch from Dean Gaudet <dean-clamav*arctic.org>)
5
+
1 6
 Sun May 30 01:38:43 CEST 2004 (tk)
2 7
 ----------------------------------
3 8
   * libclamav: scanners: enable PowerPoint code (Trog)
... ...
@@ -193,6 +193,32 @@ void cl_freetrie(struct cl_node *root)
193 193
     free(root);
194 194
 }
195 195
 
196
+int inline cli_findpos(const char *buffer, int offset, int length, const struct cli_patt *pattern)
197
+{
198
+	int bufferpos = offset + CL_MIN_LENGTH;
199
+	int postfixend = offset + length;
200
+	unsigned int i;
201
+
202
+    if (bufferpos >= length)
203
+	bufferpos %= length;
204
+
205
+    for(i = CL_MIN_LENGTH; i < pattern->length; i++) {
206
+
207
+	if(bufferpos == postfixend)
208
+	    return 0;
209
+
210
+	if(pattern->pattern[i] != CLI_IGN && (char) pattern->pattern[i] != buffer[bufferpos])
211
+	    return 0;
212
+
213
+	bufferpos++;
214
+
215
+	if (bufferpos == length)
216
+	    bufferpos = 0;
217
+    }
218
+
219
+    return 1;
220
+}
221
+
196 222
 int cli_scanbuff(const char *buffer, unsigned int length, const char **virname, const struct cl_node *root, int *partcnt)
197 223
 {
198 224
 	struct cl_node *current;
... ...
@@ -257,26 +283,3 @@ int cl_scanbuff(const char *buffer, unsigned int length, const char **virname, c
257 257
     free(partcnt);
258 258
     return ret;
259 259
 }
260
-
261
-int cli_findpos(const char *buffer, int offset, int length, const struct cli_patt *pattern)
262
-{
263
-	int bufferpos = offset + CL_MIN_LENGTH;
264
-	int postfixend = offset + length;
265
-	unsigned int i;
266
-
267
-
268
-    for(i = CL_MIN_LENGTH; i < pattern->length; i++) {
269
-
270
-	bufferpos %= length;
271
-
272
-	if(bufferpos == postfixend)
273
-	    return 0;
274
-
275
-	if(pattern->pattern[i] != CLI_IGN && (char) pattern->pattern[i] != buffer[bufferpos])
276
-	    return 0;
277
-
278
-	bufferpos++;
279
-    }
280
-
281
-    return 1;
282
-}