From 31423baf33f09ead42e8d35fe00030e25fd1cdc8 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sun, 24 Mar 2019 18:11:10 +0200 Subject: [PATCH] Zero size read or write should not change drive state. --- scsitape.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/scsitape.cpp b/scsitape.cpp index fdc1c0a6..5cf36641 100644 --- a/scsitape.cpp +++ b/scsitape.cpp @@ -334,10 +334,12 @@ static int tape_read (struct scsi_data_tape *tape, uae_u8 *scsi_data, int len, b write_log(_T("TAPEEMU READ: Requested %ld, read %ld, pos %lld, %lld remaining.\n"), len, got, pos, zfile_size(tape->zf) - pos); } else { got = 0; - uae_u8 *data = xmalloc(uae_u8, len); - if (data) { - got = zfile_fread(data, 1, len, tape->zf); - xfree(data); + if (len > 0) { + uae_u8 *data = xmalloc(uae_u8, len); + if (data) { + got = zfile_fread(data, 1, len, tape->zf); + xfree(data); + } } } tape->file_offset += got; @@ -563,7 +565,7 @@ int scsi_tape_emulate (struct scsi_data_tape *tape, uae_u8 *cmdbuf, int scsi_cmd goto unloaded; if (tape->wp) goto writeprot; - if (tape->beom < 1) + if (len && tape->beom < 1) tape->beom = 1; scsi_len = tape_write (tape, scsi_data, len); if (scsi_len < 0) @@ -582,7 +584,7 @@ int scsi_tape_emulate (struct scsi_data_tape *tape, uae_u8 *cmdbuf, int scsi_cmd goto notape; if (tape->unloaded) goto unloaded; - if (tape->beom < 0) + if (len && tape->beom < 0) tape->beom = 0; scsi_len = tape_read (tape, scsi_data, len, &eof); if (log_tapeemu) -- 2.47.3