}
return rv;
}
-
-int save_merge(struct file a, struct file b, struct file c,
- struct merge *merger, char *file, int backup)
-{
- char *replacename = xmalloc(strlen(file) + 20);
- char *orignew = xmalloc(strlen(file) + 20);
- int fd;
- FILE *outfile;
- int err = 0;
- int lineno = 0;
- strcpy(replacename, file);
- strcat(replacename, "XXXXXX");
- strcpy(orignew, file);
- strcat(orignew, ".porig");
-
- fd = mkstemp(replacename);
- if (fd < 0) {
- err = -1;
- goto out;
- }
- outfile = fdopen(fd, "w");
- lineno = print_merge(outfile, &a, &b, &c, 0, merger,
- NULL, 0, 0);
- fclose(outfile);
- if (backup && rename(file, orignew) != 0)
- err = -2;
- else if (rename(replacename, file) != 0)
- err = -2;
-
-out:
- free(replacename);
- free(orignew);
- return err < 0 ? err : lineno;
-}
-
-int save_tmp_merge(struct file a, struct file b, struct file c,
- struct merge *merger, char **filep,
- struct merge *mpos, int streampos, int offsetpos)
-{
- int fd;
- FILE *outfile;
- char *dir, *fname;
- int lineno;
- 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");
- lineno = print_merge(outfile, &a, &b, &c, 0, merger,
- mpos, streampos, offsetpos);
- fclose(outfile);
- *filep = fname;
- return lineno;
-}
return r;
}
+
+static int save_merge(struct file a, struct file b, struct file c,
+ struct merge *merger, char *file, int backup)
+{
+ char *replacename = xmalloc(strlen(file) + 20);
+ char *orignew = xmalloc(strlen(file) + 20);
+ int fd;
+ FILE *outfile;
+ int err = 0;
+ int lineno = 0;
+ strcpy(replacename, file);
+ strcat(replacename, "XXXXXX");
+ strcpy(orignew, file);
+ strcat(orignew, ".porig");
+
+ fd = mkstemp(replacename);
+ if (fd < 0) {
+ err = -1;
+ goto out;
+ }
+ outfile = fdopen(fd, "w");
+ lineno = print_merge(outfile, &a, &b, &c, 0, merger,
+ NULL, 0, 0);
+ fclose(outfile);
+ if (backup && rename(file, orignew) != 0)
+ err = -2;
+ else if (rename(replacename, file) != 0)
+ err = -2;
+
+out:
+ free(replacename);
+ free(orignew);
+ return err < 0 ? err : lineno;
+}
+
+static int save_tmp_merge(struct file a, struct file b, struct file c,
+ struct merge *merger, char **filep,
+ struct merge *mpos, int streampos, int offsetpos)
+{
+ int fd;
+ FILE *outfile;
+ char *dir, *fname;
+ int lineno;
+ 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");
+ lineno = print_merge(outfile, &a, &b, &c, 0, merger,
+ mpos, streampos, offsetpos);
+ fclose(outfile);
+ *filep = fname;
+ return lineno;
+}
+
static int merge_window(struct plist *p, FILE *f, int reverse, int replace,
int selftest, int ignore_blanks, int just_diff, int backup)
{
int words, struct merge *merger,
struct merge *mpos, int streampos, int offsetpos);
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,
- struct merge *mpos, int streampos, int offsetpos);
extern int isolate_conflicts(struct file af, struct file bf, struct file cf,
struct csl *csl1, struct csl *csl2, int words,