X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fstored%2Frecord.c;h=c0c564c0be5f1375b430d74005803308b49fc8cb;hb=b9265a6898ae36e450755721acfbf4a52342bc2f;hp=9a68849af2640eee8a950ba77f67a55bbe626239;hpb=1f3edf3a27024df37e6de3d9b63b6d744808f628;p=bacula%2Fbacula diff --git a/bacula/src/stored/record.c b/bacula/src/stored/record.c index 9a68849af2..c0c564c0be 100644 --- a/bacula/src/stored/record.c +++ b/bacula/src/stored/record.c @@ -9,7 +9,7 @@ * */ /* - Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker + Copyright (C) 2000-2004 Kern Sibbald and John Walker This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -41,7 +41,7 @@ extern int debug_level; * record as a Label, otherwise it is simply * the FileIndex of the current file. */ -char *FI_to_ascii(int fi) +const char *FI_to_ascii(int fi) { static char buf[20]; if (fi >= 0) { @@ -80,7 +80,7 @@ char *FI_to_ascii(int fi) * dealing with a Label, hence the * stream is the JobId. */ -char *stream_to_ascii(int stream, int fi) +const char *stream_to_ascii(int stream, int fi) { static char buf[20]; if (fi < 0) { @@ -92,12 +92,18 @@ char *stream_to_ascii(int stream, int fi) return "UATTR"; case STREAM_FILE_DATA: return "DATA"; + case STREAM_WIN32_DATA: + return "WIN32-DATA"; + case STREAM_WIN32_GZIP_DATA: + return "WIN32-GZIP"; case STREAM_MD5_SIGNATURE: return "MD5"; + case STREAM_SHA1_SIGNATURE: + return "SHA1"; case STREAM_GZIP_DATA: return "GZIP"; - case STREAM_WIN32_ATTRIBUTES: - return "WIN32-ATTR"; + case STREAM_UNIX_ATTRIBUTES_EX: + return "UNIX-ATTR-EX"; case STREAM_SPARSE_DATA: return "SPARSE-DATA"; case STREAM_SPARSE_GZIP_DATA: @@ -110,12 +116,18 @@ char *stream_to_ascii(int stream, int fi) return "contUATTR"; case -STREAM_FILE_DATA: return "contDATA"; + case -STREAM_WIN32_DATA: + return "contWIN32-DATA"; + case -STREAM_WIN32_GZIP_DATA: + return "contWIN32-GZIP"; case -STREAM_MD5_SIGNATURE: return "contMD5"; + case -STREAM_SHA1_SIGNATURE: + return "contSHA1"; case -STREAM_GZIP_DATA: return "contGZIP"; - case -STREAM_WIN32_ATTRIBUTES: - return "contWIN32-ATTR"; + case -STREAM_UNIX_ATTRIBUTES_EX: + return "contUNIX-ATTR-EX"; case -STREAM_SPARSE_DATA: return "contSPARSE-DATA"; case -STREAM_SPARSE_GZIP_DATA: @@ -137,7 +149,7 @@ DEV_RECORD *new_record(void) { DEV_RECORD *rec; - rec = (DEV_RECORD *) get_memory(sizeof(DEV_RECORD)); + rec = (DEV_RECORD *)get_memory(sizeof(DEV_RECORD)); memset(rec, 0, sizeof(DEV_RECORD)); rec->data = get_pool_memory(PM_MESSAGE); return rec; @@ -181,7 +193,7 @@ int write_record_to_block(DEV_BLOCK *block, DEV_RECORD *rec) remlen = block->buf_len - block->binbuf; ASSERT(block->binbuf == (uint32_t) (block->bufp - block->buf)); - ASSERT(remlen >= 0); + ASSERT(block->buf_len >= block->binbuf); Dmsg6(190, "write_record_to_block() FI=%s SessId=%d Strm=%s len=%d\n\ rem=%d remainder=%d\n", @@ -199,8 +211,8 @@ rem=%d remainder=%d\n", if (remlen >= WRITE_RECHDR_LENGTH) { ser_begin(block->bufp, WRITE_RECHDR_LENGTH); if (BLOCK_VER == 1) { - ser_uint32(rec->VolSessionId); - ser_uint32(rec->VolSessionTime); + ser_uint32(rec->VolSessionId); + ser_uint32(rec->VolSessionTime); } else { block->VolSessionId = rec->VolSessionId; block->VolSessionTime = rec->VolSessionTime; @@ -213,6 +225,13 @@ rem=%d remainder=%d\n", block->binbuf += WRITE_RECHDR_LENGTH; remlen -= WRITE_RECHDR_LENGTH; rec->remainder = rec->data_len; + if (rec->FileIndex > 0) { + /* If data record, update what we have in this block */ + if (block->FirstIndex == 0) { + block->FirstIndex = rec->FileIndex; + } + block->LastIndex = rec->FileIndex; + } } else { rec->remainder = rec->data_len + WRITE_RECHDR_LENGTH; return 0; @@ -235,8 +254,8 @@ rem=%d remainder=%d\n", */ ser_begin(block->bufp, WRITE_RECHDR_LENGTH); if (BLOCK_VER == 1) { - ser_uint32(rec->VolSessionId); - ser_uint32(rec->VolSessionTime); + ser_uint32(rec->VolSessionId); + ser_uint32(rec->VolSessionTime); } else { block->VolSessionId = rec->VolSessionId; block->VolSessionTime = rec->VolSessionTime; @@ -257,6 +276,13 @@ rem=%d remainder=%d\n", block->bufp += WRITE_RECHDR_LENGTH; block->binbuf += WRITE_RECHDR_LENGTH; remlen -= WRITE_RECHDR_LENGTH; + if (rec->FileIndex > 0) { + /* If data record, update what we have in this block */ + if (block->FirstIndex == 0) { + block->FirstIndex = rec->FileIndex; + } + block->LastIndex = rec->FileIndex; + } } if (remlen == 0) { return 0; /* partial transfer */ @@ -381,8 +407,8 @@ int read_record_from_block(DEV_BLOCK *block, DEV_RECORD *rec) unser_begin(block->bufp, WRITE_RECHDR_LENGTH); if (block->BlockVer == 1) { - unser_uint32(VolSessionId); - unser_uint32(VolSessionTime); + unser_uint32(VolSessionId); + unser_uint32(VolSessionTime); } else { VolSessionId = block->VolSessionId; VolSessionTime = block->VolSessionTime; @@ -425,9 +451,15 @@ int read_record_from_block(DEV_BLOCK *block, DEV_RECORD *rec) rec->VolSessionId = VolSessionId; rec->VolSessionTime = VolSessionTime; rec->FileIndex = FileIndex; + if (FileIndex > 0) { + if (block->FirstIndex == 0) { + block->FirstIndex = FileIndex; + } + block->LastIndex = FileIndex; + } - Dmsg6(100, "rd_rec_blk() got FI=%s SessId=%d Strm=%s len=%u\n\ -remlen=%d data_len=%d\n", + Dmsg6(100, "rd_rec_blk() got FI=%s SessId=%d Strm=%s len=%u\n" + "remlen=%d data_len=%d\n", FI_to_ascii(rec->FileIndex), rec->VolSessionId, stream_to_ascii(rec->Stream, rec->FileIndex), data_bytes, remlen, rec->data_len); @@ -448,6 +480,7 @@ remlen=%d data_len=%d\n", } #endif rec->state |= (REC_NO_HEADER | REC_BLOCK_EMPTY); + empty_block(block); /* mark block empty */ return 0; }