]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/filed/xattr.c
Tweak add bstrerror output if snapshot fails
[bacula/bacula] / bacula / src / filed / xattr.c
index 6227fd3b84c86ef159abec52da7a38c4ee3a7c26..a3e9410ffa164f9d7e847ddf526cb8d770d92094 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2008-2009 Free Software Foundation Europe e.V.
+   Copyright (C) 2008-2010 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
@@ -388,6 +388,7 @@ static bxattr_exit_code linux_xattr_build_streams(JCR *jcr, FF_PKT *ff_pkt)
     */
    bp = xattr_list;
    while ((bp - xattr_list) + 1 < xattr_list_len) {
+      int name_len;
       skip_xattr = false;
 
       /*
@@ -416,7 +417,8 @@ static bxattr_exit_code linux_xattr_build_streams(JCR *jcr, FF_PKT *ff_pkt)
          }
       }
 
-      if (skip_xattr) {
+      name_len = strlen(bp);
+      if (skip_xattr || name_len == 0) {
          bp = strchr(bp, '\0') + 1;
          continue;
       }
@@ -431,7 +433,7 @@ static bxattr_exit_code linux_xattr_build_streams(JCR *jcr, FF_PKT *ff_pkt)
       /*
        * Allocate space for storing the name.
        */
-      current_xattr->name_length = strlen(bp);
+      current_xattr->name_length = name_len;
       current_xattr->name = (char *)malloc(current_xattr->name_length);
       memcpy((caddr_t)current_xattr->name, (caddr_t)bp, current_xattr->name_length);
 
@@ -749,7 +751,10 @@ static bxattr_exit_code bsd_build_xattr_streams(JCR *jcr, FF_PKT *ff_pkt)
           * Print the current name into the buffer as its not null terminated we need to
           * use the length encoded in the string for copying only the needed bytes.
           */
-         cnt = MIN((sizeof(current_attrname) - 1), xattr_list[index]);
+         cnt = xattr_list[index];
+         if (cnt > ((int)sizeof(current_attrname) - 1)) {
+            cnt = ((int)sizeof(current_attrname) - 1);
+         }
          strncpy(current_attrname, xattr_list + (index + 1), cnt);
          current_attrname[cnt] = '\0';
 
@@ -980,7 +985,7 @@ static bxattr_exit_code bsd_parse_xattr_streams(JCR *jcr, int stream)
        */
       cnt = extattr_set_link(jcr->last_fname, current_attrnamespace,
                              attrname, current_xattr->value, current_xattr->value_length);
-      if (cnt < 0 || cnt != current_xattr->value_length) {
+      if (cnt < 0 || cnt != (int)current_xattr->value_length) {
          switch (errno) {
          case ENOENT:
             goto bail_out;