diff options
Diffstat (limited to 'libgo/go/syscall/getdirentries_test.go')
-rw-r--r-- | libgo/go/syscall/getdirentries_test.go | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/libgo/go/syscall/getdirentries_test.go b/libgo/go/syscall/getdirentries_test.go index 8505a0bb897..2a3419c2300 100644 --- a/libgo/go/syscall/getdirentries_test.go +++ b/libgo/go/syscall/getdirentries_test.go @@ -66,7 +66,11 @@ func testGetdirentries(t *testing.T, count int) { } data := buf[:n] for len(data) > 0 { - dirent := (*syscall.Dirent)(unsafe.Pointer(&data[0])) + // If multiple Dirents are written into buf, sometimes when we reach the final one, + // we have cap(buf) < Sizeof(Dirent). So use an appropriate slice to copy from data. + var dirent syscall.Dirent + copy((*[unsafe.Sizeof(dirent)]byte)(unsafe.Pointer(&dirent))[:], data) + data = data[dirent.Reclen:] name := make([]byte, dirent.Namlen) for i := 0; i < int(dirent.Namlen); i++ { |