Browse code

add cl_engine_(set|get)

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

Tomasz Kojm authored on 2008/11/11 23:42:12
Showing 3 changed files
... ...
@@ -115,6 +115,20 @@ extern int cl_init(unsigned int options);
115 115
 #define CL_ENGINE_DEFAULT   0x0
116 116
 extern struct cl_engine *cl_engine_new(unsigned int options);
117 117
 
118
+enum cl_engine_field {
119
+    CL_ENGINE_MAX_SCANSIZE,	    /* uint64_t */
120
+    CL_ENGINE_MAX_FILESIZE,	    /* uint64_t */
121
+    CL_ENGINE_MAX_RECURSION,	    /* uint32_t	*/
122
+    CL_ENGINE_MAX_FILES,	    /* uint32_t */
123
+    CL_ENGINE_MIN_CC_COUNT,	    /* uint32_t */
124
+    CL_ENGINE_MIN_SSN_COUNT,	    /* uint32_t */
125
+    CL_ENGINE_PUA_CATEGORIES	    /* (char *) */
126
+};
127
+
128
+extern int cl_engine_set(struct cl_engine *engine, enum cl_engine_field field, const void *val);
129
+
130
+extern int cl_engine_get(struct cl_engine *engine, enum cl_engine_field field, const void *val);
131
+
118 132
 extern int cl_engine_compile(struct cl_engine *engine);
119 133
 
120 134
 extern struct cl_engine *cl_engine_dup(struct cl_engine *engine);
... ...
@@ -7,6 +7,8 @@ CLAMAV_PUBLIC {
7 7
     cl_debug;
8 8
     cl_init;
9 9
     cl_engine_new;
10
+    cl_engine_set;
11
+    cl_engine_get;
10 12
     cl_engine_compile;
11 13
     cl_engine_dup;
12 14
     cl_engine_free;
... ...
@@ -257,6 +257,78 @@ struct cl_engine *cl_engine_new(unsigned int options)
257 257
     return new;
258 258
 }
259 259
 
260
+int cl_engine_set(struct cl_engine *engine, enum cl_engine_field field, const void *val)
261
+{
262
+    if(!engine || !val)
263
+	return CL_ENULLARG;
264
+
265
+    switch(field) {
266
+	case CL_ENGINE_MAX_SCANSIZE:
267
+	    engine->maxscansize = *((uint64_t *) val);
268
+	    break;
269
+	case CL_ENGINE_MAX_FILESIZE:
270
+	    engine->maxfilesize = *((uint64_t *) val);
271
+	    break;
272
+	case CL_ENGINE_MAX_RECURSION:
273
+	    engine->maxreclevel = *((uint32_t *) val);
274
+	    break;
275
+	case CL_ENGINE_MAX_FILES:
276
+	    engine->maxfiles = *((uint32_t *) val);
277
+	    break;
278
+	case CL_ENGINE_MIN_CC_COUNT:
279
+	    engine->min_cc_count = *((uint32_t *) val);
280
+	    break;
281
+	case CL_ENGINE_MIN_SSN_COUNT:
282
+	    engine->min_ssn_count = *((uint32_t *) val);
283
+	    break;
284
+	case CL_ENGINE_PUA_CATEGORIES:
285
+	    engine->pua_cats = cli_mp_strdup(engine->mempool, (char *) val);
286
+	    if(!engine->pua_cats)
287
+		return CL_EMEM;
288
+	    break;
289
+	default:
290
+	    cli_errmsg("cl_engine_set: Incorrect field number\n");
291
+	    return CL_ENULLARG; /* FIXME */
292
+    }
293
+
294
+    return CL_SUCCESS;
295
+}
296
+
297
+int cl_engine_get(struct cl_engine *engine, enum cl_engine_field field, const void *val)
298
+{
299
+    if(!engine || !val)
300
+	return CL_ENULLARG;
301
+
302
+    switch(field) {
303
+	case CL_ENGINE_MAX_SCANSIZE:
304
+	    *((uint64_t *) val) = engine->maxscansize;
305
+	    break;
306
+	case CL_ENGINE_MAX_FILESIZE:
307
+	    *((uint64_t *) val) = engine->maxfilesize;
308
+	    break;
309
+	case CL_ENGINE_MAX_RECURSION:
310
+	    *((uint32_t *) val) = engine->maxreclevel;
311
+	    break;
312
+	case CL_ENGINE_MAX_FILES:
313
+	    *((uint32_t *) val) = engine->maxfiles;
314
+	    break;
315
+	case CL_ENGINE_MIN_CC_COUNT:
316
+	    *((uint32_t *) val) = engine->min_cc_count;
317
+	    break;
318
+	case CL_ENGINE_MIN_SSN_COUNT:
319
+	    *((uint32_t *) val) = engine->min_ssn_count;
320
+	    break;
321
+	case CL_ENGINE_PUA_CATEGORIES:
322
+	    strncpy((char *) val, engine->pua_cats, 128);
323
+	    break;
324
+	default:
325
+	    cli_errmsg("cl_engine_get: Incorrect field number\n");
326
+	    return CL_ENULLARG; /* FIXME */
327
+    }
328
+
329
+    return CL_SUCCESS;
330
+}
331
+
260 332
 int cli_checklimits(const char *who, cli_ctx *ctx, unsigned long need1, unsigned long need2, unsigned long need3) {
261 333
     int ret = CL_SUCCESS;
262 334
     unsigned long needed;