On Solaris we fail to backup more then one xattr. There
are two serious wrong tests in the code that seem to predate
switch to the new bxattr_exit_* codes. Due to a side effect
the retval variable only gets set to a non 0 value
(bxattr_exit_ok) when the first xattr is saved as then the
hidden directory is saved and as such the retval
is set.
While scanning through the code for possible other retval
initialization errors and wrong code I fixed one other problem
in the Tru64 xattr code which we probably never encounter
as that platform is kind of dying.
{
unser_declare;
xattr_t *current_xattr;
{
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.
/*
* Parse the stream and call restore_xattr_on_file for each extended attribute.
}
unser_end(jcr->xattr_data->content, jcr->xattr_data->content_length);
}
unser_end(jcr->xattr_data->content, jcr->xattr_data->content_length);
/*
* Send the datastream to the SD.
*/
/*
* 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]);
- xattr_drop_internal_table(xattr_value_list);
-
- return bxattr_exit_ok;
+ retval = bxattr_exit_ok;
- 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.
*/
/*
* 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;