/*
Bacula® - The Network Backup Solution
- Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
+ Copyright (C) 2000-2009 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.
berrno be;
be.set_errno(ff_pkt->ff_errno);
Jmsg(jcr, M_NOTSAVED, 1, _(" Could not access %s: ERR=%s\n"), ff_pkt->fname, be.bstrerror());
- jcr->Errors++;
+ jcr->JobErrors++;
return 1;
}
case FT_NOFOLLOW: {
berrno be;
be.set_errno(ff_pkt->ff_errno);
Jmsg(jcr, M_NOTSAVED, 1, _(" Could not follow link %s: ERR=%s\n"), ff_pkt->fname, be.bstrerror());
- jcr->Errors++;
+ jcr->JobErrors++;
return 1;
}
case FT_NOSTAT: {
berrno be;
be.set_errno(ff_pkt->ff_errno);
Jmsg(jcr, M_NOTSAVED, 1, _(" Could not stat %s: ERR=%s\n"), ff_pkt->fname, be.bstrerror());
- jcr->Errors++;
+ jcr->JobErrors++;
return 1;
}
case FT_DIRNOCHG:
berrno be;
be.set_errno(ff_pkt->ff_errno);
Jmsg(jcr, M_NOTSAVED, 1, _(" Could not open directory %s: ERR=%s\n"), ff_pkt->fname, be.bstrerror());
- jcr->Errors++;
+ jcr->JobErrors++;
return 1;
}
default:
Jmsg(jcr, M_NOTSAVED, 0, _(" Unknown file type %d: %s\n"), ff_pkt->type, ff_pkt->fname);
- jcr->Errors++;
+ jcr->JobErrors++;
return 1;
}
/* Encode attributes and possibly extend them */
- encode_stat(attribs, ff_pkt, 0);
+ encode_stat(attribs, &ff_pkt->statp, ff_pkt->LinkFI, 0);
encode_attribsEx(jcr, attribsEx, ff_pkt);
jcr->lock();
size = sizeof(md);
if (digest_file(jcr, ff_pkt, digest) != 0) {
- jcr->Errors++;
+ jcr->JobErrors++;
goto good_rtn;
}
while ((n=bread(bfd, buf, bufsiz)) > 0) {
/* Check for sparse blocks */
if (ff_pkt->flags & FO_SPARSE) {
- bool haveBlock = true;
- if (n == bufsiz &&
- fileAddr+n < (uint64_t)ff_pkt->statp.st_size ||
+ bool allZeros = false;
+ if ((n == bufsiz &&
+ fileAddr+n < (uint64_t)ff_pkt->statp.st_size) ||
((ff_pkt->type == FT_RAW || ff_pkt->type == FT_FIFO) &&
(uint64_t)ff_pkt->statp.st_size == 0)) {
- haveBlock = !is_buf_zero(buf, bufsiz);
+ allZeros = is_buf_zero(buf, bufsiz);
}
fileAddr += n; /* update file address */
- if (!haveBlock) {
+ /* Skip any block of all zeros */
+ if (allZeros) {
continue; /* skip block of zeros */
}
}
Dmsg2(100, "Error reading file %s: ERR=%s\n", jcr->last_fname, be.bstrerror());
Jmsg(jcr, M_ERROR, 1, _("Error reading file %s: ERR=%s\n"),
jcr->last_fname, be.bstrerror());
- jcr->Errors++;
+ jcr->JobErrors++;
return -1;
}
return 0;