free(orignew);
return err;
}
+
+int save_tmp_merge(struct file a, struct file b, struct file c,
+ struct merge *merger, char **filep)
+{
+ int fd;
+ FILE *outfile;
+ char *dir, *fname;
+
+ dir = getenv("TMPDIR");
+ if (!dir)
+ dir = "/tmp";
+
+ asprintf(&fname, "%s/wiggle-tmp-XXXXXX", dir);
+ fd = mkstemp(fname);
+
+ if (fd < 0) {
+ free(fname);
+ return -1;
+ }
+ outfile = fdopen(fd, "w");
+ print_merge(outfile, &a, &b, &c, 0, merger);
+ fclose(outfile);
+ *filep = fname;
+ return 0;
+}
int changes = 0; /* If any edits have been made to the merge */
int answer; /* answer to 'save changes?' question */
int do_mark;
+ char *tempname;
struct elmnt e;
char search[80]; /* string we are searching for */
unsigned int searchlen = 0;
mesg = "Cannot run editor when diffing";
break;
}
- save_merge(fm, fb, fa, ci.merger,
- p->file, !p->is_merge);
- p->is_merge = 1;
+ save_tmp_merge(fm, fb, fa, ci.merger,
+ &tempname);
endwin();
free_stuff();
- do_edit(p->file);
- sp = load_file(p->file);
+ do_edit(tempname);
+ sp = load_file(tempname);
split_merge(sp, &sm, &sb, &sa);
free(sp.body);
prepare_merge(0);
- p->wiggles = 0;
- p->conflicts = isolate_conflicts(
- fm, fb, fa, csl1, csl2, 0,
- ci.merger, 0, &p->wiggles);
- p->chunks = p->conflicts;
refresh = 2;
- changes = 0;
+ changes = 1;
find_line(pos.p.lineno);
* Email: <neilb@suse.de>
*/
+#define _GNU_SOURCE /* for asprintf */
#include <stdio.h>
#include <string.h>
#include <memory.h>
extern void printword(FILE *f, struct elmnt e);
extern int save_merge(struct file a, struct file b, struct file c,
struct merge *merger, char *file, int backup);
+extern int save_tmp_merge(struct file a, struct file b, struct file c,
+ struct merge *merger, char **filep);
extern int isolate_conflicts(struct file af, struct file bf, struct file cf,
struct csl *csl1, struct csl *csl2, int words,