#ifdef HAVE_LIBZ
static const char *zlib_strerror(int stat);
#endif
+
int32_t extract_data(JCR *jcr, BFILE *bfd, POOLMEM *buf, int32_t buflen,
uint64_t *addr, int flags);
attr->data_stream = decode_stat(attr->attr, &attr->statp, &attr->LinkFI);
- if (!is_stream_supported(attr->data_stream)) {
+ if (!is_restore_stream_supported(attr->data_stream)) {
if (!non_support_data++) {
Jmsg(jcr, M_ERROR, 0, _("%s stream not supported on this Client.\n"),
stream_to_ascii(attr->data_stream));
|| stream == STREAM_WIN32_GZIP_DATA) {
flags |= FO_GZIP;
}
+
+ if (is_win32_stream(stream) && !have_win32_api()) {
+ set_portable_backup(&bfd);
+ flags |= FO_WIN32DECOMP; /* "decompose" BackupWrite data */
+ }
+
if (extract_data(jcr, &bfd, sd->msg, sd->msglen, &fileAddr, flags) < 0) {
extract = false;
bclose(&bfd);
if (extract) {
if (prev_stream != stream) {
if (bopen_rsrc(&altbfd, jcr->last_fname, O_WRONLY | O_TRUNC | O_BINARY, 0) < 0) {
- Jmsg(jcr, M_ERROR, 0, _(" Cannot open resource fork for %s\n"), jcr->last_fname);
+ Jmsg(jcr, M_ERROR, 0, _(" Cannot open resource fork for %s.\n"), jcr->last_fname);
extract = false;
continue;
}
pm_strcpy(jcr->acl_text, sd->msg);
Dmsg2(400, "Restoring ACL type 0x%2x <%s>\n", BACL_TYPE_ACCESS, jcr->acl_text);
if (bacl_set(jcr, BACL_TYPE_ACCESS) != 0) {
- Jmsg1(jcr, M_WARNING, 0, "Can't restore ACL of %s\n", jcr->last_fname);
+ Jmsg1(jcr, M_WARNING, 0, _("Can't restore ACL of %s\n"), jcr->last_fname);
}
#else
non_support_acl++;
pm_strcpy(jcr->acl_text, sd->msg);
Dmsg2(400, "Restoring ACL type 0x%2x <%s>\n", BACL_TYPE_DEFAULT, jcr->acl_text);
if (bacl_set(jcr, BACL_TYPE_DEFAULT) != 0) {
- Jmsg1(jcr, M_WARNING, 0, "Can't restore default ACL of %s\n", jcr->last_fname);
+ Jmsg1(jcr, M_WARNING, 0, _("Can't restore default ACL of %s\n"), jcr->last_fname);
}
#else
non_support_acl++;
static const char *zlib_strerror(int stat)
{
if (stat >= 0) {
- return "None";
+ return _("None");
}
switch (stat) {
case Z_ERRNO:
- return "Zlib errno";
+ return _("Zlib errno");
case Z_STREAM_ERROR:
- return "Zlib stream error";
+ return _("Zlib stream error");
case Z_DATA_ERROR:
- return "Zlib data error";
+ return _("Zlib data error");
case Z_MEM_ERROR:
- return "Zlib memory error";
+ return _("Zlib memory error");
case Z_BUF_ERROR:
- return "Zlib buffer error";
+ return _("Zlib buffer error");
case Z_VERSION_ERROR:
- return "Zlib version error";
+ return _("Zlib version error");
default:
- return "*none*";
+ return _("*none*");
}
}
#endif
Dmsg2(30, "Write %u bytes, total before write=%s\n", wsize, edit_uint64(jcr->JobBytes, ec1));
}
- if (bwrite(bfd, wbuf, wsize) != (ssize_t)wsize) {
+ if (flags & FO_WIN32DECOMP) {
+ if (!processWin32BackupAPIBlock(bfd, wbuf, wsize)) {
+ berrno be;
+ Jmsg2(jcr, M_ERROR, 0, _("Write error in Win32 Block Decomposition on %s: %s\n"),
+ jcr->last_fname, be.strerror(bfd->berrno));
+ return -1;
+ }
+ } else if (bwrite(bfd, wbuf, wsize) != (ssize_t)wsize) {
berrno be;
Jmsg2(jcr, M_ERROR, 0, _("Write error on %s: %s\n"),
jcr->last_fname, be.strerror(bfd->berrno));