By passing "struct diff_options *" to strip_prefix(), we can do some
more intelligent and repeated logic at one place. The removal of
"if (opt->prefix_length)" is just the beginning.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
---
 diff.c | 24 ++++++++++++++----------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/diff.c b/diff.c
index fa78fc1..b4949a2 100644
--- a/diff.c
+++ b/diff.c
@@ -3147,8 +3147,15 @@ static void diff_fill_sha1_info(struct diff_filespec 
*one)
                hashclr(one->sha1);
 }
 
-static void strip_prefix(int prefix_length, const char **namep, const char 
**otherp)
+static void strip_prefix(struct diff_options *opt,
+                        const char **namep,
+                        const char **otherp)
 {
+       int prefix_length = opt->prefix_length;
+
+       if (!prefix_length)
+               return;
+
        /* Strip the prefix but do not molest /dev/null and absolute paths */
        if (*namep && **namep != '/') {
                *namep += prefix_length;
@@ -3175,8 +3182,7 @@ static void run_diff(struct diff_filepair *p, struct 
diff_options *o)
        name  = p->one->path;
        other = (strcmp(name, p->two->path) ? p->two->path : NULL);
        attr_path = name;
-       if (o->prefix_length)
-               strip_prefix(o->prefix_length, &name, &other);
+       strip_prefix(o, &name, &other);
 
        if (!DIFF_OPT_TST(o, ALLOW_EXTERNAL))
                pgm = NULL;
@@ -3230,8 +3236,7 @@ static void run_diffstat(struct diff_filepair *p, struct 
diff_options *o,
        name = p->one->path;
        other = (strcmp(name, p->two->path) ? p->two->path : NULL);
 
-       if (o->prefix_length)
-               strip_prefix(o->prefix_length, &name, &other);
+       strip_prefix(o, &name, &other);
 
        diff_fill_sha1_info(p->one);
        diff_fill_sha1_info(p->two);
@@ -3254,8 +3259,7 @@ static void run_checkdiff(struct diff_filepair *p, struct 
diff_options *o)
        other = (strcmp(name, p->two->path) ? p->two->path : NULL);
        attr_path = other ? other : name;
 
-       if (o->prefix_length)
-               strip_prefix(o->prefix_length, &name, &other);
+       strip_prefix(o, &name, &other);
 
        diff_fill_sha1_info(p->one);
        diff_fill_sha1_info(p->two);
@@ -4133,14 +4137,14 @@ static void diff_flush_raw(struct diff_filepair *p, 
struct diff_options *opt)
                const char *name_a, *name_b;
                name_a = p->one->path;
                name_b = p->two->path;
-               strip_prefix(opt->prefix_length, &name_a, &name_b);
+               strip_prefix(opt, &name_a, &name_b);
                write_name_quoted(name_a, opt->file, inter_name_termination);
                write_name_quoted(name_b, opt->file, line_termination);
        } else {
                const char *name_a, *name_b;
                name_a = p->one->mode ? p->one->path : p->two->path;
                name_b = NULL;
-               strip_prefix(opt->prefix_length, &name_a, &name_b);
+               strip_prefix(opt, &name_a, &name_b);
                write_name_quoted(name_a, opt->file, line_termination);
        }
 }
@@ -4345,7 +4349,7 @@ static void flush_one_pair(struct diff_filepair *p, 
struct diff_options *opt)
                const char *name_a, *name_b;
                name_a = p->two->path;
                name_b = NULL;
-               strip_prefix(opt->prefix_length, &name_a, &name_b);
+               strip_prefix(opt, &name_a, &name_b);
                write_name_quoted(name_a, opt->file, opt->line_termination);
        }
 }
-- 
2.8.2.531.gd073806

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to