diff options
Diffstat (limited to 'winsup/cygwin')
-rw-r--r-- | winsup/cygwin/ChangeLog | 5 | ||||
-rw-r--r-- | winsup/cygwin/fhandler_floppy.cc | 30 |
2 files changed, 23 insertions, 12 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 907f46b8..4e813d4 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,10 @@ 2008-10-09 Corinna Vinschen <corinna@vinschen.de> + * fhandler_floppy.cc (fhandler_dev_floppy::raw_read): Keep track of + current position in non-buffered case, too. + +2008-10-09 Corinna Vinschen <corinna@vinschen.de> + * grp.cc (pwdgrp::read_group): Generate more speaking group name if passwd gid exists under different gid in /etc/group. 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; + } } } |