]> git.neil.brown.name Git - edlib.git/commitdiff
attr: fix attr_copy_tail
authorNeilBrown <neil@brown.name>
Wed, 22 Feb 2017 23:28:44 +0000 (10:28 +1100)
committerNeilBrown <neil@brown.name>
Wed, 22 Feb 2017 23:28:44 +0000 (10:28 +1100)
This was just wrong... I don't remember what I was thinking.

Signed-off-by: NeilBrown <neil@brown.name>
core-attr.c

index d4f5bceb8add754256153f2473a26fb85a9e5915..9b31c4006365563cc351d0a4605956dcc228bed6 100644 (file)
@@ -494,6 +494,9 @@ void attr_trim(struct attrset **setp safe, int nkey)
        attr_free(setp);
 }
 
+/* make a copy of 'set', keeping only attributes from 'nkey'
+ * onwards.  'nkey' will be the new starting offset.
+ */
 struct attrset *attr_copy_tail(struct attrset *set, int nkey)
 {
        struct attrset *newset = NULL;
@@ -508,10 +511,14 @@ struct attrset *attr_copy_tail(struct attrset *set, int nkey)
                        v = set->attrs + i;
                        i += strlen(v) + 1;
                        n = atoi(k);
-
-                       if (n <= nkey && *v == '\0')
-                               v = NULL;
-                       attr_set_str_key(&newset, k, v, nkey);
+                       if (n < nkey)
+                               continue;
+                       while (*k && *k != ' ')
+                               k++;
+                       if (*k == ' ')
+                               k++;
+
+                       attr_set_str_key(&newset, k, v, n-nkey);
                }
        }