]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/findlib/attribs.c
Update doc
[bacula/bacula] / bacula / src / findlib / attribs.c
index d16c3ec9644a6d6afdb2c0ba3ce7458ca8046cc6..d73622e8219021ec98032db14a641b5cfd7b291f 100755 (executable)
@@ -31,7 +31,7 @@
 #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);
@@ -117,10 +117,17 @@ void encode_stat(char *buf, FF_PKT *ff_pkt, int data_stream)
    *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);
@@ -174,12 +181,21 @@ int decode_stat(char *buf, struct stat *statp, int32_t *LinkFI)
    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++;
@@ -221,7 +237,7 @@ int decode_stat(char *buf, struct stat *statp, int32_t *LinkFI)
 }
 
 /* Decode a LinkFI field of encoded stat packet */
-int32_t decode_LinkFI(char *buf
+int32_t decode_LinkFI(char *buf, struct stat *statp)
 {
    char *p = buf;
    int64_t val;
@@ -230,7 +246,8 @@ int32_t decode_LinkFI(char *buf)
    p++;                              /* skip space */
    skip_nonspaces(&p);               /* st_ino */
    p++;
-   skip_nonspaces(&p);               /* st_mode */
+   p += from_base64(&val, p);
+   statp->st_mode = val;             /* st_mode */
    p++;
    skip_nonspaces(&p);               /* st_nlink */
    p++;
@@ -276,7 +293,15 @@ int set_attributes(JCR *jcr, ATTR *attr, BFILE *ofd)
    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)) {
@@ -286,14 +311,7 @@ int set_attributes(JCR *jcr, ATTR *attr, BFILE *ofd)
       return 1;
    }
 
-   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 Windows stuff failed, e.g. attempt to restore Unix file
     *  to Windows, simply fall through and we will do it the    
@@ -362,7 +380,7 @@ int set_attributes(JCR *jcr, ATTR *attr, BFILE *ofd)
 /*                                                            */
 /*=============================================================*/
 
-#ifndef HAVE_CYGWIN
+#if !defined(HAVE_CYGWIN) && !defined(HAVE_WIN32)
     
 /*
  * It is possible to piggyback additional data e.g. ACLs on
@@ -389,7 +407,7 @@ int encode_attribsEx(JCR *jcr, char *attribsEx, FF_PKT *ff_pkt)
 /*                                                            */
 /*=============================================================*/
 
-#ifdef HAVE_CYGWIN
+#if defined(HAVE_CYGWIN) || defined(HAVE_WIN32)
 
 int encode_attribsEx(JCR *jcr, char *attribsEx, FF_PKT *ff_pkt)
 {