Skip to content

Commit

Permalink
Use a single implementation and API for copy_file()
Browse files Browse the repository at this point in the history
Originally by Kristian Hï¿œgsberg; I fixed the conversion of rerere, which
had a different API.

Signed-off-by: Daniel Barkalow <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
iabervon authored and gitster committed Feb 25, 2008
1 parent ed10d9a commit 1468bd4
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 43 deletions.
21 changes: 0 additions & 21 deletions builtin-init-db.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,27 +29,6 @@ static void safe_create_dir(const char *dir, int share)
die("Could not make %s writable by group\n", dir);
}

static int copy_file(const char *dst, const char *src, int mode)
{
int fdi, fdo, status;

mode = (mode & 0111) ? 0777 : 0666;
if ((fdi = open(src, O_RDONLY)) < 0)
return fdi;
if ((fdo = open(dst, O_WRONLY | O_CREAT | O_EXCL, mode)) < 0) {
close(fdi);
return fdo;
}
status = copy_fd(fdi, fdo);
if (close(fdo) != 0)
return error("%s: write error: %s", dst, strerror(errno));

if (!status && adjust_shared_perm(dst))
return -1;

return status;
}

static void copy_templates_1(char *path, int baselen,
char *template, int template_baselen,
DIR *dir)
Expand Down
19 changes: 1 addition & 18 deletions builtin-rerere.c
Original file line number Diff line number Diff line change
Expand Up @@ -267,23 +267,6 @@ static int diff_two(const char *file1, const char *label1,
return 0;
}

static int copy_file(const char *src, const char *dest)
{
FILE *in, *out;
char buffer[32768];
int count;

if (!(in = fopen(src, "r")))
return error("Could not open %s", src);
if (!(out = fopen(dest, "w")))
return error("Could not open %s", dest);
while ((count = fread(buffer, 1, sizeof(buffer), in)))
fwrite(buffer, 1, count, out);
fclose(in);
fclose(out);
return 0;
}

static int do_plain_rerere(struct path_list *rr, int fd)
{
struct path_list conflict = { NULL, 0, 0, 1 };
Expand Down Expand Up @@ -343,7 +326,7 @@ static int do_plain_rerere(struct path_list *rr, int fd)
continue;

fprintf(stderr, "Recorded resolution for '%s'.\n", path);
copy_file(path, rr_path(name, "postimage"));
copy_file(rr_path(name, "postimage"), path, 0666);
tail_optimization:
if (i < rr->nr - 1)
memmove(rr->items + i,
Expand Down
1 change: 1 addition & 0 deletions cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -602,6 +602,7 @@ extern const char *git_log_output_encoding;
/* IO helper functions */
extern void maybe_flush_or_die(FILE *, const char *);
extern int copy_fd(int ifd, int ofd);
extern int copy_file(const char *dst, const char *src, int mode);
extern int read_in_full(int fd, void *buf, size_t count);
extern int write_in_full(int fd, const void *buf, size_t count);
extern void write_or_die(int fd, const void *buf, size_t count);
Expand Down
21 changes: 21 additions & 0 deletions copy.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,24 @@ int copy_fd(int ifd, int ofd)
close(ifd);
return 0;
}

int copy_file(const char *dst, const char *src, int mode)
{
int fdi, fdo, status;

mode = (mode & 0111) ? 0777 : 0666;
if ((fdi = open(src, O_RDONLY)) < 0)
return fdi;
if ((fdo = open(dst, O_WRONLY | O_CREAT | O_EXCL, mode)) < 0) {
close(fdi);
return fdo;
}
status = copy_fd(fdi, fdo);
if (close(fdo) != 0)
return error("%s: write error: %s", dst, strerror(errno));

if (!status && adjust_shared_perm(dst))
return -1;

return status;
}
8 changes: 4 additions & 4 deletions diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -272,8 +272,8 @@ static void print_line_count(int count)
}
}

static void copy_file(int prefix, const char *data, int size,
const char *set, const char *reset)
static void copy_file_with_prefix(int prefix, const char *data, int size,
const char *set, const char *reset)
{
int ch, nl_just_seen = 1;
while (0 < size--) {
Expand Down Expand Up @@ -331,9 +331,9 @@ static void emit_rewrite_diff(const char *name_a,
print_line_count(lc_b);
printf(" @@%s\n", reset);
if (lc_a)
copy_file('-', one->data, one->size, old, reset);
copy_file_with_prefix('-', one->data, one->size, old, reset);
if (lc_b)
copy_file('+', two->data, two->size, new, reset);
copy_file_with_prefix('+', two->data, two->size, new, reset);
}

static int fill_mmfile(mmfile_t *mf, struct diff_filespec *one)
Expand Down

0 comments on commit 1468bd4

Please sign in to comment.