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

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

index e8d2e8daccc4f86119de6d8b685213cf892f06c3..746e04db42268fb725873952c5f04153eba8ed63 100644 (file)
 #ifndef __BREG_H_
 #define __BREG_H_ 1
 
-//#include "bregex.h"
+
+#ifndef HAVE_REGEX_H
+#include "bregex.h"
+#else
 #include <regex.h>
+#endif
 
 /* Usage:
  *
@@ -58,7 +62,6 @@ public:
    char *replace(const char *fname);
    void debug();
 
-
    /* private */
    POOLMEM *expr;              /* search epression */
    POOLMEM *subst;             /* substitution */
index 3e5b4d61c16b4668477d15afcde84eb099c2d4e1..5bba54d34ec4ebca0ffd06e07c1153acf6a598e7 100644 (file)
  * edit()
  */
 
+typedef struct {
+   char *subst;
+   char *motif;
+   int nmatch;
+   regex_t preg;
+} breg_t ;
+
+breg_t *breg_new(char *regexp)
+{
+   Dmsg0(500, "breg: creating new breg_t object\n");
+   RUNSCRIPT *cmd = (RUNSCRIPT *)malloc(sizeof(RUNSCRIPT));
+   memset(cmd, 0, sizeof(RUNSCRIPT));
+   cmd->reset_default();
+   
+   return cmd;
+
+}
+
+
 int compute_dest_len(char *fname, char *subst, 
                     regmatch_t *pmatch, int nmatch)
 {
    int len=0;
    char *p;
+   int no;
+
    if (!fname || !subst || !pmatch || !nmatch) {
       return 0;
    }
@@ -26,7 +47,6 @@ int compute_dest_len(char *fname, char *subst,
       return 0;
    }
 
-   int no;
    for (p = subst++; *p ; p = subst++) {
       /* match $1 \1 back references */
       if ((*p == '$' || *p == '\\') && ('0' <= *subst && *subst <= '9')) {
@@ -56,6 +76,44 @@ int compute_dest_len(char *fname, char *subst,
  */
 bool extract_regexp(char *motif, regex_t *preg, POOLMEM **subst)
 {
+   if (!motif || !preg || !subst) {
+      return false;
+   }
+   /* extract 1st part */
+   POOLMEM *dest = bstrdup(motif);
+   char sep = motif[0];
+   char *search = motif + 1;
+   char *replace;
+   bool ok = false;
+   bool found_motif = false;
+
+   while (*search && !ok) {
+      if (*search == sep && *dest == '\\') {
+        *dest++ = *++search;       /* we skip separator */ 
+
+      } else if (*search == sep) {
+        *dest++ = '\0';
+        if (found_motif) {     /* already have found motif */
+           ok = true;
+        } else {
+           replace = dest;     /* get replaced string */
+           found_motif = true;
+        }
+      } else {
+        *dest++ = *search++;
+      }
+   }
+   *dest = '\0';               /* in case of */
+   
+   if (!ok || !found_motif) {
+      /* bad regexp */
+      free(dest);
+      return false;
+   }
+
+   
+  
+
    /* rechercher le 1er car sans \ devant */
    /* compiler la re dans preg */
    /* extraire le subst */
@@ -67,6 +125,8 @@ char *edit_subst(char *fname, char *subst, regmatch_t *pmatch, char *dest)
 {
    int i;
    char *p;
+   int no;
+   int len;
 
    /* il faut recopier fname dans dest
     *  on recopie le debut fname -> pmatch[0].rm_so
@@ -78,8 +138,6 @@ char *edit_subst(char *fname, char *subst, regmatch_t *pmatch, char *dest)
 
    /* on recopie le motif de remplacement (avec tous les $x) */
 
-   int no;
-   int len;
    for (p = subst++; *p ; p = subst++) {
       /* match $1 \1 back references */
       if ((*p == '$' || *p == '\\') && ('0' <= *subst && *subst <= '9')) {