]> git.sur5r.net Git - bacula/bacula/commitdiff
ebl update
authorEric Bollengier <eric@eb.homelinux.org>
Mon, 2 Apr 2007 19:34:31 +0000 (19:34 +0000)
committerEric Bollengier <eric@eb.homelinux.org>
Mon, 2 Apr 2007 19:34:31 +0000 (19:34 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@4500 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/patches/testing/breg.c
bacula/patches/testing/breg.h
bacula/patches/testing/bregtest.c

index 83cb0b57f50dbe383913938d71412279c90cdc46..07bca726e75038fc09a864f489933dfaac2f8cbf 100644 (file)
@@ -52,9 +52,6 @@ BREGEXP *new_bregexp(const char *motif)
       return NULL;
    }
 
-   static int _start[RE_NREGS];
-   static int _end[RE_NREGS];
-
    self->result = get_pool_memory(PM_FNAME);
    self->result[0] = '\0';
 
@@ -102,15 +99,20 @@ void free_bregexps(alist *bregexps)
 
 /* Apply all regexps to fname
  */
-char *apply_bregexps(const char *fname, alist *bregexps)
+bool apply_bregexps(const char *fname, alist *bregexps, char **result)
 {
    BREGEXP *elt;
+   bool ok=false;
+
    char *ret = (char *) fname;
    foreach_alist(elt, bregexps) {
       ret = elt->replace(ret);
+      ok = ok || elt->success;
    }
    Dmsg2(500, "bregexp: fname=%s ret=%s\n", fname, ret);
-   return ret;
+
+   *result = ret;
+   return ok;
 }
 
 /* return an alist of BREGEXP or return NULL if it's not a 
@@ -149,7 +151,7 @@ bool BREGEXP::extract_regexp(const char *motif)
    if (!(sep == '!' || 
         sep == ':' || 
         sep == ';' || 
-        sep == 'ยง' || 
+        sep == '|' || 
         sep == ',' || 
         sep == '&' || 
         sep == '%' || 
@@ -163,7 +165,6 @@ bool BREGEXP::extract_regexp(const char *motif)
    char *search = (char *) motif + 1;
    int options = REG_EXTENDED | REG_NEWLINE;
    bool ok = false;
-   bool found_motif = false;
 
    /* extract 1st part */
    char *dest = expr = bstrdup(motif);
@@ -234,6 +235,7 @@ bool BREGEXP::extract_regexp(const char *motif)
 /* return regexp->result */
 char *BREGEXP::replace(const char *fname)
 {
+   success = false;            /* use this.success to known if it's ok */
    int flen = strlen(fname);
    int rc = re_search(&preg, (BREGEX_CAST char*) fname, flen, 0, flen, &regs);
 
@@ -247,7 +249,7 @@ char *BREGEXP::replace(const char *fname)
    if (len) {
       result = check_pool_memory_size(result, len);
       edit_subst(fname, &regs);
-
+      success = true;
       Dmsg2(500, "bregexp: len = %i, result_len = %i\n", len, strlen(result));
 
    } else {                    /* error in substitution */
index 606575af8472f6e9261b13b32bd1cc511c7dcf81..991ad5a2d3c8d77798a1dde7286fcd79b332215d 100644 (file)
@@ -60,7 +60,9 @@
 class BREGEXP {
 public:
    POOLMEM *result;            /* match result */
-   char *replace(const char *fname);
+   bool success;               /* match is ok */
+
+   char *replace(const char *fname); /* return this.result */
    void debug();
 
    /* private */
@@ -90,7 +92,8 @@ void free_bregexp(BREGEXP *script);
 /* fill an alist with BREGEXP from where */
 alist *get_bregexps(const char *where);
 
-char *apply_bregexps(const char *fname, alist *bregexps);
+/* apply every regexps from the alist */
+bool apply_bregexps(const char *fname, alist *bregexps, char **result);
 
 /* foreach_alist free RUNSCRIPT */
 void free_bregexps(alist *bregexps); /* you have to free alist */
index 150bcb23941d40e1440b1941fe5da09d42291b17..f8cbb92c25d8aa2f3dfb734110cdd2e648b409ca 100644 (file)
@@ -135,7 +135,7 @@ int main(int argc, char *const *argv)
 
    while (fgets(data, sizeof(data)-1, fd)) {
       strip_trailing_newline(data);
-      p = apply_bregexps(data, list);
+      apply_bregexps(data, list, &p);
       printf("%s => %s\n", data, p);
    }
    fclose(fd);