From: Junio C Hamano <gits...@pobox.com>

The callchain that starts from git_check_attrs() down to
collect_some_attrs() used to take an array of git_attr_check_elem
as their parameters.  Pass the enclosing git_attr_check instance
instead, so that they will have access to new fields we will add to
the data structure.

Signed-off-by: Junio C Hamano <gits...@pobox.com>
Signed-off-by: Stefan Beller <sbel...@google.com>
---
 attr.c | 36 ++++++++++++++++++++++++------------
 1 file changed, 24 insertions(+), 12 deletions(-)

diff --git a/attr.c b/attr.c
index 0a8ed5b582..47ab59c157 100644
--- a/attr.c
+++ b/attr.c
@@ -755,14 +755,25 @@ static int attr_check_is_dynamic(const struct 
git_attr_check *check)
  * check_all_attr. If num is non-zero, only attributes in check[] are
  * collected. Otherwise all attributes are collected.
  */
-static void collect_some_attrs(const char *path, int pathlen, int num,
-                              struct git_attr_check_elem *check)
+static void collect_some_attrs(const char *path, int pathlen,
+                              struct git_attr_check *check)
 
 {
        struct attr_stack *stk;
        int i, rem, dirlen;
        const char *cp, *last_slash = NULL;
        int basename_offset;
+       int num;
+       struct git_attr_check_elem *celem;
+
+       if (!check) {
+               /* Yuck - ugly git_all_attrs() hack! */
+               celem = NULL;
+               num = 0;
+       } else {
+               celem = check->check;
+               num = check->check_nr;
+       }
 
        for (cp = path; cp < path + pathlen; cp++) {
                if (*cp == '/' && cp[1])
@@ -782,9 +793,9 @@ static void collect_some_attrs(const char *path, int 
pathlen, int num,
        if (num && !cannot_trust_maybe_real) {
                rem = 0;
                for (i = 0; i < num; i++) {
-                       if (!check[i].attr->maybe_real) {
+                       if (!celem[i].attr->maybe_real) {
                                struct git_attr_check_elem *c;
-                               c = check_all_attr + check[i].attr->attr_nr;
+                               c = check_all_attr + celem[i].attr->attr_nr;
                                c->value = ATTR__UNSET;
                                rem++;
                        }
@@ -798,18 +809,19 @@ static void collect_some_attrs(const char *path, int 
pathlen, int num,
                rem = fill(path, pathlen, basename_offset, stk, rem);
 }
 
-static int git_check_attrs(const char *path, int pathlen, int num,
-                          struct git_attr_check_elem *check)
+static int git_check_attrs(const char *path, int pathlen,
+                          struct git_attr_check *check)
 {
        int i;
+       struct git_attr_check_elem *celem = check->check;
 
-       collect_some_attrs(path, pathlen, num, check);
+       collect_some_attrs(path, pathlen, check);
 
-       for (i = 0; i < num; i++) {
-               const char *value = 
check_all_attr[check[i].attr->attr_nr].value;
+       for (i = 0; i < check->check_nr; i++) {
+               const char *value = 
check_all_attr[celem[i].attr->attr_nr].value;
                if (value == ATTR__UNKNOWN)
                        value = ATTR__UNSET;
-               check[i].value = value;
+               celem[i].value = value;
        }
 
        return 0;
@@ -820,7 +832,7 @@ void git_all_attrs(const char *path, struct git_attr_check 
*check)
        int i;
 
        git_attr_check_clear(check);
-       collect_some_attrs(path, strlen(path), 0, NULL);
+       collect_some_attrs(path, strlen(path), NULL);
 
        for (i = 0; i < attr_nr; i++) {
                const char *name = check_all_attr[i].attr->name;
@@ -849,7 +861,7 @@ int git_check_attr_counted(const char *path, int pathlen,
                           struct git_attr_check *check)
 {
        check->finalized = 1;
-       return git_check_attrs(path, pathlen, check->check_nr, check->check);
+       return git_check_attrs(path, pathlen, check);
 }
 
 int git_check_attr(const char *path, struct git_attr_check *check)
-- 
2.10.1.714.ge3da0db

Reply via email to