windows: support nil done parameter in ReadFile and WriteFile

Win32 defines the `done` param as optional for ReadFile and WriteFile
functions. We should support this case too.

Fixes golang/go#65365.

Change-Id: I961ff66a63d3a8ffa5560b6dab21fbd4ac9817ae
Reviewed-on: https://go-review.googlesource.com/c/sys/+/559375
Reviewed-by: Mauri de Souza Meneguzzo <mauri870@gmail.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
qmuntal
2024-01-30 17:14:39 +00:00
committed by Quim Muntal
parent bef1bd8971
commit 628365db92
2 changed files with 69 additions and 6 deletions
+14 -6
View File
@@ -572,13 +572,17 @@ func Write(fd Handle, p []byte) (n int, err error) {
}
func ReadFile(fd Handle, p []byte, done *uint32, overlapped *Overlapped) error {
err := readFile(fd, p, done, overlapped)
var n uint32
err := readFile(fd, p, &n, overlapped)
if raceenabled {
if *done > 0 {
raceWriteRange(unsafe.Pointer(&p[0]), int(*done))
if n > 0 {
raceWriteRange(unsafe.Pointer(&p[0]), int(n))
}
raceAcquire(unsafe.Pointer(&ioSync))
}
if done != nil {
*done = n
}
return err
}
@@ -586,9 +590,13 @@ func WriteFile(fd Handle, p []byte, done *uint32, overlapped *Overlapped) error
if raceenabled {
raceReleaseMerge(unsafe.Pointer(&ioSync))
}
err := writeFile(fd, p, done, overlapped)
if raceenabled && *done > 0 {
raceReadRange(unsafe.Pointer(&p[0]), int(*done))
var n uint32
err := writeFile(fd, p, &n, overlapped)
if raceenabled && n > 0 {
raceReadRange(unsafe.Pointer(&p[0]), int(n))
}
if done != nil {
*done = n
}
return err
}