* fhandler_raw.cc (fhandler_dev_raw::raw_write): Remove buffered
write entirely.
This commit is contained in:
parent
e84b534998
commit
dd3a7a2042
@ -1,3 +1,8 @@
|
|||||||
|
2004-07-14 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* fhandler_raw.cc (fhandler_dev_raw::raw_write): Remove buffered
|
||||||
|
write entirely.
|
||||||
|
|
||||||
2004-07-07 Corinna Vinschen <corinna@vinschen.de>
|
2004-07-07 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* spawn.cc (spawn_guts): Check if script is executable.
|
* spawn.cc (spawn_guts): Check if script is executable.
|
||||||
|
@ -310,10 +310,7 @@ int
|
|||||||
fhandler_dev_raw::raw_write (const void *ptr, size_t len)
|
fhandler_dev_raw::raw_write (const void *ptr, size_t len)
|
||||||
{
|
{
|
||||||
DWORD bytes_written = 0;
|
DWORD bytes_written = 0;
|
||||||
DWORD bytes_to_write;
|
|
||||||
DWORD written;
|
|
||||||
char *p = (char *) ptr;
|
char *p = (char *) ptr;
|
||||||
char *tgt;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* Checking a previous end of media on tape */
|
/* Checking a previous end of media on tape */
|
||||||
@ -327,73 +324,7 @@ fhandler_dev_raw::raw_write (const void *ptr, size_t len)
|
|||||||
devbufstart = devbufend = 0;
|
devbufstart = devbufend = 0;
|
||||||
is_writing (true);
|
is_writing (true);
|
||||||
|
|
||||||
if (devbuf)
|
if (len > 0)
|
||||||
{
|
|
||||||
while (len > 0)
|
|
||||||
{
|
|
||||||
if ((len < devbufsiz || devbufend > 0) && devbufend < devbufsiz)
|
|
||||||
{
|
|
||||||
bytes_to_write = min (len, devbufsiz - devbufend);
|
|
||||||
memcpy (devbuf + devbufend, p, bytes_to_write);
|
|
||||||
bytes_written += bytes_to_write;
|
|
||||||
devbufend += bytes_to_write;
|
|
||||||
p += bytes_to_write;
|
|
||||||
len -= bytes_to_write;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (devbufend == devbufsiz)
|
|
||||||
{
|
|
||||||
bytes_to_write = devbufsiz;
|
|
||||||
tgt = devbuf;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bytes_to_write = (len / devbufsiz) * devbufsiz;
|
|
||||||
tgt = p;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = 0;
|
|
||||||
write_file (tgt, bytes_to_write, &written, &ret);
|
|
||||||
|
|
||||||
if (ret)
|
|
||||||
{
|
|
||||||
if (!is_eom (ret))
|
|
||||||
{
|
|
||||||
__seterrno ();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
eom_detected (true);
|
|
||||||
|
|
||||||
if (!written && !bytes_written)
|
|
||||||
{
|
|
||||||
set_errno (ENOSPC);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tgt == p)
|
|
||||||
bytes_written += written;
|
|
||||||
|
|
||||||
break; // from while (len > 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tgt == devbuf)
|
|
||||||
{
|
|
||||||
if (written != devbufsiz)
|
|
||||||
memmove (devbuf, devbuf + written, devbufsiz - written);
|
|
||||||
devbufend = devbufsiz - written;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
len -= written;
|
|
||||||
p += written;
|
|
||||||
bytes_written += written;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (len > 0)
|
|
||||||
{
|
{
|
||||||
if (!write_file (p, len, &bytes_written, &ret))
|
if (!write_file (p, len, &bytes_written, &ret))
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user