]> git.sur5r.net Git - bacula/bacula/commitdiff
Use doubly linked bsr list so that consumed bsrs may be
authorKern Sibbald <kern@sibbald.com>
Wed, 19 Nov 2008 16:59:23 +0000 (16:59 +0000)
committerKern Sibbald <kern@sibbald.com>
Wed, 19 Nov 2008 16:59:23 +0000 (16:59 +0000)
     removed.  Removing not yet implemented.

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@8060 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/stored/bsr.h
bacula/src/stored/parse_bsr.c
bacula/technotes-2.5

index 4782aec87e1c2304f1decb93324061fab886153d..9e594dedfe1703de3a33c1860a9c65c8d5fb0473 100644 (file)
@@ -1,15 +1,7 @@
-/*
- * BootStrap record definition -- for restoring files.
- *
- *    Kern Sibbald, June 2002
- *
- *   Version $Id$
- *
- */
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2002-2006 Free Software Foundation Europe e.V.
+   Copyright (C) 2002-2008 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
 */
+/*
+ * BootStrap record definition -- for restoring files.
+ *
+ *    Kern Sibbald, June 2002
+ *
+ *   Version $Id$
+ *
+ */
 
 
 #ifndef __BSR_H
@@ -142,7 +142,9 @@ struct BSR_STREAM {
 };
 
 struct BSR {
+   /* NOTE!!! next must be the first item */
    BSR          *next;                /* pointer to next one */
+   BSR          *prev;                /* pointer to previous one */
    BSR          *root;                /* root bsr */
    bool          reposition;          /* set when any bsr is marked done */
    bool          mount_next_volume;   /* set when next volume should be mounted */
index 595b1fea731548f5cc9d61403bb0fc7a10fb3d12..ceeaba618e3dbb1a7bea343a6df3ee7495d4d3a8 100644 (file)
@@ -235,6 +235,7 @@ static BSR *store_vol(LEX *lc, BSR *bsr)
    }
    if (bsr->volume) {
       bsr->next = new_bsr();
+      bsr->next->prev = bsr;
       bsr = bsr->next;
    }
    /* This may actually be more than one volume separated by a |
@@ -828,11 +829,11 @@ static void free_bsr_item(BSR *bsr)
    }
 }
 
-void free_bsr(BSR *bsr)
+/*
+ * Remove a single item from the bsr tree
+ */
+void remove_bsr(BSR *bsr)
 {
-   if (!bsr) {
-      return;
-   }
    free_bsr_item((BSR *)bsr->volume);
    free_bsr_item((BSR *)bsr->client);
    free_bsr_item((BSR *)bsr->sessid);
@@ -844,17 +845,42 @@ void free_bsr(BSR *bsr)
    free_bsr_item((BSR *)bsr->FileIndex);
    free_bsr_item((BSR *)bsr->JobType);
    free_bsr_item((BSR *)bsr->JobLevel);
-   if (bsr->fileregex) bfree(bsr->fileregex);
+   if (bsr->fileregex) {
+      bfree(bsr->fileregex);
+   }
    if (bsr->fileregex_re) {
       regfree(bsr->fileregex_re);
       free(bsr->fileregex_re);
    }
-   if (bsr->attr) free_attr(bsr->attr);
-
-   free_bsr(bsr->next);
+   if (bsr->attr) {
+      free_attr(bsr->attr);
+   }
+   if (bsr->next) {
+      bsr->next->prev = bsr->prev;
+   }
+   if (bsr->prev) {
+      bsr->prev->next = bsr->next;
+   }
    free(bsr);
 }
 
+/*
+ * Free all bsrs in chain
+ */
+void free_bsr(BSR *bsr)
+{
+   BSR *next_bsr;
+
+   if (!bsr) {
+      return;
+   }
+   next_bsr = bsr->next;
+   /* Remove (free) current bsr */
+   remove_bsr(bsr);
+   /* Now get the next one */
+   free_bsr(next_bsr);
+}
+
 /*****************************************************************
  * Routines for handling volumes
  */
index 905a4d9ab7b4b4843a6955599f17a82223764dc0..f520f7677105237532104f0aa185c26725929d93 100644 (file)
@@ -10,6 +10,9 @@ filepattern (restore with regex in bsr)
 mixed priorities
 
 General:
+19Nov08
+kes  Use doubly linked bsr list so that consumed bsrs may be
+     removed.  Removing not yet implemented.
 18Nov08
 kes  Implement a fix that very likely fixes the undesired volume
      purge reported by Graham Keeling.