pkgsrc/emulators/hercules/patches/patch-scsitape.c
ryoon 1c0f7d5595 Update to 3.09
* With some aws tape images, I have gotten some errors
* We can install Linux/s390x to hercules with tun network support
  on NetBSD

Changelog:
unknown
2013-10-15 14:14:53 +00:00

36 lines
1.1 KiB
C

$NetBSD: patch-scsitape.c,v 1.2 2013/10/15 14:14:53 ryoon Exp $
--- scsitape.c.orig 2013-06-14 21:32:42.000000000 +0000
+++ scsitape.c
@@ -1261,7 +1261,11 @@ int readblkid_scsitape ( DEVBLK* dev, BY
// value, also known as the >>LOGICAL<< value and *NOT*
// the absolute/physical device-relative value)
+#if defined(BSD) && BSD >= 199306
+ struct mtget mtpos;
+#else
struct mtpos mtpos;
+#endif
BYTE blockid[4];
if (ioctl_tape( dev->fd, MTIOCPOS, (char*) &mtpos ) < 0 )
@@ -1326,6 +1330,19 @@ int locateblk_scsitape ( DEVBLK* dev, U3
mtop.mt_count = CSWAP32( mtop.mt_count ); // (host <- guest)
mtop.mt_op = MTSEEK;
+#if defined(BSD) && BSD >= 199306
+ /* Find out where we are so we can do a relative seek */
+ {
+ struct mtget here;
+
+ rc = ioctl_tape( dev->fd, MTIOCGET, (char*)&here );
+ if (rc >= 0) {
+ mtop.mt_count -= here.mt_blkno;
+ mtop.mt_op = MTFSR;
+ }
+ }
+#endif /* BSD */
+
// Ask the actual hardware to do an actual physical locate...
if ((rc = ioctl_tape( dev->fd, MTIOCTOP, (char*)&mtop )) < 0)