From: Junio C Hamano Date: Wed, 23 Jul 2014 21:49:43 GMT Subject: Re: [PATCH 1/7] config.c: fix accuracy of line number in errors Message-ID: In-Reply-To: <1406140978-9472-2-git-send-email-tanayabh@gmail.com> Tanay Abhra writes: > 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. > > Discovered-by: Tanay Abhra > Signed-off-by: Matthieu Moy Thanks. I am not sure what to read in these two lines. Was the fix done by you or Matthieu? > --- > config.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/config.c b/config.c > index 22971e9..6db8f97 100644 > --- a/config.c > +++ b/config.c > @@ -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) > { > 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) > 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)