From 9cef559ad1a8d12a122b2e7965ed7da8c0198384 Mon Sep 17 00:00:00 2001 From: Tim Kientzle Date: Sat, 27 Jun 2009 14:36:51 -0400 Subject: [PATCH] Force client-provided file descriptors to binary mode on Cygwin. SVN-Revision: 1190 --- libarchive/archive_read_open_fd.c | 5 +++-- libarchive/archive_read_open_file.c | 4 +++- libarchive/archive_read_open_filename.c | 4 +++- libarchive/archive_write_open_fd.c | 4 +++- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/libarchive/archive_read_open_fd.c b/libarchive/archive_read_open_fd.c index 03a6bf622..8fa390ac6 100644 --- a/libarchive/archive_read_open_fd.c +++ b/libarchive/archive_read_open_fd.c @@ -95,8 +95,9 @@ archive_read_open_fd(struct archive *a, int fd, size_t block_size) mine->can_skip = 1; } else mine->can_skip = 0; - -#if defined(_WIN32) +#if defined(__CYGWIN__) + setmode(mine->fd, O_BINARY); +#elif defined(_WIN32) _setmode(mine->fd, _O_BINARY); #endif diff --git a/libarchive/archive_read_open_file.c b/libarchive/archive_read_open_file.c index d1fb821fa..e589720eb 100644 --- a/libarchive/archive_read_open_file.c +++ b/libarchive/archive_read_open_file.c @@ -94,7 +94,9 @@ archive_read_open_FILE(struct archive *a, FILE *f) } else mine->can_skip = 0; -#if defined(_WIN32) +#if defined(__CYGWIN__) + setmode(_fileno(mine->f), O_BINARY); +#elif defined(_WIN32) _setmode(_fileno(mine->f), _O_BINARY); #endif diff --git a/libarchive/archive_read_open_filename.c b/libarchive/archive_read_open_filename.c index e1adf8182..b04e579b5 100644 --- a/libarchive/archive_read_open_filename.c +++ b/libarchive/archive_read_open_filename.c @@ -96,7 +96,9 @@ archive_read_open_filename(struct archive *a, const char *filename, */ filename = ""; /* Normalize NULL to "" */ fd = 0; -#if defined(_WIN32) +#if defined(__CYGWIN__) + setmode(0, O_BINARY); +#elif defined(_WIN32) _setmode(0, _O_BINARY); #endif } else { diff --git a/libarchive/archive_write_open_fd.c b/libarchive/archive_write_open_fd.c index b48e00e2e..5ebac81d5 100644 --- a/libarchive/archive_write_open_fd.c +++ b/libarchive/archive_write_open_fd.c @@ -64,7 +64,9 @@ archive_write_open_fd(struct archive *a, int fd) return (ARCHIVE_FATAL); } mine->fd = fd; -#if defined(_WIN32) +#if defined(__CYGWIN__) + setmode(mine->fd, O_BINARY); +#elif defined(_WIN32) _setmode(mine->fd, _O_BINARY); #endif return (archive_write_open(a, mine, -- 2.47.3