We're going to add more attributes to u.pattern so it'll become bigger
in size than a pointer. There's no point in sharing the same room with
u.attr.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
---
 attr.c | 25 ++++++++++++-------------
 1 file changed, 12 insertions(+), 13 deletions(-)

diff --git a/attr.c b/attr.c
index 15ebaa1..48df800 100644
--- a/attr.c
+++ b/attr.c
@@ -119,10 +119,10 @@ struct attr_state {
 /*
  * One rule, as from a .gitattributes file.
  *
- * If is_macro is true, then u.attr is a pointer to the git_attr being
+ * If is_macro is true, then attr is a pointer to the git_attr being
  * defined.
  *
- * If is_macro is false, then u.pattern points at the filename pattern
+ * If is_macro is false, then pattern points at the filename pattern
  * to which the rule applies.  (The memory pointed to is part of the
  * memory block allocated for the match_attr instance.)
  *
@@ -131,10 +131,8 @@ struct attr_state {
  * listed as they appear in the file (macros unexpanded).
  */
 struct match_attr {
-       union {
-               char *pattern;
-               struct git_attr *attr;
-       } u;
+       const char *pattern;
+       struct git_attr *attr;
        char is_macro;
        unsigned num_attr;
        struct attr_state state[FLEX_ARRAY];
@@ -240,11 +238,12 @@ static struct match_attr *parse_attr_line(const char 
*line, const char *src,
                      sizeof(struct attr_state) * num_attr +
                      (is_macro ? 0 : namelen + 1));
        if (is_macro)
-               res->u.attr = git_attr_internal(name, namelen);
+               res->attr = git_attr_internal(name, namelen);
        else {
-               res->u.pattern = (char *)&(res->state[num_attr]);
-               memcpy(res->u.pattern, name, namelen);
-               res->u.pattern[namelen] = 0;
+               char *p = (char *)&(res->state[num_attr]);
+               memcpy(p, name, namelen);
+               p[namelen] = 0;
+               res->pattern = p;
        }
        res->is_macro = is_macro;
        res->num_attr = num_attr;
@@ -682,7 +681,7 @@ static int fill_one(const char *what, struct match_attr *a, 
int rem)
 
                if (*n == ATTR__UNKNOWN) {
                        debug_set(what,
-                                 a->is_macro ? a->u.attr->name : a->u.pattern,
+                                 a->is_macro ? a->attr->name : a->pattern,
                                  attr, v);
                        *n = v;
                        rem--;
@@ -702,7 +701,7 @@ static int fill(const char *path, int pathlen, struct 
attr_stack *stk, int rem)
                if (a->is_macro)
                        continue;
                if (path_matches(path, pathlen,
-                                a->u.pattern, base, strlen(base)))
+                                a->pattern, base, strlen(base)))
                        rem = fill_one("fill", a, rem);
        }
        return rem;
@@ -722,7 +721,7 @@ static int macroexpand_one(int attr_nr, int rem)
                        struct match_attr *ma = stk->attrs[i];
                        if (!ma->is_macro)
                                continue;
-                       if (ma->u.attr->attr_nr == attr_nr)
+                       if (ma->attr->attr_nr == attr_nr)
                                a = ma;
                }
 
-- 
1.7.12.1.405.gb727dc9

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to