47 lines
1.2 KiB
Diff
47 lines
1.2 KiB
Diff
|
--- src/util.c
|
||
|
+++ src/util.c
|
||
|
@@ -188,7 +188,8 @@ tape_fill_input_buffer (int in_des, int
|
||
|
input_size = rmtread (in_des, input_buffer, num_bytes);
|
||
|
if (input_size == 0 && input_is_special)
|
||
|
{
|
||
|
- get_next_reel (in_des);
|
||
|
+ if (!tape_eof (in_des))
|
||
|
+ get_next_reel (in_des);
|
||
|
input_size = rmtread (in_des, input_buffer, num_bytes);
|
||
|
}
|
||
|
if (input_size < 0)
|
||
|
@@ -354,7 +355,8 @@ tape_buffered_peek (char *peek_buf, int
|
||
|
{
|
||
|
if (input_is_special)
|
||
|
{
|
||
|
- get_next_reel (in_des);
|
||
|
+ if (!tape_eof (in_des))
|
||
|
+ get_next_reel (in_des);
|
||
|
tmp_input_size = rmtread (in_des, append_buf, io_block_size);
|
||
|
}
|
||
|
else
|
||
|
@@ -828,6 +830,22 @@ tape_offline (int tape_des)
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
+int
|
||
|
+tape_eof( int tape_des)
|
||
|
+{
|
||
|
+ struct mtget status;
|
||
|
+
|
||
|
+ if (rmtioctl (tape_des, MTIOCGET, (char*)&status) == -1) {
|
||
|
+ error (1, errno, "Cannot get tape status");
|
||
|
+ return 0;
|
||
|
+ }
|
||
|
+
|
||
|
+ if (GMT_EOF(status.mt_gstat))
|
||
|
+ return 1;
|
||
|
+
|
||
|
+ return 0;
|
||
|
+}
|
||
|
+
|
||
|
/* The file on file descriptor TAPE_DES is assumed to be magnetic tape
|
||
|
(or floppy disk or other device) and the end of the medium
|
||
|
has been reached. Ask the user for to mount a new "tape" to continue
|
||
|
|