]> sourceware.org Git - newlib-cygwin.git/commitdiff
Cygwin: raw disk I/O: Fix return value in error case
authorCorinna Vinschen <corinna@vinschen.de>
Fri, 24 Apr 2020 14:19:09 +0000 (16:19 +0200)
committerCorinna Vinschen <corinna@vinschen.de>
Fri, 24 Apr 2020 14:19:09 +0000 (16:19 +0200)
The cast to generate the return value uses a DWORD variable
as test and set value.  The error case is the constant -1.
Given the type of the other half of the conditioal expression,
-1 is cast to DWORD as well.

On 64 bit, this results in the error case returning a 32 bit
-1 value which is equivalent to (ssize_t) 4294967295 rather
than (ssize_t) -1.

Add a fixing cast.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
winsup/cygwin/fhandler_floppy.cc

index f2e15d7038b27e70b1ffe250a2384df71d5230a9..778d6ef981477f9316ace91c40db9dcf33c9a3a5 100644 (file)
@@ -619,12 +619,12 @@ fhandler_dev_floppy::raw_write (const void *ptr, size_t len)
              devbufend = bytes_per_sector;
            }
        }
-      return bytes_written;
+      return (ssize_t) bytes_written;
     }
 
   /* In O_DIRECT case, just write. */
   if (write_file (p, len, &bytes_written, &ret))
-    return bytes_written;
+    return (ssize_t) bytes_written;
 
 err:
   if (IS_EOM (ret))
@@ -635,7 +635,8 @@ err:
     }
   else if (!bytes_written)
     __seterrno ();
-  return bytes_written ?: -1;
+  /* Cast is required, otherwise the error return value is (DWORD)-1. */
+  return (ssize_t) bytes_written ?: -1;
 }
 
 off_t
This page took 0.0343 seconds and 5 git commands to generate.