* fhandler_raw.cc (write_file, read_file): New wrapper functions
for WriteFile and ReadFile to get rid of ERROR_MEDIA_CHANGED and ERROR_BUS_RESET in case of first access to tape. (fhandler_dev_raw::raw_write): Use write_file instead of WriteFile. (fhandler_dev_raw::raw_read): Use read_file instead of ReadFile.
This commit is contained in:
parent
c2644effa8
commit
5640cadbc5
|
@ -1,3 +1,11 @@
|
||||||
|
Fri May 12 20:31:00 2000 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* fhandler_raw.cc (write_file, read_file): New wrapper functions
|
||||||
|
for WriteFile and ReadFile to get rid of ERROR_MEDIA_CHANGED
|
||||||
|
and ERROR_BUS_RESET in case of first access to tape.
|
||||||
|
(fhandler_dev_raw::raw_write): Use write_file instead of WriteFile.
|
||||||
|
(fhandler_dev_raw::raw_read): Use read_file instead of ReadFile.
|
||||||
|
|
||||||
Fri May 12 01:04:57 2000 Christopher Faylor <cgf@cygnus.com>
|
Fri May 12 01:04:57 2000 Christopher Faylor <cgf@cygnus.com>
|
||||||
|
|
||||||
* Makefile.in (DLL_OFILES): Sort.
|
* Makefile.in (DLL_OFILES): Sort.
|
||||||
|
|
|
@ -17,6 +17,52 @@
|
||||||
#include <cygwin/rdevio.h>
|
#include <cygwin/rdevio.h>
|
||||||
#include <sys/mtio.h>
|
#include <sys/mtio.h>
|
||||||
|
|
||||||
|
/* static wrapper functions to hide the effect of media changes and
|
||||||
|
bus resets which occurs after a new media is inserted. This is
|
||||||
|
also related to the used tape device. */
|
||||||
|
|
||||||
|
static BOOL write_file (HANDLE fh, const void *buf, DWORD to_write,
|
||||||
|
DWORD *written, int *err)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
|
||||||
|
*err = 0;
|
||||||
|
if (!(ret = WriteFile (fh, buf, to_write, written, 0)))
|
||||||
|
{
|
||||||
|
if ((*err = GetLastError ()) == ERROR_MEDIA_CHANGED
|
||||||
|
|| *err == ERROR_BUS_RESET)
|
||||||
|
{
|
||||||
|
*err = 0;
|
||||||
|
if (!(ret = WriteFile (fh, buf, to_write, written, 0)))
|
||||||
|
*err = GetLastError ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
syscall_printf ("%d (err %d) = WriteFile (%d, %d, write %d, written %d, 0)\n",
|
||||||
|
ret, *err, fh, buf, to_write, *written);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL read_file (HANDLE fh, void *buf, DWORD to_read,
|
||||||
|
DWORD *read, int *err)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
|
||||||
|
*err = 0;
|
||||||
|
if (!(ret = ReadFile(fh, buf, to_read, read, 0)))
|
||||||
|
{
|
||||||
|
if ((*err = GetLastError ()) == ERROR_MEDIA_CHANGED
|
||||||
|
|| *err == ERROR_BUS_RESET)
|
||||||
|
{
|
||||||
|
*err = 0;
|
||||||
|
if (!(ret = ReadFile (fh, buf, to_read, read, 0)))
|
||||||
|
*err = GetLastError ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
syscall_printf ("%d (err %d) = ReadFile (%d, %d, to_read %d, read %d, 0)\n",
|
||||||
|
ret, *err, fh, buf, to_read, *read);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
/* fhandler_dev_raw */
|
/* fhandler_dev_raw */
|
||||||
|
|
||||||
|
@ -45,18 +91,13 @@ fhandler_dev_raw::writebuf (void)
|
||||||
DWORD to_write = ((devbufend - 1) / 512 + 1) * 512;
|
DWORD to_write = ((devbufend - 1) / 512 + 1) * 512;
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
if (!WriteFile (get_handle (), devbuf, to_write, &written, 0))
|
if (!write_file (get_handle (), devbuf, to_write, &written, &ret))
|
||||||
{
|
{
|
||||||
ret = GetLastError ();
|
|
||||||
if (is_eom (ret))
|
if (is_eom (ret))
|
||||||
eom_detected = 1;
|
eom_detected = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (written)
|
if (written)
|
||||||
has_written = 1;
|
has_written = 1;
|
||||||
|
|
||||||
syscall_printf ("%d = WriteFile(%d, %d, write %d, written %d, 0)\n",
|
|
||||||
ret, get_handle (), devbuf, to_write, written);
|
|
||||||
devbufstart = devbufend = 0;
|
devbufstart = devbufend = 0;
|
||||||
}
|
}
|
||||||
is_writing = 0;
|
is_writing = 0;
|
||||||
|
@ -208,11 +249,8 @@ fhandler_dev_raw::raw_read (void *ptr, size_t ulen)
|
||||||
debug_printf ("read %d bytes from file into buffer\n",
|
debug_printf ("read %d bytes from file into buffer\n",
|
||||||
bytes_to_read);
|
bytes_to_read);
|
||||||
}
|
}
|
||||||
if (!ReadFile (get_handle (), tgt, bytes_to_read, &read2, 0))
|
if (!read_file (get_handle (), tgt, bytes_to_read, &read2, &ret))
|
||||||
{
|
{
|
||||||
ret = GetLastError ();
|
|
||||||
syscall_printf ("ReadFile %s failed with error %d\n",
|
|
||||||
get_name (), ret);
|
|
||||||
if (!is_eof (ret) && !is_eom (ret))
|
if (!is_eof (ret) && !is_eom (ret))
|
||||||
{
|
{
|
||||||
debug_printf ("return -1, set errno to EACCES");
|
debug_printf ("return -1, set errno to EACCES");
|
||||||
|
@ -253,11 +291,8 @@ fhandler_dev_raw::raw_read (void *ptr, size_t ulen)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!ReadFile (get_handle (), ptr, len, &bytes_read, 0))
|
else if (!read_file (get_handle (), ptr, len, &bytes_read, &ret))
|
||||||
{
|
{
|
||||||
ret = GetLastError ();
|
|
||||||
syscall_printf ("ReadFile %s failed with error %d\n",
|
|
||||||
get_name (), ret);
|
|
||||||
if (!is_eof (ret) && !is_eom (ret))
|
if (!is_eof (ret) && !is_eom (ret))
|
||||||
{
|
{
|
||||||
debug_printf ("return -1, set errno to EACCES");
|
debug_printf ("return -1, set errno to EACCES");
|
||||||
|
@ -330,10 +365,7 @@ fhandler_dev_raw::raw_write (const void *ptr, size_t len)
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
if (!WriteFile (get_handle (), tgt, bytes_to_write, &written, 0))
|
write_file (get_handle (), tgt, bytes_to_write, &written, &ret);
|
||||||
ret = GetLastError ();
|
|
||||||
syscall_printf ("%d = WriteFile(%d, %d, write %d, written %d, 0)\n",
|
|
||||||
ret, get_handle (), tgt, bytes_to_write, written);
|
|
||||||
if (written)
|
if (written)
|
||||||
has_written = 1;
|
has_written = 1;
|
||||||
|
|
||||||
|
@ -376,11 +408,8 @@ fhandler_dev_raw::raw_write (const void *ptr, size_t len)
|
||||||
}
|
}
|
||||||
else if (len > 0)
|
else if (len > 0)
|
||||||
{
|
{
|
||||||
if (!WriteFile (get_handle (), ptr, len, &bytes_written, 0))
|
if (!write_file (get_handle (), ptr, len, &bytes_written, &ret))
|
||||||
{
|
{
|
||||||
ret = GetLastError ();
|
|
||||||
syscall_printf ("WriteFile %s failed with error %d\n",
|
|
||||||
get_name (), ret);
|
|
||||||
if (bytes_written)
|
if (bytes_written)
|
||||||
has_written = 1;
|
has_written = 1;
|
||||||
if (!is_eom (ret))
|
if (!is_eom (ret))
|
||||||
|
|
Loading…
Reference in New Issue