+static int macroexpand(struct attr_stack *stk, int rem)
+{
+ int i, j;
+ struct git_attr_check *check = check_all_attr;
+
+ for (i = stk->num_matches - 1; 0 < rem && 0 <= i; i--) {
+ struct match_attr *a = stk->attrs[i];
+ if (!a->is_macro)
+ continue;
+ if (check[a->u.attr->attr_nr].isset < 0)
+ continue;
+ for (j = 0; 0 < rem && j < a->num_attr; j++) {
+ struct git_attr *attr = a->state[j].attr;
+ int set = !a->state[j].unset;
+ int *n = &(check[attr->attr_nr].isset);
+
+ if (*n < 0) {
+ debug_set("expand", a->u.attr->name, attr, set);
+ *n = set;
+ rem--;
+ }
+ }
+ }
+ return rem;
+}
+