diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2008-10-09 12:41:52 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2008-10-09 12:41:52 +0000 |
commit | 3059d18288015dfee47e590705c06f0520598d05 (patch) | |
tree | c3664cd610a13a9fdaf5372f815c5a3d6d0d0b38 /winsup/cygwin/fhandler_floppy.cc | |
parent | 2768ae50dd79b1107d6f03a7fd0b4d9fbd83d0ba (diff) | |
download | newlib-3059d18288015dfee47e590705c06f0520598d05.zip newlib-3059d18288015dfee47e590705c06f0520598d05.tar.gz newlib-3059d18288015dfee47e590705c06f0520598d05.tar.bz2 |
* 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.cc | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/winsup/cygwin/fhandler_floppy.cc b/winsup/cygwin/fhandler_floppy.cc index f0e19c9..9e19b52 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; + } } } |