*
*/
/*
- Copyright (C) 2000-2003 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
#include "bacula.h"
#include "find.h"
-#ifdef HAVE_CYGWIN
+#if defined(HAVE_CYGWIN) || defined(HAVE_WIN32)
/* Forward referenced subroutines */
static int set_win32_attributes(JCR *jcr, ATTR *attr, BFILE *ofd);
*p++ = ' ';
p += to_base64((int64_t)statp->st_size, p);
*p++ = ' ';
+#ifndef HAVE_MINGW
p += to_base64((int64_t)statp->st_blksize, p);
*p++ = ' ';
p += to_base64((int64_t)statp->st_blocks, p);
*p++ = ' ';
+#else
+ p += to_base64((int64_t)0, p); /* output place holder */
+ *p++ = ' ';
+ p += to_base64((int64_t)0, p); /* output place holder */
+ *p++ = ' ';
+#endif
p += to_base64((int64_t)statp->st_atime, p);
*p++ = ' ';
p += to_base64((int64_t)statp->st_mtime, p);
p += from_base64(&val, p);
statp->st_size = val;
p++;
+#ifndef HAVE_MINGW
p += from_base64(&val, p);
statp->st_blksize = val;
p++;
p += from_base64(&val, p);
statp->st_blocks = val;
p++;
+#else
+ p += from_base64(&val, p);
+// statp->st_blksize = val;
+ p++;
+ p += from_base64(&val, p);
+// statp->st_blocks = val;
+ p++;
+#endif
p += from_base64(&val, p);
statp->st_atime = val;
p++;
return (int)val;
}
+/* Decode a LinkFI field of encoded stat packet */
+int32_t decode_LinkFI(char *buf, struct stat *statp)
+{
+ char *p = buf;
+ int64_t val;
+
+ skip_nonspaces(&p); /* st_dev */
+ p++; /* skip space */
+ skip_nonspaces(&p); /* st_ino */
+ p++;
+ p += from_base64(&val, p);
+ statp->st_mode = val; /* st_mode */
+ p++;
+ skip_nonspaces(&p); /* st_nlink */
+ p++;
+ skip_nonspaces(&p); /* st_uid */
+ p++;
+ skip_nonspaces(&p); /* st_gid */
+ p++;
+ skip_nonspaces(&p); /* st_rdev */
+ p++;
+ skip_nonspaces(&p); /* st_size */
+ p++;
+ skip_nonspaces(&p); /* st_blksize */
+ p++;
+ skip_nonspaces(&p); /* st_blocks */
+ p++;
+ skip_nonspaces(&p); /* st_atime */
+ p++;
+ skip_nonspaces(&p); /* st_mtime */
+ p++;
+ skip_nonspaces(&p); /* st_ctime */
+
+ /* Optional FileIndex of hard linked file data */
+ if (*p == ' ' || (*p != 0 && *(p+1) == ' ')) {
+ p++;
+ p += from_base64(&val, p);
+ return (int32_t)val;
+ }
+ return 0;
+}
+
/*
* Set file modes, permissions and times
*
mode_t old_mask;
int stat = 1;
-#ifdef HAVE_CYGWIN
+#if defined(HAVE_CYGWIN) || defined(HAVE_WIN32)
+ if (attr->stream == STREAM_UNIX_ATTRIBUTES_EX &&
+ set_win32_attributes(jcr, attr, ofd)) {
+ if (is_bopen(ofd)) {
+ bclose(ofd);
+ }
+ pm_strcpy(&attr->ofname, "*none*");
+ return 1;
+ }
if (attr->data_stream == STREAM_WIN32_DATA ||
attr->data_stream == STREAM_WIN32_GZIP_DATA) {
if (is_bopen(ofd)) {
bclose(ofd);
}
+ pm_strcpy(&attr->ofname, "*none*");
return 1;
}
- if (attr->stream == STREAM_UNIX_ATTRIBUTES_EX &&
- set_win32_attributes(jcr, attr, ofd)) {
- if (is_bopen(ofd)) {
- bclose(ofd);
- }
- return 1;
- }
+
/*
* If Windows stuff failed, e.g. attempt to restore Unix file
* to Windows, simply fall through and we will do it the
stat = 0;
}
}
+ pm_strcpy(&attr->ofname, "*none*");
umask(old_mask);
return stat;
}
/* */
/*=============================================================*/
-#ifndef HAVE_CYGWIN
+#if !defined(HAVE_CYGWIN) && !defined(HAVE_WIN32)
/*
* It is possible to piggyback additional data e.g. ACLs on
/* */
/*=============================================================*/
-#ifdef HAVE_CYGWIN
+#if defined(HAVE_CYGWIN) || defined(HAVE_WIN32)
int encode_attribsEx(JCR *jcr, char *attribsEx, FF_PKT *ff_pkt)
{