git-svn: starting a 1.1.0-pre development version
[gitweb.git] / diff.c
diff --git a/diff.c b/diff.c
index af5db0ec12817a259c8c4f4c1482aa90ace03f17..3a2a175c7ec34d5524f8e664c4dd3f05c24f4d4a 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -237,7 +237,7 @@ static char *pprint_rename(const char *a, const char *b)
                if (a_midlen < 0) a_midlen = 0;
                if (b_midlen < 0) b_midlen = 0;
 
-               name = xmalloc(len_a + len_b - pfx_length - sfx_length + 7);
+               name = xmalloc(pfx_length + a_midlen + b_midlen + sfx_length + 7);
                sprintf(name, "%.*s{%.*s => %.*s}%s",
                        pfx_length, a,
                        a_midlen, a + pfx_length,
@@ -431,7 +431,7 @@ static void checkdiff_consume(void *priv, char *line, unsigned long len)
        else if (line[0] == '@') {
                char *plus = strchr(line, '+');
                if (plus)
-                       data->lineno = strtol(plus, line + len, 10);
+                       data->lineno = strtol(plus, NULL, 10);
                else
                        die("invalid diff");
        }
@@ -1303,6 +1303,14 @@ int diff_setup_done(struct diff_options *options)
            (options->output_format == DIFF_FORMAT_CHECKDIFF))
                options->recursive = 1;
 
+       /*
+        * These combinations do not make sense.
+        */
+       if (options->output_format == DIFF_FORMAT_RAW)
+               options->with_raw = 0;
+       if (options->output_format == DIFF_FORMAT_DIFFSTAT)
+               options->with_stat  = 0;
+
        if (options->detect_rename && options->rename_limit < 0)
                options->rename_limit = diff_rename_limit_default;
        if (options->setup & DIFF_SETUP_USE_CACHE) {