]> git.neil.brown.name Git - wiggle.git/commitdiff
Browser: base tempfile name on that of original file.
authorNeilBrown <neilb@suse.de>
Fri, 23 Aug 2013 00:37:05 +0000 (10:37 +1000)
committerNeilBrown <neilb@suse.de>
Fri, 23 Aug 2013 00:37:05 +0000 (10:37 +1000)
This way editor file-type detection (e.g. *.c means C file) works,
and as it is in the same directory, other related files are
easily found.

Signed-off-by: NeilBrown <neilb@suse.de>
merge2.c
vpatch.c

index 4910910feadd9081b696a2f6d48cf60110447b22..47bd978d52bd27b614ad7b48a8fc8e4fc43ad2c8 100644 (file)
--- a/merge2.c
+++ b/merge2.c
@@ -892,16 +892,30 @@ int save_tmp_merge(struct file a, struct file b, struct file c,
        FILE *outfile;
        char *dir, *fname;
        int lineno;
-
-       dir = getenv("TMPDIR");
-       if (!dir)
-               dir = "/tmp";
-
-       asprintf(&fname, "%s/wiggle-tmp-XXXXXX", dir);
-       fd = mkstemp(fname);
+       int suffix = 0;
+
+       if (!*filep) {
+               dir = getenv("TMPDIR");
+               if (!dir)
+                       dir = "/tmp";
+
+               asprintf(&fname, "%s/wiggle-tmp-XXXXXX", dir);
+       } else {
+               char *base;
+               dir = *filep;
+               base = strrchr(dir, '/');
+               if (base)
+                       base++;
+               else
+                       base = dir;
+               asprintf(&fname, "%.*stmp-XXXXXX-%s", (int)(base-dir), dir, base);
+               suffix = strlen(base)+1;
+       }
+       fd = mkstemps(fname, suffix);
 
        if (fd < 0) {
                free(fname);
+               *filep = NULL;
                return -1;
        }
        outfile = fdopen(fd, "w");
index 95394137ab1ce42183ffb2a5b2b23a8970b49947..063062bba0de0b9f86823d842f44f91c3a53039f 100644 (file)
--- a/vpatch.c
+++ b/vpatch.c
@@ -1844,6 +1844,7 @@ static int merge_window(struct plist *p, FILE *f, int reverse, int replace,
                                mesg = "Cannot run editor when diffing";
                                break;
                        }
+                       tempname = p->file;
                        lineno = save_tmp_merge(fm, fb, fa, ci.merger,
                                                &tempname,
                                                ci.merger + pos.p.m,