]> git.neil.brown.name Git - wiggle.git/commitdiff
Fix off-by-one-error when extracting a merge file.
authorNeil Brown <neilb@suse.de>
Sun, 21 May 2006 23:17:49 +0000 (09:17 +1000)
committerNeil Brown <neilb@suse.de>
Sun, 21 May 2006 23:17:49 +0000 (09:17 +1000)
If a merge ended at EOF, --extract wouldn't interpret it properly.

extract.c
p

index 0959b4491a3563fe265415dafd23c8cc2fd06dfc..755a725afa8565e15392e78b69628848fe946ad0 100644 (file)
--- a/extract.c
+++ b/extract.c
@@ -207,7 +207,7 @@ int split_merge(struct stream f, struct stream *f1, struct stream *f2, struct st
                lineno++;
                switch(state) {
                case 0:
-                       if (len>8 &&
+                       if (len>=8 &&
                            strncmp(cp, "<<<<<<<", 7)==0 &&
                            (cp[7] == ' ' || cp[7] == '\n')
                                ) {
@@ -222,7 +222,7 @@ int split_merge(struct stream f, struct stream *f1, struct stream *f2, struct st
                        }
                        break;
                case 1:
-                       if (len>8 &&
+                       if (len>=8 &&
                            strncmp(cp, "|||||||", 7)==0 &&
                            (cp[7] == ' ' || cp[7] == '\n')
                                ) {
@@ -232,7 +232,7 @@ int split_merge(struct stream f, struct stream *f1, struct stream *f2, struct st
                                copyline(&r1, &cp, end);
                        break;
                case 2:
-                       if (len>8 &&
+                       if (len>=8 &&
                            strncmp(cp, "=======", 7)==0 &&
                            (cp[7] == ' ' || cp[7] == '\n')
                                ) {
@@ -242,7 +242,7 @@ int split_merge(struct stream f, struct stream *f1, struct stream *f2, struct st
                                copyline(&r2, &cp, end);
                        break;
                case 3:
-                       if (len>8 &&
+                       if (len>=8 &&
                            strncmp(cp, ">>>>>>>", 7)==0 &&
                            (cp[7] == ' ' || cp[7] == '\n')
                                ) {
diff --git a/p b/p
index 2500b662c5b22ff2e322e881db7dbcee6d97bbda..48ee550232dc9e3e3f3ec3138be170f32f37c90f 100755 (executable)
--- a/p
+++ b/p
@@ -170,7 +170,7 @@ commit_one()
 {
        rm -f "$1~current~"
        mv "$1" "$1~current~"
-       cp "$1~current~" $1
+       cp -p "$1~current~" $1
        chmod u+w $1
 }