]> rtime.felk.cvut.cz Git - git.git/blobdiff - xdiff-interface.c
xdiff-interface.c: strip newline (and cr) from line before pattern matching
[git.git] / xdiff-interface.c
index 2c81f40cb657f6e49bc6a7431f830a037713ab38..3bf83f81e38d4a4cc114f3c577241cf7b9eddc7e 100644 (file)
@@ -179,11 +179,21 @@ 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 result = 0, i;
 
+       /* 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 (reg->negate ^ !!regexec(&reg->re,