/*
Bacula® - The Network Backup Solution
- Copyright (C) 2000-2010 Free Software Foundation Europe e.V.
+ Copyright (C) 2000-2011 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.
/* File Attributes stream */
- switch (rec->Stream) {
+ switch (rec->maskedStream) {
case STREAM_UNIX_ATTRIBUTES:
case STREAM_UNIX_ATTRIBUTES_EX:
case STREAM_WIN32_DATA:
if (extract) {
- if (rec->Stream == STREAM_SPARSE_DATA) {
+ if (rec->maskedStream == STREAM_SPARSE_DATA) {
ser_declare;
uint64_t faddr;
- wbuf = rec->data + SPARSE_FADDR_SIZE;
- wsize = rec->data_len - SPARSE_FADDR_SIZE;
- ser_begin(rec->data, SPARSE_FADDR_SIZE);
+ wbuf = rec->data + OFFSET_FADDR_SIZE;
+ wsize = rec->data_len - OFFSET_FADDR_SIZE;
+ ser_begin(rec->data, OFFSET_FADDR_SIZE);
unser_uint64(faddr);
if (fileAddr != faddr) {
fileAddr = faddr;
case STREAM_WIN32_GZIP_DATA:
#ifdef HAVE_LIBZ
if (extract) {
- uLong compress_len;
- int stat;
+ uLong compress_len = compress_buf_size;
+ int stat = Z_BUF_ERROR;
- if (rec->Stream == STREAM_SPARSE_GZIP_DATA) {
+ if (rec->maskedStream == STREAM_SPARSE_GZIP_DATA) {
ser_declare;
uint64_t faddr;
char ec1[50];
- wbuf = rec->data + SPARSE_FADDR_SIZE;
- wsize = rec->data_len - SPARSE_FADDR_SIZE;
- ser_begin(rec->data, SPARSE_FADDR_SIZE);
+ wbuf = rec->data + OFFSET_FADDR_SIZE;
+ wsize = rec->data_len - OFFSET_FADDR_SIZE;
+ ser_begin(rec->data, OFFSET_FADDR_SIZE);
unser_uint64(faddr);
if (fileAddr != faddr) {
fileAddr = faddr;
wsize = rec->data_len;
}
- while ((stat=uncompress((Byte *)compress_buf, &compress_len,
- (const Byte *)wbuf, (uLong)wsize)) == Z_BUF_ERROR)
- {
+ while (compress_len < 10000000 && (stat=uncompress((Byte *)compress_buf, &compress_len,
+ (const Byte *)wbuf, (uLong)wsize)) == Z_BUF_ERROR) {
/* The buffer size is too small, try with a bigger one */
- compress_len = compress_len + (compress_len >> 1);
+ compress_len = 2 * compress_len;
compress_buf = check_pool_memory_size(compress_buf,
compress_len);
}