Changeset: 4209bef32ad7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4209bef32ad7
Modified Files:
        monetdb5/modules/mal/pcre.c
Branch: Jul2017
Log Message:

No need to store extra data per compiled regular expression.
We can just use the default malloc/free for pcre.


diffs (243 lines):

diff --git a/monetdb5/modules/mal/pcre.c b/monetdb5/modules/mal/pcre.c
--- a/monetdb5/modules/mal/pcre.c
+++ b/monetdb5/modules/mal/pcre.c
@@ -27,10 +27,6 @@
 #ifdef HAVE_LIBPCRE
 #include <pcre.h>
 
-#if PCRE_MAJOR < 8 || (PCRE_MAJOR == 8 && PCRE_MINOR < 13)
-#define pcre_free_study my_pcre_free
-#endif
-
 #else
 
 #include <regex.h>
@@ -223,34 +219,6 @@ re_destroy( RE *p)
        }
 }
 
-#define m2p(p) (pcre*)(((size_t*)p)+1)
-#define p2m(p) (pcre*)(((size_t*)p)-1)
-
-#ifdef HAVE_LIBPCRE
-static void *
-my_pcre_malloc(size_t s)
-{
-       size_t *sz = (size_t *) GDKmalloc(s + sizeof(size_t));
-
-       if ( sz == NULL)
-               return NULL;
-       *sz = s + sizeof(size_t);
-       return (void *) (sz + 1);
-}
-
-static void
-my_pcre_free(void *blk)
-{
-       size_t *sz;
-
-       if (blk == NULL)
-               return;
-       sz = (size_t *) blk;
-       sz -= 1;
-       GDKfree(sz);
-}
-#endif
-
 static str
 pcre_compile_wrap(pcre **res, const char *pattern, bit insensitive)
 {
@@ -267,7 +235,7 @@ pcre_compile_wrap(pcre **res, const char
                        " with\n'%s'\nat %d in\n'%s'.\n",
                                err_p, errpos, pattern);
        }
-       *(pcre **) res = p2m(r);
+       *res = r;
        return MAL_SUCCEED;
 #else
        (void) res;
@@ -350,7 +318,7 @@ pcre_likeselect(BAT **bnp, BAT *b, BAT *
                          OPERATION_FAILED ": compilation of pattern \"%s\" 
failed\n", pat);
        pe = pcre_study(re, 0, &error);
        if (error != NULL) {
-               my_pcre_free(re);
+               pcre_free(re);
                pcre_free_study(pe);
                throw(MAL, "pcre.likeselect",
                          OPERATION_FAILED ": studying pattern \"%s\" 
failed\n", pat);
@@ -364,7 +332,7 @@ pcre_likeselect(BAT **bnp, BAT *b, BAT *
        bn = COLnew(0, TYPE_oid, s ? BATcount(s) : BATcount(b), TRANSIENT);
        if (bn == NULL) {
 #ifdef HAVE_LIBPCRE
-               my_pcre_free(re);
+               pcre_free(re);
                pcre_free_study(pe);
 #else
                regfree(&re);
@@ -414,7 +382,7 @@ pcre_likeselect(BAT **bnp, BAT *b, BAT *
                        scanloop(v && *v != '\200' && BODY);
        }
 #ifdef HAVE_LIBPCRE
-       my_pcre_free(re);
+       pcre_free(re);
        pcre_free_study(pe);
 #else
        regfree(&re);
@@ -432,7 +400,7 @@ pcre_likeselect(BAT **bnp, BAT *b, BAT *
   bunins_failed:
        BBPreclaim(bn);
 #ifdef HAVE_LIBPCRE
-       my_pcre_free(re);
+       pcre_free(re);
        pcre_free_study(pe);
 #else
        regfree(&re);
@@ -626,7 +594,7 @@ pcre_replace(str *res, const char *origi
        pcre_fullinfo(pcre_code, extra, PCRE_INFO_CAPTURECOUNT, &i);
        ovecsize = (i + 1) * 3;
        if ((ovector = (int *) GDKmalloc(sizeof(int) * ovecsize)) == NULL) {
-               my_pcre_free(pcre_code);
+               pcre_free(pcre_code);
                throw(MAL, "pcre_replace",MAL_MALLOC_FAIL);
        }
 
@@ -648,7 +616,7 @@ pcre_replace(str *res, const char *origi
        if (ncaptures > 0){
                tmpres = GDKmalloc(len_origin_str - len_del + (len_replacement 
* ncaptures) + 1);
                if (!tmpres) {
-                       my_pcre_free(pcre_code);
+                       pcre_free(pcre_code);
                        GDKfree(ovector);
                        throw(MAL, "pcre_replace", MAL_MALLOC_FAIL);
                }
@@ -682,7 +650,7 @@ pcre_replace(str *res, const char *origi
                tmpres = GDKstrdup(origin_str);
        }
 
-       my_pcre_free(pcre_code);
+       pcre_free(pcre_code);
        GDKfree(ovector);
        *res = tmpres;
        return MAL_SUCCEED;
@@ -744,13 +712,13 @@ pcre_replace_bat(BAT **res, BAT *origin_
        pcre_fullinfo(pcre_code, extra, PCRE_INFO_CAPTURECOUNT, &i);
        ovecsize = (i + 1) * 3;
        if ((ovector = (int *) GDKzalloc(sizeof(int) * ovecsize)) == NULL) {
-               my_pcre_free(pcre_code);
+               pcre_free(pcre_code);
                throw(MAL, "pcre_replace_bat", MAL_MALLOC_FAIL);
        }
 
        tmpbat = COLnew(origin_strs->hseqbase, TYPE_str, BATcount(origin_strs), 
TRANSIENT);
        if( tmpbat==NULL) {
-               my_pcre_free(pcre_code);
+               pcre_free(pcre_code);
                GDKfree(ovector);
                throw(MAL,"pcre.replace",MAL_MALLOC_FAIL);
        }
@@ -774,7 +742,7 @@ pcre_replace_bat(BAT **res, BAT *origin_
                if (ncaptures > 0){
                        replaced_str = GDKmalloc(len_origin_str - len_del + 
(len_replacement * ncaptures) + 1);
                        if (replaced_str == NULL) {
-                               my_pcre_free(pcre_code);
+                               pcre_free(pcre_code);
                                pcre_free_study(extra);
                                GDKfree(ovector);
                                BBPreclaim(tmpbat);
@@ -808,7 +776,7 @@ pcre_replace_bat(BAT **res, BAT *origin_
                        k += len;
                        replaced_str[k] = '\0';
                        if (BUNappend(tmpbat, replaced_str, FALSE) != 
GDK_SUCCEED) {
-                               my_pcre_free(pcre_code);
+                               pcre_free(pcre_code);
                                pcre_free_study(extra);
                                GDKfree(ovector);
                                GDKfree(replaced_str);
@@ -818,7 +786,7 @@ pcre_replace_bat(BAT **res, BAT *origin_
                        GDKfree(replaced_str);
                } else { /* no captured substrings, copy the original string 
into new bat */
                        if (BUNappend(tmpbat, origin_str, FALSE) != 
GDK_SUCCEED) {
-                               my_pcre_free(pcre_code);
+                               pcre_free(pcre_code);
                                pcre_free_study(extra);
                                GDKfree(ovector);
                                BBPreclaim(tmpbat);
@@ -828,7 +796,7 @@ pcre_replace_bat(BAT **res, BAT *origin_
        }
 
        pcre_free_study(extra);
-       my_pcre_free(pcre_code);
+       pcre_free(pcre_code);
        GDKfree(ovector);
        *res = tmpbat;
        return MAL_SUCCEED;
@@ -846,15 +814,6 @@ str
 pcre_init(void *ret)
 {
        (void) ret;
-#ifdef HAVE_LIBPCRE
-#if defined(HAVE_EMBEDDED) && defined(WIN32)
-       // TODO: what should we do here?
-#else
-       pcre_malloc = my_pcre_malloc;
-       pcre_free = my_pcre_free;
-#endif
-#else
-#endif
        return NULL;
 }
 
@@ -924,7 +883,7 @@ pcre_match_with_flags(bit *ret, const ch
        }
 #ifdef HAVE_LIBPCRE
        pos = pcre_exec(re, NULL, val, (int) strlen(val), 0, 0, NULL, 0);
-       my_pcre_free(re);
+       pcre_free(re);
 #else
        retval = regexec(&re, val, (size_t) 0, NULL, 0);
        pos = retval == REG_NOMATCH ? -1 : (retval == REG_ENOSYS ? -2 : 0);
@@ -1105,7 +1064,7 @@ PCREindex(int *res, const pcre *pattern,
        int v[2];
 
        v[0] = v[1] = *res = 0;
-       if (pcre_exec(m2p(pattern), NULL, *s, (int) strlen(*s), 0, 0, v, 2) >= 
0) {
+       if (pcre_exec(pattern, NULL, *s, (int) strlen(*s), 0, 0, v, 2) >= 0) {
                *res = v[1];
        }
        return MAL_SUCCEED;
@@ -1130,7 +1089,7 @@ PCREpatindex(int *ret, const str *pat, c
                return msg;
        GDKfree(ppat);
        msg = PCREindex(ret, re, val);
-       GDKfree(re);
+       pcre_free(re);
        return msg;
 }
 
@@ -1378,7 +1337,7 @@ BATPCRElike3(bat *ret, const bat *bid, c
                                i++;
                        }
 #ifdef HAVE_LIBPCRE
-                       my_pcre_free(re);
+                       pcre_free(re);
 #else
                        regfree(&re);
 #endif
@@ -1798,7 +1757,7 @@ pcrejoin(BAT *r1, BAT *r2, BAT *l, BAT *
                }
                if (pcrere) {
 #ifdef HAVE_LIBPCRE
-                       my_pcre_free(pcrere);
+                       pcre_free(pcrere);
                        pcre_free_study(pcreex);
                        pcrere = NULL;
                        pcreex = NULL;
@@ -1844,7 +1803,7 @@ pcrejoin(BAT *r1, BAT *r2, BAT *l, BAT *
                GDKfree(pcrepat);
 #ifdef HAVE_LIBPCRE
        if (pcrere)
-               my_pcre_free(pcrere);
+               pcre_free(pcrere);
        if (pcreex)
                pcre_free_study(pcreex);
 #else
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to