On Thu, Dec 17, 2015 at 2:51 AM, Eric Sunshine <sunshine@xxxxxxxxxxxxxx> wrote: > On Wed, Dec 16, 2015 at 10:29 AM, Karthik Nayak <karthik.188@xxxxxxxxx> wrote: >> Introduce color_atom_parser() which will parse a "color" atom and >> store its color in the "use_atom" structure for further usage in > > Same comment as last time: s/use_atom/used_atom/ > Will change. >> 'populate_value()'. > > s/'//g > Will do. > More below... > >> Helped-by: Ramsay Jones <ramsay@xxxxxxxxxxxxxxxxxxxx> >> Signed-off-by: Karthik Nayak <Karthik.188@xxxxxxxxx> >> --- >> diff --git a/ref-filter.c b/ref-filter.c >> @@ -29,6 +29,9 @@ typedef enum { FIELD_STR, FIELD_ULONG, FIELD_TIME } cmp_type; >> static struct used_atom { >> const char *str; >> cmp_type type; >> + union { >> + const char *color; >> + } u; >> } *used_atom; >> static int used_atom_cnt, need_tagged, need_symref; >> static int need_color_reset_at_eol; >> @@ -53,6 +56,13 @@ static int match_atom_name(const char *name, const char *atom_name, const char * >> +static void color_atom_parser(struct used_atom *atom) >> +{ >> + match_atom_name(atom->str, "color", &atom->u.color); >> + if (!atom->u.color) >> + die(_("expected format: %%(color:<color>)")); >> +} >> + >> @@ -833,12 +846,10 @@ static void populate_value(struct ref_array_item *ref) >> refname = branch_get_push(branch, NULL); >> if (!refname) >> continue; >> - } else if (match_atom_name(name, "color", &valp)) { >> + } else if (starts_with(name, "color:")) { >> char color[COLOR_MAXLEN] = ""; >> >> - if (!valp) >> - die(_("expected format: %%(color:<color>)")); >> - if (color_parse(valp, color) < 0) >> + if (color_parse(atom->u.color, color) < 0) > > It would make a lot more sense to invoke color_parse() with the > unchanging argument to "color:" just once in color_atom_parser() > rather than doing it here repeatedly. (Also, you'd drop 'const' from > used_atom.u.color declaration.) > This makes sense, I'll put have color_parse() in color_atom_parser(). This would also require us to allocate memory once in color_atom_parser. > > Does v->s get freed each time through the loop? If not, then, assuming > you parse the color just once in color_atom_parser(), then you could > just assign the parsed color directly to v->s rather than duplicating > it. No it doesn't. Yup will do. -- Regards, Karthik Nayak -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html