aboutsummaryrefslogtreecommitdiffstats
path: root/epan/ftypes
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2006-12-23 21:17:32 +0000
committerRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2006-12-23 21:17:32 +0000
commit017fdab8a10746a197d804130ad7865eaab5e4e3 (patch)
tree406a1df8721687fd3a18c0f81dd7356520703c4e /epan/ftypes
parentbfbb92ad284e60a92551de5b16d5103b89360411 (diff)
make the PCRE ftype use ep allocated memory instead of g_malloced memory
svn path=/trunk/; revision=20209
Diffstat (limited to 'epan/ftypes')
-rw-r--r--epan/ftypes/ftype-pcre.c57
1 files changed, 20 insertions, 37 deletions
diff --git a/epan/ftypes/ftype-pcre.c b/epan/ftypes/ftype-pcre.c
index 4c4c4fdf90..bdffb1f039 100644
--- a/epan/ftypes/ftype-pcre.c
+++ b/epan/ftypes/ftype-pcre.c
@@ -32,6 +32,7 @@
#endif
#include <ftypes-int.h>
+#include <epan/emem.h>
#ifdef HAVE_LIBPCRE
@@ -46,35 +47,44 @@ pcre_tuple_new(const char *value)
pcre_tuple_t *tuple;
const char *pcre_error_text;
int pcre_error_offset;
+ void *tmpp;
- tuple = g_malloc(sizeof(pcre_tuple_t));
- tuple->string = g_strdup(value); /* The RE as string */
+ tuple = ep_malloc(sizeof(pcre_tuple_t));
+ tuple->string = ep_strdup(value); /* The RE as string */
tuple->ex = NULL;
- /* Compile the RE */
- tuple->re = pcre_compile(
+ /* Compile the RE and convert it into ep allocated memory */
+ tmpp = pcre_compile(
value, /* pattern */
0, /* PCRE options */
&pcre_error_text, /* PCRE constant error string */
&pcre_error_offset, /* Start offset of error in pattern */
NULL /* Default char tables (C locale) */
);
+ tuple->re = ep_alloc(sizeof(pcre));
+ memcpy(tuple->re, tmpp, sizeof(pcre));
+ g_free(tmpp);
+
if (pcre_error_text) {
- tuple->error = g_strdup_printf("In regular expression \"%s\":\n"
+ tuple->error = ep_strdup_printf("In regular expression \"%s\":\n"
"%s (character position %d)",
value, pcre_error_text, pcre_error_offset);
return tuple;
} else {
tuple->error = NULL;
}
- /* Study the RE */
- tuple->ex = pcre_study(tuple->re, 0, &pcre_error_text);
+ /* Study the RE and convert it into ep allocated memory */
+ tmpp = pcre_study(tuple->re, 0, &pcre_error_text);
+ tuple->ex = ep_alloc(sizeof(pcre_extra));
+ memcpy(tuple->ex, tmpp, sizeof(pcre_extra));
+ g_free(tmpp);
+
if (pcre_error_text) {
if (tuple->error) {
- tuple->error = g_strdup_printf("In regular expression \"%s\":\n"
+ tuple->error = ep_strdup_printf("In regular expression \"%s\":\n"
"%s. %s",
value, tuple->error, pcre_error_text);
} else {
- tuple->error = g_strdup_printf("In regular expression \"%s\":\n"
+ tuple->error = ep_strdup_printf("In regular expression \"%s\":\n"
"%s",
value, pcre_error_text);
}
@@ -83,39 +93,16 @@ pcre_tuple_new(const char *value)
}
static void
-pcre_tuple_free(pcre_tuple_t *tuple)
-{
- if (tuple) {
- if (tuple->string) g_free(tuple->string);
- if (tuple->re) g_free(tuple->re);
- if (tuple->ex) g_free(tuple->ex);
- if (tuple->error) g_free(tuple->error);
- g_free(tuple);
- }
-}
-
-static void
pcre_fvalue_new(fvalue_t *fv)
{
fv->value.re = NULL;
}
-static void
-pcre_fvalue_free(fvalue_t *fv)
-{
- if (fv->value.re) {
- pcre_tuple_free(fv->value.re);
- }
-}
-
/* Generate a FT_PCRE from a parsed string pattern.
* Uses the specified logfunc() to report errors. */
static gboolean
val_from_string(fvalue_t *fv, char *pattern, LogFunc logfunc)
{
- /* Free up the old value, if we have one */
- pcre_fvalue_free(fv);
-
fv->value.re = pcre_tuple_new(pattern);
if (fv->value.re->error) {
logfunc(fv->value.re->error);
@@ -129,8 +116,6 @@ val_from_string(fvalue_t *fv, char *pattern, LogFunc logfunc)
static gboolean
val_from_unparsed(fvalue_t *fv, char *pattern, gboolean allow_partial_value _U_, LogFunc logfunc)
{
- /* Free up the old value, if we have one */
- pcre_fvalue_free(fv);
g_assert(! allow_partial_value);
fv->value.re = pcre_tuple_new(pattern);
@@ -161,8 +146,6 @@ static void
pcre_fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied)
{
g_assert(value != NULL);
- /* Free up the old value, if we have one */
- pcre_fvalue_free(fv);
g_assert(! already_copied);
fv->value.re = pcre_tuple_new(value);
}
@@ -182,7 +165,7 @@ ftype_register_pcre(void)
"Compiled Perl-Compatible Regular Expression object", /* pretty_name */
0, /* wire_size */
pcre_fvalue_new, /* new_value */
- pcre_fvalue_free, /* free_value */
+ NULL, /* free_value */
val_from_unparsed, /* val_from_unparsed */
val_from_string, /* val_from_string */
pcre_to_repr, /* val_to_string_repr */