From 74f15f7d4c0ccf6c1426b166704d6011905232ff Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Sat, 3 Oct 2020 20:21:13 +1000 Subject: [PATCH] Move save functions to vpatch.c save_merge and save_tmp_merge are only used in vpatch.c and don't depend on anything from merge2.c that isn't exported, so move them to vpatch.c Signed-off-by: NeilBrown --- merge2.c | 76 ------------------------------------------------------- vpatch.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wiggle.h | 5 ---- 3 files changed, 77 insertions(+), 81 deletions(-) diff --git a/merge2.c b/merge2.c index 435f859..24ccd73 100644 --- a/merge2.c +++ b/merge2.c @@ -912,79 +912,3 @@ int print_merge(FILE *out, struct file *a, struct file *b, struct file *c, } 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; -} diff --git a/vpatch.c b/vpatch.c index 353c2f4..abbb4c6 100644 --- a/vpatch.c +++ b/vpatch.c @@ -1291,6 +1291,83 @@ static void *memdup(void *a, int len) 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) { diff --git a/wiggle.h b/wiggle.h index dcee337..90e71f2 100644 --- a/wiggle.h +++ b/wiggle.h @@ -170,11 +170,6 @@ extern int print_merge(FILE *out, 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, -- 2.39.5