On Wed, Oct 1, 2008 at 8:28 PM, Brandon Casey <casey@xxxxxxxxxxxxxxx> wrote: > POSIX doth sayeth: > > "In the regular expression processing described in IEEE Std 1003.1-2001, > the <newline> is regarded as an ordinary character and both a period and > a non-matching list can match one. ... Those utilities (like grep) that > do not allow <newline>s to match are responsible for eliminating any > <newline> from strings before matching against the RE." > > Thus far git has not been removing the trailing newline from strings matched > against regular expression patterns. This has the effect that (quoting > Jonathan del Strother) "... a line containing just 'FUNCNAME' (terminated by > a newline) will be matched by the pattern '^(FUNCNAME.$)' but not > '^(FUNCNAME$)'", and more simply not '^FUNCNAME$'. > > Signed-off-by: Brandon Casey <casey@xxxxxxxxxxxxxxx> > --- > > > This could be a little simpler if I knew what was guaranteed from xdiff. > Such as whether the len elements of line were guaranteed to be newline > terminated, or be greater than zero. But, the code in def_ff() in xemit.c > is wrapped in 'if (len > 0)', so.. > > -brandon > > > xdiff-interface.c | 12 +++++++++++- > 1 files changed, 11 insertions(+), 1 deletions(-) > > diff --git a/xdiff-interface.c b/xdiff-interface.c > index 8bab82e..61f5dab 100644 > --- a/xdiff-interface.c > +++ b/xdiff-interface.c > @@ -191,12 +191,22 @@ struct ff_regs { > static long ff_regexp(const char *line, long len, > char *buffer, long buffer_size, void *priv) > { > - char *line_buffer = xstrndup(line, len); /* make NUL terminated */ > + char *line_buffer; > struct ff_regs *regs = priv; > regmatch_t pmatch[2]; > int i; > int result = -1; > > + /* Exclude terminating newline (and cr) from matching */ > + if (len > 0 && line[len-1] == '\n') { > + if (len > 1 && line[len-2] == '\r') > + len -= 2; > + else > + len--; > + } > + > + line_buffer = xstrndup(line, len); /* make NUL terminated */ > + > for (i = 0; i < regs->nr; i++) { > struct ff_reg *reg = regs->array + i; > if (!regexec(®->re, line_buffer, 2, pmatch, 0)) { > -- > 1.6.0.2.323.g7c850 > > Looks good to me, or at least, works as advertised with a bunch of my funcname patterns. -- 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