Hi Junio, On 2015-06-22 19:37, Junio C Hamano wrote: > Johannes Schindelin <johannes.schindelin@xxxxxx> writes: > >> diff --git a/fsck.c b/fsck.c >> index 1a3f7ce..e81a342 100644 >> --- a/fsck.c >> +++ b/fsck.c >> @@ -64,30 +64,29 @@ enum fsck_msg_id { >> #undef MSG_ID >> >> #define STR(x) #x >> -#define MSG_ID(id, msg_type) { STR(id), FSCK_##msg_type }, >> +#define MSG_ID(id, msg_type) { STR(id), NULL, FSCK_##msg_type }, >> static struct { >> const char *id_string; >> + const char *lowercased; >> int msg_type; >> } msg_id_info[FSCK_MSG_MAX + 1] = { >> FOREACH_MSG_ID(MSG_ID) >> - { NULL, -1 } >> + { NULL, NULL, -1 } >> }; >> #undef MSG_ID >> >> static int parse_msg_id(const char *text) >> { >> - static char **lowercased; >> int i; >> >> - if (!lowercased) { >> + if (!msg_id_info[0].lowercased) { >> /* convert id_string to lower case, without underscores. */ >> - lowercased = xmalloc(FSCK_MSG_MAX * sizeof(*lowercased)); >> for (i = 0; i < FSCK_MSG_MAX; i++) { >> const char *p = msg_id_info[i].id_string; >> int len = strlen(p); >> char *q = xmalloc(len); >> >> - lowercased[i] = q; >> + msg_id_info[i].lowercased = q; >> while (*p) >> if (*p == '_') >> p++; >> @@ -98,7 +97,7 @@ static int parse_msg_id(const char *text) >> } >> >> for (i = 0; i < FSCK_MSG_MAX; i++) >> - if (!strcmp(text, lowercased[i])) >> + if (!strcmp(text, msg_id_info[i].lowercased)) >> return i; >> >> return -1; > > Heh, this was the first thing that came to my mind when I saw 03/19 > that lazily prepares downcased version (which is good) but do so in > a separately allocated buffer (which is improved by this change) ;-) > > IOW, I think all of the above should have been part of 03/19, not > "oops I belatedly realized that this way is better" fixup here. Gaaaah. Wrong commit fixed up. Sorry. Will be fixed in v8. >> +void fsck_set_msg_types(struct fsck_options *options, const char *values) >> +{ >> + char *buf = xstrdup(values), *to_free = buf; >> + int done = 0; >> + >> + while (!done) { >> + int len = strcspn(buf, " ,|"), equal; >> + >> + done = !buf[len]; >> + if (!len) { >> + buf++; >> + continue; >> + } >> + buf[len] = '\0'; >> + >> + for (equal = 0; equal < len && >> + buf[equal] != '=' && buf[equal] != ':'; equal++) > > Style. I'd format this more like so: > > for (equal = 0; > equal < len && buf[equal] != '=' && buf[equal] != ':'; > equal++) Will be fixed. >> + buf[equal] = tolower(buf[equal]); >> + buf[equal] = '\0'; >> + >> + if (equal == len) >> + die("Missing '=': '%s'", buf); >> + >> + fsck_set_msg_type(options, buf, buf + equal + 1); >> + buf += len + 1; >> + } >> + free(to_free); >> +} > > Overall, the change is good (and it was good in v6, too), and I > think it has become simpler to follow the logic with the upfront > downcasing. Yep, I agree. I did not expect that, but it was worth the effort to compare the two versions. Ciao, Dscho -- To unsubscribe from this list: send the line "unsubscribe git" in