}
int save_merge(struct file a, struct file b, struct file c,
- struct merge *merger, char *file)
+ struct merge *merger, char *file, int backup)
{
char *replacename = xmalloc(strlen(file) + 20);
char *orignew = xmalloc(strlen(file) + 20);
outfile = fdopen(fd, "w");
print_merge(outfile, &a, &b, &c, 0, merger);
fclose(outfile);
- if (rename(file, orignew) != 0 ||
- rename(replacename, file) != 0)
+ if (backup && rename(file, orignew) != 0)
+ err = -2;
+ else if (rename(replacename, file) != 0)
err = -2;
out:
break;
if (answer)
save_merge(fm, fb, fa, ci.merger,
- p->file);
+ p->file, !p->is_merge);
}
free(sm.body);
free(sb.body);
csl2 = diff(fb, fa);
ci = make_merger(fm, fb, fa, csl1, csl2, 0, 1, 0);
if (save_merge(fm, fb, fa, ci.merger,
- pl[pos].file) == 0) {
+ pl[pos].file, 1) == 0) {
pl[pos].is_merge = 1;
snprintf(mesg_buf, cols,
"Saved file %s.",
int words, struct merge *merger);
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);
+ struct merge *merger, char *file, int backup);
extern int isolate_conflicts(struct file af, struct file bf, struct file cf,
struct csl *csl1, struct csl *csl2, int words,