Browse Source

config.c: fix accuracy of line number in errors

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>
maint
Matthieu Moy 11 years ago committed by Junio C Hamano
parent
commit
b3b3f60bb6
  1. 12
      config.c

12
config.c

@ -244,6 +244,7 @@ static int get_next_char(void) @@ -244,6 +244,7 @@ static int get_next_char(void)
cf->linenr++;
if (c == EOF) {
cf->eof = 1;
cf->linenr++;
c = '\n';
}
return c;
@ -319,6 +320,7 @@ static int get_value(config_fn_t fn, void *data, struct strbuf *name) @@ -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 (;;) {
@ -341,7 +343,15 @@ static int get_value(config_fn_t fn, void *data, struct strbuf *name) @@ -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)

Loading…
Cancel
Save