summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler_floppy.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2008-10-09 12:41:52 +0000
committerCorinna Vinschen <corinna@vinschen.de>2008-10-09 12:41:52 +0000
commit3059d18288015dfee47e590705c06f0520598d05 (patch)
treec3664cd610a13a9fdaf5372f815c5a3d6d0d0b38 /winsup/cygwin/fhandler_floppy.cc
parent2768ae50dd79b1107d6f03a7fd0b4d9fbd83d0ba (diff)
downloadcygnal-3059d18288015dfee47e590705c06f0520598d05.tar.gz
cygnal-3059d18288015dfee47e590705c06f0520598d05.tar.bz2
cygnal-3059d18288015dfee47e590705c06f0520598d05.zip
* fhandler_floppy.cc (fhandler_dev_floppy::raw_read): Keep track of
current position in non-buffered case, too.
Diffstat (limited to 'winsup/cygwin/fhandler_floppy.cc')
-rw-r--r--winsup/cygwin/fhandler_floppy.cc30
1 files changed, 18 insertions, 12 deletions
diff --git a/winsup/cygwin/fhandler_floppy.cc b/winsup/cygwin/fhandler_floppy.cc
index f0e19c952..9e19b52aa 100644
--- a/winsup/cygwin/fhandler_floppy.cc
+++ b/winsup/cygwin/fhandler_floppy.cc
@@ -338,20 +338,26 @@ fhandler_dev_floppy::raw_read (void *ptr, size_t& ulen)
}
}
}
- else if (!read_file (p, len, &bytes_read, &ret))
+ else
{
- if (!IS_EOM (ret))
+ _off64_t current_position = get_current_position ();
+ if (current_position + bytes_to_read >= drive_size)
+ bytes_to_read = drive_size - current_position;
+ if (bytes_to_read && !read_file (p, len, &bytes_read, &ret))
{
- __seterrno ();
- goto err;
- }
- if (bytes_read)
- eom_detected (true);
- else
- {
- debug_printf ("return -1, set errno to ENOSPC");
- set_errno (ENOSPC);
- goto err;
+ if (!IS_EOM (ret))
+ {
+ __seterrno ();
+ goto err;
+ }
+ if (bytes_read)
+ eom_detected (true);
+ else
+ {
+ debug_printf ("return -1, set errno to ENOSPC");
+ set_errno (ENOSPC);
+ goto err;
+ }
}
}