]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/record.h
Fix build without sd lock debug
[bacula/bacula] / bacula / src / stored / record.h
index f0c3684d0c0a76b8b392486649bc7e0c0b72eb03..cf14ab81909b635458c7461aa34a95257626f13a 100644 (file)
@@ -2,43 +2,55 @@
  * Record, and label definitions for Bacula
  *  media data format.
  *
+ *   Kern Sibbald, MM
+ *
  *   Version $Id$
  *
  */
 /*
-   Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker
+   Bacula® - The Network Backup Solution
+
+   Copyright (C) 2000-2006 Free Software Foundation Europe e.V.
 
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2 of
-   the License, or (at your option) any later version.
+   The main author of Bacula is Kern Sibbald, with contributions from
+   many others, a complete list can be found in the file AUTHORS.
+   This program is Free Software; you can redistribute it and/or
+   modify it under the terms of version two of the GNU General Public
+   License as published by the Free Software Foundation plus additions
+   that are listed in the file LICENSE.
 
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    General Public License for more details.
 
-   You should have received a copy of the GNU General Public
-   License along with this program; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-   MA 02111-1307, USA.
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA.
 
- */
+   Bacula® is a registered trademark of John Walker.
+   The licensor of Bacula is the Free Software Foundation Europe
+   (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
+   Switzerland, email:ftf@fsfeurope.org.
+*/
 
 
 #ifndef __RECORD_H
 #define __RECORD_H 1
 
 /* Return codes from read_device_volume_label() */
-#define VOL_NOT_READ     0               /* Volume label not read */
-#define VOL_OK           1               /* volume name OK */
-#define VOL_NO_LABEL     2               /* volume not labeled */
-#define VOL_IO_ERROR     3               /* volume I/O error */
-#define VOL_NAME_ERROR   4               /* Volume name mismatch */
-#define VOL_CREATE_ERROR  5              /* Error creating label */
-#define VOL_VERSION_ERROR 6              /* Bacula version error */
-#define VOL_LABEL_ERROR   7              /* Bad label type */
-#define VOL_NO_MEDIA     8               /* Hard error -- no media present */
+enum {
+   VOL_NOT_READ = 1,                      /* Volume label not read */
+   VOL_OK,                                /* volume name OK */
+   VOL_NO_LABEL,                          /* volume not labeled */
+   VOL_IO_ERROR,                          /* volume I/O error */
+   VOL_NAME_ERROR,                        /* Volume name mismatch */
+   VOL_CREATE_ERROR,                      /* Error creating label */
+   VOL_VERSION_ERROR,                     /* Bacula version error */
+   VOL_LABEL_ERROR,                       /* Bad label type */
+   VOL_NO_MEDIA                           /* Hard error -- no media present */
+};
 
 
 /*  See block.h for RECHDR_LENGTH */
  */
 
 /* Record state bit definitions */
-#define REC_NO_HEADER       (1<<0)   /* No header read */
+#define REC_NO_HEADER        (1<<0)   /* No header read */
 #define REC_PARTIAL_RECORD   (1<<1)   /* returning partial record */
 #define REC_BLOCK_EMPTY      (1<<2)   /* not enough data in block */
-#define REC_NO_MATCH        (1<<3)   /* No match on continuation data */
+#define REC_NO_MATCH         (1<<3)   /* No match on continuation data */
 #define REC_CONTINUATION     (1<<4)   /* Continuation record found */
-#define REC_ISTAPE          (1<<5)   /* Set if device is tape */
+#define REC_ISTAPE           (1<<5)   /* Set if device is tape */
 
 #define is_partial_record(r) ((r)->state & REC_PARTIAL_RECORD)
 #define is_block_empty(r)    ((r)->state & REC_BLOCK_EMPTY)
 /*
  * DEV_RECORD for reading and writing records.
  * It consists of a Record Header, and the Record Data
- * 
+ *
  *  This is the memory structure for the record header.
  */
+struct BSR;                           /* satisfy forward reference */
 struct DEV_RECORD {
-   int     sync;                     /* synchronous */
-   /* File and Block are always returned on reading records, but
-    *  only returned on writing if sync is set (obviously).
+   dlink link;                        /* link for chaining in read_record.c */
+   /* File and Block are always returned during reading
+    *  and writing records.
     */
-   uint32_t File;                    /* File number */
-   uint32_t Block;                   /* Block number */
-   uint32_t VolSessionId;            /* sequential id within this session */
-   uint32_t VolSessionTime;          /* session start time */
-   int32_t  FileIndex;               /* sequential file number */
-   int32_t  Stream;                  /* stream number */
-   uint32_t data_len;                /* current record length */
-   uint32_t remainder;               /* remaining bytes to read/write */
-   uint32_t state;                   /* state bits */
+   uint32_t File;                     /* File number */
+   uint32_t Block;                    /* Block number */
+   uint32_t VolSessionId;             /* sequential id within this session */
+   uint32_t VolSessionTime;           /* session start time */
+   int32_t  FileIndex;                /* sequential file number */
+   int32_t  Stream;                   /* stream number */
+   uint32_t data_len;                 /* current record length */
+   uint32_t remainder;                /* remaining bytes to read/write */
+   uint32_t state;                    /* state bits */
+   BSR *bsr;                          /* pointer to bsr that matched */
    uint8_t  ser_buf[WRITE_RECHDR_LENGTH];   /* serialized record header goes here */
-   POOLMEM *data;                    /* Record data. This MUST be a memory pool item */
-};          
+   POOLMEM *data;                     /* Record data. This MUST be a memory pool item */
+   int32_t match_stat;                /* bsr match status */
+};
 
 
 /*
@@ -101,58 +116,58 @@ struct DEV_RECORD {
  * Note, these values are negative to distinguish them
  * from user records where the FileIndex is forced positive.
  */
-#define PRE_LABEL   -1               /* Vol label on unwritten tape */
-#define VOL_LABEL   -2               /* Volume label first file */
-#define EOM_LABEL   -3               /* Writen at end of tape */        
-#define SOS_LABEL   -4               /* Start of Session */
-#define EOS_LABEL   -5               /* End of Session */
-#define EOT_LABEL   -6               /* End of physical tape (2 eofs) */
-
-/* 
+#define PRE_LABEL   -1                /* Vol label on unwritten tape */
+#define VOL_LABEL   -2                /* Volume label first file */
+#define EOM_LABEL   -3                /* Writen at end of tape */
+#define SOS_LABEL   -4                /* Start of Session */
+#define EOS_LABEL   -5                /* End of Session */
+#define EOT_LABEL   -6                /* End of physical tape (2 eofs) */
+
+/*
  *   Volume Label Record.  This is the in-memory definition. The
  *     tape definition is defined in the serialization code itself
  *     ser_volume_label() and unser_volume_label() and is slightly different.
  */
 
+
 struct Volume_Label {
-  /*  
+  /*
    * The first items in this structure are saved
    * in the DEVICE buffer, but are not actually written
    * to the tape.
    */
-  int32_t LabelType;                 /* This is written in header only */
-  uint32_t LabelSize;                /* length of serialized label */
+  int32_t LabelType;                  /* This is written in header only */
+  uint32_t LabelSize;                 /* length of serialized label */
   /*
-   * The items below this line are stored on 
+   * The items below this line are stored on
    * the tape
    */
-  char Id[32];                       /* Bacula Immortal ... */
+  char Id[32];                        /* Bacula Immortal ... */
 
-  uint32_t VerNum;                   /* Label version number */
+  uint32_t VerNum;                    /* Label version number */
 
   /* VerNum <= 10 */
-  float64_t label_date;              /* Date tape labeled */
-  float64_t label_time;              /* Time tape labeled */
+  float64_t label_date;               /* Date tape labeled */
+  float64_t label_time;               /* Time tape labeled */
 
   /* VerNum >= 11 */
-  btime_t   label_btime;             /* tdate tape labeled */
-  btime_t   write_btime;             /* tdate tape written */
+  btime_t   label_btime;              /* tdate tape labeled */
+  btime_t   write_btime;              /* tdate tape written */
 
   /* Unused with VerNum >= 11 */
-  float64_t write_date;              /* Date this label written */
-  float64_t write_time;              /* Time this label written */
+  float64_t write_date;               /* Date this label written */
+  float64_t write_time;               /* Time this label written */
 
-  char VolName[MAX_NAME_LENGTH];      /* Volume name */
-  char PrevVolName[MAX_NAME_LENGTH];  /* Previous Volume Name */
+  char VolumeName[MAX_NAME_LENGTH];   /* Volume name */
+  char PrevVolumeName[MAX_NAME_LENGTH]; /* Previous Volume Name */
   char PoolName[MAX_NAME_LENGTH];     /* Pool name */
   char PoolType[MAX_NAME_LENGTH];     /* Pool type */
   char MediaType[MAX_NAME_LENGTH];    /* Type of this media */
 
   char HostName[MAX_NAME_LENGTH];     /* Host name of writing computer */
-  char LabelProg[50];                /* Label program name */
-  char ProgVersion[50];              /* Program version */
-  char ProgDate[50];                 /* Program build date/time */
+  char LabelProg[50];                 /* Label program name */
+  char ProgVersion[50];               /* Program version */
+  char ProgDate[50];                  /* Program build date/time */
 };
 
 #define SER_LENGTH_Volume_Label 1024   /* max serialised length of volume label */
@@ -165,27 +180,27 @@ typedef struct Volume_Label VOLUME_LABEL;
  *  This record is at the beginning and end of each session
  */
 struct Session_Label {
-  char Id[32];                       /* Bacula Immortal ... */
+  char Id[32];                        /* Bacula Immortal ... */
 
-  uint32_t VerNum;                   /* Label version number */
+  uint32_t VerNum;                    /* Label version number */
 
-  uint32_t JobId;                    /* Job id */
-  uint32_t VolumeIndex;              /* Sequence no of volume for this job */
+  uint32_t JobId;                     /* Job id */
+  uint32_t VolumeIndex;               /* Sequence no of volume for this job */
 
   /* VerNum >= 11 */
-  btime_t   write_btime;             /* Tdate this label written */
+  btime_t   write_btime;              /* Tdate this label written */
 
   /* VerNum < 11 */
-  float64_t write_date;              /* Date this label written */
+  float64_t write_date;               /* Date this label written */
 
   /* Unused VerNum >= 11 */
-  float64_t write_time;              /* Time this label written */
+  float64_t write_time;               /* Time this label written */
 
   char PoolName[MAX_NAME_LENGTH];     /* Pool name */
   char PoolType[MAX_NAME_LENGTH];     /* Pool type */
   char JobName[MAX_NAME_LENGTH];      /* base Job name */
   char ClientName[MAX_NAME_LENGTH];
-  char Job[MAX_NAME_LENGTH];         /* Unique name of this Job */
+  char Job[MAX_NAME_LENGTH];          /* Unique name of this Job */
   char FileSetName[MAX_NAME_LENGTH];
   char FileSetMD5[MAX_NAME_LENGTH];
   uint32_t JobType;
@@ -198,11 +213,11 @@ struct Session_Label {
   uint32_t StartFile;
   uint32_t EndFile;
   uint32_t JobErrors;
-  uint32_t JobStatus;                /* Job status */
+  uint32_t JobStatus;                 /* Job status */
 
 };
 typedef struct Session_Label SESSION_LABEL;
 
-#define SERIAL_BUFSIZE 1024          /* volume serialisation buffer size */
+#define SERIAL_BUFSIZE  1024          /* volume serialisation buffer size */
 
 #endif