@@ -202,8 +202,8 @@ func NewCallbackCDecl(fn any) uintptr {
202
202
//sys formatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) = FormatMessageW
203
203
//sys ExitProcess(exitcode uint32)
204
204
//sys CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile int32) (handle Handle, err error) [failretval==InvalidHandle] = CreateFileW
205
- //sys ReadFile (handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error)
206
- //sys WriteFile (handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error)
205
+ //sys readFile (handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) = ReadFile
206
+ //sys writeFile (handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) = WriteFile
207
207
//sys SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) [failretval==0xffffffff]
208
208
//sys CloseHandle(handle Handle) (err error)
209
209
//sys GetStdHandle(stdhandle int) (handle Handle, err error) [failretval==InvalidHandle]
@@ -385,40 +385,50 @@ func Read(fd Handle, p []byte) (n int, err error) {
385
385
}
386
386
return 0 , e
387
387
}
388
+ return int (done ), nil
389
+ }
390
+
391
+ func Write (fd Handle , p []byte ) (n int , err error ) {
392
+ var done uint32
393
+ e := WriteFile (fd , p , & done , nil )
394
+ if e != nil {
395
+ return 0 , e
396
+ }
397
+ return int (done ), nil
398
+ }
399
+
400
+ func ReadFile (fd Handle , p []byte , done * uint32 , overlapped * Overlapped ) error {
401
+ err := readFile (fd , p , done , overlapped )
388
402
if race .Enabled {
389
- if done > 0 {
390
- race .WriteRange (unsafe .Pointer (& p [0 ]), int (done ))
403
+ if * done > 0 {
404
+ race .WriteRange (unsafe .Pointer (& p [0 ]), int (* done ))
391
405
}
392
406
race .Acquire (unsafe .Pointer (& ioSync ))
393
407
}
394
- if msanenabled && done > 0 {
395
- msanWrite (unsafe .Pointer (& p [0 ]), int (done ))
408
+ if msanenabled && * done > 0 {
409
+ msanWrite (unsafe .Pointer (& p [0 ]), int (* done ))
396
410
}
397
- if asanenabled && done > 0 {
398
- asanWrite (unsafe .Pointer (& p [0 ]), int (done ))
411
+ if asanenabled && * done > 0 {
412
+ asanWrite (unsafe .Pointer (& p [0 ]), int (* done ))
399
413
}
400
- return int ( done ), nil
414
+ return err
401
415
}
402
416
403
- func Write (fd Handle , p []byte ) ( n int , err error ) {
417
+ func WriteFile (fd Handle , p []byte , done * uint32 , overlapped * Overlapped ) error {
404
418
if race .Enabled {
405
419
race .ReleaseMerge (unsafe .Pointer (& ioSync ))
406
420
}
407
- var done uint32
408
- e := WriteFile (fd , p , & done , nil )
409
- if e != nil {
410
- return 0 , e
411
- }
412
- if race .Enabled && done > 0 {
413
- race .ReadRange (unsafe .Pointer (& p [0 ]), int (done ))
421
+ err := writeFile (fd , p , done , overlapped )
422
+ if race .Enabled && * done > 0 {
423
+ race .ReadRange (unsafe .Pointer (& p [0 ]), int (* done ))
414
424
}
415
- if msanenabled && done > 0 {
416
- msanRead (unsafe .Pointer (& p [0 ]), int (done ))
425
+ if msanenabled && * done > 0 {
426
+ msanRead (unsafe .Pointer (& p [0 ]), int (* done ))
417
427
}
418
- if asanenabled && done > 0 {
419
- asanRead (unsafe .Pointer (& p [0 ]), int (done ))
428
+ if asanenabled && * done > 0 {
429
+ asanRead (unsafe .Pointer (& p [0 ]), int (* done ))
420
430
}
421
- return int ( done ), nil
431
+ return err
422
432
}
423
433
424
434
var ioSync int64
0 commit comments