X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fstored%2Frecord.h;h=eaf1f029b1ea292dd492caaee85cd7bfa9867814;hb=b22b260eaa7fb9f122523fff0e324dca5904b97f;hp=327b2d525e6b06de46b773138416ef8bab8a92d5;hpb=e1187372073c4190d58582372c26400b69af3b6f;p=bacula%2Fbacula diff --git a/bacula/src/stored/record.h b/bacula/src/stored/record.h index 327b2d525e..eaf1f029b1 100644 --- a/bacula/src/stored/record.h +++ b/bacula/src/stored/record.h @@ -2,26 +2,23 @@ * Record, and label definitions for Bacula * media data format. * + * Kern Sibbald, MM + * * Version $Id$ * */ /* - Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker + Copyright (C) 2000-2006 Kern Sibbald 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. + modify it under the terms of the GNU General Public License + version 2 as amended with additional clauses defined in the + file LICENSE in the main source directory. 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. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + the file LICENSE for additional details. */ @@ -30,15 +27,17 @@ #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 */ @@ -61,12 +60,12 @@ */ /* Record state bit definitions */ -#define REC_NO_HEADER 0x01 /* No header read */ -#define REC_PARTIAL_RECORD 0x02 /* returning partial record */ -#define REC_BLOCK_EMPTY 0x04 /* not enough data in block */ -#define REC_NO_MATCH 0x08 /* No match on continuation data */ -#define REC_CONTINUATION 0x10 /* Continuation record found */ -#define REC_ISTAPE 0x20 /* Set if device is tape */ +#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_CONTINUATION (1<<4) /* Continuation record found */ +#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) @@ -74,13 +73,14 @@ /* * 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. */ -typedef struct s_dev_rec { - int sync; /* synchronous */ - /* File and Block are always returned on reading records, but - * only returned on writing if sync is set (obviously). +struct BSR; /* satisfy forward reference */ +struct DEV_RECORD { + 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 */ @@ -91,9 +91,11 @@ typedef struct s_dev_rec { 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 */ -} DEV_RECORD; + int32_t match_stat; /* bsr match status */ +}; /* @@ -103,20 +105,20 @@ typedef struct s_dev_rec { */ #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 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. @@ -124,7 +126,7 @@ struct Volume_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 ... */ @@ -143,8 +145,8 @@ struct Volume_Label { 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 */