summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/cpio/src/cpio.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/tools/cpio/src/cpio.c b/tools/cpio/src/cpio.c
index 00f4a16b7..d91f25dc1 100644
--- a/tools/cpio/src/cpio.c
+++ b/tools/cpio/src/cpio.c
@@ -81,7 +81,8 @@ int sysv3;
#if defined (__linux__) || defined (__sun) || defined (__FreeBSD__) || \
defined (__hpux) || defined (_AIX) || defined (__NetBSD__) || \
- defined (__OpenBSD__) || defined (__DragonFly__) || defined (__APPLE__)
+ defined (__OpenBSD__) || defined (__DragonFly__) || \
+ defined (__APPLE__) || defined (__CYGWIN__)
#include <sys/mtio.h>
#else /* SVR4.2MP */
#include <sys/scsi.h>
@@ -4495,7 +4496,8 @@ tseek(off_t n)
int i = (n - poffs) / tapeblock;
#if defined (__linux__) || defined (__sun) || defined (__FreeBSD__) || \
defined (__hpux) || defined (_AIX) || defined (__NetBSD__) || \
- defined (__OpenBSD__) || defined (__DragonFly__) || defined (__APPLE__)
+ defined (__OpenBSD__) || defined (__DragonFly__) || \
+ defined (__APPLE__) || defined (__CYGWIN__)
struct mtop mo;
mo.mt_op = i > 0 ? MTFSR : MTBSR;
mo.mt_count = i > 0 ? i : -i;
@@ -4735,7 +4737,7 @@ mstat(void)
emsg(3, "Error during stat() of archive");
done(1);
}
-#if defined (__linux__)
+#if defined (__linux__)
if ((mtst.st_mode&S_IFMT) == S_IFCHR) {
struct mtget mg;
if (ioctl(mt, MTIOCGET, &mg) == 0)
@@ -4787,6 +4789,13 @@ mstat(void)
if (ioctl(mt, MTIOCGET, &mg) == 0)
tapeblock = mg.mt_blksiz;
}
+#elif defined (__CYGWIN__)
+ if ((mtst.st_mode&S_IFMT) == S_IFCHR) {
+ struct mtget mg;
+ if (ioctl(mt, MTIOCGET, &mg) == 0)
+ tapeblock = (mg.mt_dsreg&MT_ST_BLKSIZE_MASK) >>
+ MT_ST_BLKSIZE_SHIFT;
+ }
#elif defined (__hpux) || defined (_AIX)
#else /* SVR4.2MP */
if ((mtst.st_mode&S_IFMT) == S_IFCHR) {