diff options
Diffstat (limited to 'third_party/git/copy.c')
-rw-r--r-- | third_party/git/copy.c | 67 |
1 files changed, 0 insertions, 67 deletions
diff --git a/third_party/git/copy.c b/third_party/git/copy.c deleted file mode 100644 index 4de6a110f091..000000000000 --- a/third_party/git/copy.c +++ /dev/null @@ -1,67 +0,0 @@ -#include "cache.h" - -int copy_fd(int ifd, int ofd) -{ - while (1) { - char buffer[8192]; - ssize_t len = xread(ifd, buffer, sizeof(buffer)); - if (!len) - break; - if (len < 0) - return COPY_READ_ERROR; - if (write_in_full(ofd, buffer, len) < 0) - return COPY_WRITE_ERROR; - } - return 0; -} - -static int copy_times(const char *dst, const char *src) -{ - struct stat st; - struct utimbuf times; - if (stat(src, &st) < 0) - return -1; - times.actime = st.st_atime; - times.modtime = st.st_mtime; - if (utime(dst, ×) < 0) - return -1; - 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); - switch (status) { - case COPY_READ_ERROR: - error_errno("copy-fd: read returned"); - break; - case COPY_WRITE_ERROR: - error_errno("copy-fd: write returned"); - break; - } - close(fdi); - if (close(fdo) != 0) - return error_errno("%s: close error", dst); - - if (!status && adjust_shared_perm(dst)) - return -1; - - return status; -} - -int copy_file_with_time(const char *dst, const char *src, int mode) -{ - int status = copy_file(dst, src, mode); - if (!status) - return copy_times(dst, src); - return status; -} |