OSDN Git Service

* fhandler_floppy.cc (fhandler_dev_floppy::raw_read): Keep track of
authorcorinna <corinna>
Thu, 9 Oct 2008 12:41:52 +0000 (12:41 +0000)
committercorinna <corinna>
Thu, 9 Oct 2008 12:41:52 +0000 (12:41 +0000)
current position in non-buffered case, too.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler_floppy.cc

index 907f46b..4e813d4 100644 (file)
@@ -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.
 
index f0e19c9..9e19b52 100644 (file)
@@ -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;
+           }
        }
     }