Skip to content

Commit

Permalink
config.c: fix accuracy of line number in errors
Browse files Browse the repository at this point in the history
If a callback returns a negative value to `git_config*()` family,
they call `die()` while printing the line number and the file name.
Currently the printed line number is off by one, thus printing the
wrong line number.

Make `linenr` point to the line we just parsed during the call
to callback to get accurate line number in error messages.

Commit-message-by: Tanay Abhra <tanayabh@gmail.com>
Signed-off-by: Tanay Abhra <tanayabh@gmail.com>
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Matthieu Moy authored and Junio C Hamano committed Aug 7, 2014
1 parent 8262aaa commit b3b3f60
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion config.c
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,7 @@ static int get_next_char(void)
cf->linenr++;
if (c == EOF) {
cf->eof = 1;
cf->linenr++;
c = '\n';
}
return c;
Expand Down Expand Up @@ -319,6 +320,7 @@ static int get_value(config_fn_t fn, void *data, struct strbuf *name)
{
int c;
char *value;
int ret;

/* Get the full name */
for (;;) {
Expand All @@ -341,7 +343,15 @@ static int get_value(config_fn_t fn, void *data, struct strbuf *name)
if (!value)
return -1;
}
return fn(name->buf, value, data);
/*
* We already consumed the \n, but we need linenr to point to
* the line we just parsed during the call to fn to get
* accurate line number in error messages.
*/
cf->linenr--;
ret = fn(name->buf, value, data);
cf->linenr++;
return ret;
}

static int get_extended_base_var(struct strbuf *name, int c)
Expand Down

0 comments on commit b3b3f60

Please sign in to comment.