summaryrefslogtreecommitdiff
path: root/src/plugins/test_lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/test_lib.c')
-rw-r--r--src/plugins/test_lib.c50
1 files changed, 41 insertions, 9 deletions
diff --git a/src/plugins/test_lib.c b/src/plugins/test_lib.c
index efbe2cf..97d4dc5 100644
--- a/src/plugins/test_lib.c
+++ b/src/plugins/test_lib.c
@@ -24,7 +24,8 @@
*/
#include "platform.h"
#include "test_lib.h"
-
+#include <sys/types.h>
+#include <regex.h>
/**
* Function that libextractor calls for each
@@ -57,14 +58,45 @@ process_replies (void *cls,
(sd[i].type != type) ||
(sd[i].format != format) )
continue;
- if ( (EXTRACTOR_METAFORMAT_BINARY != format) &&
- ( (sd[i].data_len != data_len) ||
- (0 != memcmp (sd[i].data, data, data_len)) ) )
- continue;
- if ( (EXTRACTOR_METAFORMAT_BINARY == format) &&
- ( (sd[i].data_len > data_len) ||
- (0 != memcmp (sd[i].data, data, sd[i].data_len)) ) )
- continue;
+ if ( (sd[i].regex) &&
+ (EXTRACTOR_METAFORMAT_BINARY != format) )
+ {
+ regex_t re;
+ regmatch_t match;
+
+ if (0 !=
+ regcomp (&re,
+ sd[i].data,
+ REG_EXTENDED))
+ {
+ fprintf (stderr,
+ "Not a valid regex: %s\n",
+ sd[i].data);
+ abort ();
+ }
+ if ( ('\0' != data[data_len - 1]) ||
+ (0 != regexec (&re,
+ data,
+ 1,
+ &match,
+ 0)) )
+ {
+ regfree (&re);
+ continue;
+ }
+ regfree (&re);
+ }
+ else
+ {
+ if ( (EXTRACTOR_METAFORMAT_BINARY != format) &&
+ ( (sd[i].data_len != data_len) ||
+ (0 != memcmp (sd[i].data, data, data_len)) ) )
+ continue;
+ if ( (EXTRACTOR_METAFORMAT_BINARY == format) &&
+ ( (sd[i].data_len > data_len) ||
+ (0 != memcmp (sd[i].data, data, sd[i].data_len)) ) )
+ continue;
+ }
if (NULL != sd[i].data_mime_type)
{