xmerge: make return value from xdl_merge() more usable.
authorJunio C Hamano <junkio@cox.net>
Wed, 29 Nov 2006 20:06:49 +0000 (12:06 -0800)
committerJunio C Hamano <junkio@cox.net>
Sun, 3 Dec 2006 01:28:19 +0000 (17:28 -0800)
The callers would want to know if the resulting merge is clean;
do not discard that information away after calling xdl_do_merge().

Signed-off-by: Junio C Hamano <junkio@cox.net>
xdiff/xmerge.c

index 7b85aa59062e5f6e617f62ef1003c4f9dd13de18..286f177b542811f67fc77f633445a12cb1b5f198 100644 (file)
@@ -384,6 +384,7 @@ int xdl_merge(mmfile_t *orig, mmfile_t *mf1, const char *name1,
                xpparam_t const *xpp, int level, mmbuffer_t *result) {
        xdchange_t *xscr1, *xscr2;
        xdfenv_t xe1, xe2;
+       int status;
 
        result->ptr = NULL;
        result->size = 0;
@@ -404,6 +405,7 @@ int xdl_merge(mmfile_t *orig, mmfile_t *mf1, const char *name1,
                xdl_free_env(&xe2);
                return -1;
        }
+       status = 0;
        if (xscr1 || xscr2) {
                if (!xscr1) {
                        result->ptr = xdl_malloc(mf2->size);
@@ -413,14 +415,10 @@ int xdl_merge(mmfile_t *orig, mmfile_t *mf1, const char *name1,
                        result->ptr = xdl_malloc(mf1->size);
                        memcpy(result->ptr, mf1->ptr, mf1->size);
                        result->size = mf1->size;
-               } else if (xdl_do_merge(&xe1, xscr1, name1,
-                                       &xe2, xscr2, name2,
-                                       level, xpp, result) < 0) {
-                       xdl_free_script(xscr1);
-                       xdl_free_script(xscr2);
-                       xdl_free_env(&xe1);
-                       xdl_free_env(&xe2);
-                       return -1;
+               } else {
+                       status = xdl_do_merge(&xe1, xscr1, name1,
+                                             &xe2, xscr2, name2,
+                                             level, xpp, result);
                }
                xdl_free_script(xscr1);
                xdl_free_script(xscr2);
@@ -428,6 +426,5 @@ int xdl_merge(mmfile_t *orig, mmfile_t *mf1, const char *name1,
        xdl_free_env(&xe1);
        xdl_free_env(&xe2);
 
-       return 0;
+       return status;
 }
-