]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/filed/xattr.c
Fix bug #1811 Filed fails to backup more then one xattr.
[bacula/bacula] / bacula / src / filed / xattr.c
index a181d4123fad6d2ad7c09f3321a5508830aef3a4..d91b602fd2e382c5a4855a19ab02dfc2be8afc0b 100644 (file)
@@ -208,7 +208,6 @@ static bxattr_exit_code unserialize_xattr_stream(JCR *jcr, alist *xattr_value_li
 {
    unser_declare;
    xattr_t *current_xattr;
-   bxattr_exit_code retval = bxattr_exit_ok;
 
    /*
     * Parse the stream and call restore_xattr_on_file for each extended attribute.
@@ -277,7 +276,7 @@ static bxattr_exit_code unserialize_xattr_stream(JCR *jcr, alist *xattr_value_li
    }
 
    unser_end(jcr->xattr_data->content, jcr->xattr_data->content_length);
-   return retval;
+   return bxattr_exit_ok;
 }
 #endif
 
@@ -960,11 +959,9 @@ static bxattr_exit_code bsd_build_xattr_streams(JCR *jcr, FF_PKT *ff_pkt)
       /*
        * Send the datastream to the SD.
        */
-      return send_xattr_stream(jcr, os_default_xattr_streams[0]);
+      retval = send_xattr_stream(jcr, os_default_xattr_streams[0]);
    } else {
-      xattr_drop_internal_table(xattr_value_list);
-
-      return bxattr_exit_ok;
+      retval = bxattr_exit_ok;
    }
 
 bail_out:
@@ -1669,35 +1666,36 @@ static bxattr_exit_code solaris_save_xattr(JCR *jcr, int fd, const char *xattr_n
       break;
    }
 
-   if (retval) {
-      retval = send_xattr_stream(jcr, stream);
-      if (retval == bxattr_exit_ok) {
-         jcr->xattr_data->nr_saved++;
-      }
+   /*
+    * We build a new xattr stream send it to the SD.
+    */
+   retval = send_xattr_stream(jcr, stream);
+   if (retval != bxattr_exit_ok) {
+       goto bail_out;
    }
+   jcr->xattr_data->nr_saved++;
 
    /*
     * Recursivly call solaris_save_extended_attributes for archiving the attributes
     * available on this extended attribute.
     */
-   if (retval) {
-      retval = solaris_save_xattrs(jcr, xattr_namespace, attrname);
+   retval = solaris_save_xattrs(jcr, xattr_namespace, attrname);
       
-      /*
-       * The recursive call could change our working dir so change back to the wanted workdir.
-       */
-      if (fchdir(fd) < 0) {
-         switch (errno) {
-         case ENOENT:
-            retval = bxattr_exit_ok;
-            goto bail_out;
-         default:
-            Mmsg2(jcr->errmsg, _("Unable to chdir to xattr space of file \"%s\": ERR=%s\n"),
-                  jcr->last_fname, be.bstrerror());
-            Dmsg3(100, "Unable to fchdir to xattr space of file \"%s\" using fd %d: ERR=%s\n",
-                  jcr->last_fname, fd, be.bstrerror());
-            goto bail_out;
-         }
+   /*
+    * The recursive call could change our working dir so change back to the wanted workdir.
+    */
+   if (fchdir(fd) < 0) {
+      switch (errno) {
+      case ENOENT:
+         retval = bxattr_exit_ok;
+         goto bail_out;
+      default:
+         Mmsg2(jcr->errmsg,
+               _("Unable to chdir to xattr space of file \"%s\": ERR=%s\n"),
+               jcr->last_fname, be.bstrerror());
+         Dmsg3(100, "Unable to fchdir to xattr space of file \"%s\" using fd %d: ERR=%s\n",
+               jcr->last_fname, fd, be.bstrerror());
+         goto bail_out;
       }
    }