From eae6faea6bd125254af2af4f90390930a331a184 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Fri, 23 Aug 2013 10:37:05 +1000 Subject: [PATCH] Browser: base tempfile name on that of original file. 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 --- merge2.c | 28 +++++++++++++++++++++------- vpatch.c | 1 + 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/merge2.c b/merge2.c index 4910910..47bd978 100644 --- 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"); diff --git a/vpatch.c b/vpatch.c index 9539413..063062b 100644 --- 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, -- 2.39.5