]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: correct comment in testGetdirentries
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Thu, 24 Oct 2019 10:00:57 +0000 (17:00 +0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 24 Oct 2019 13:58:59 +0000 (13:58 +0000)
Correct comment about allocating big enough slice to copy result of
Getdirentries.

While at it, also convert from Dirent directly to slice of byte.

Updates #35092

Change-Id: I892de7953120622882e1561728e1e56b009a2351
Reviewed-on: https://go-review.googlesource.com/c/go/+/202880
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/syscall/getdirentries_test.go

index 1cbed8d4f7ba31e86249e080c0b206eb79e62709..2a3419c2300d280b2ccb51cf43a7b236d7207a69 100644 (file)
@@ -66,14 +66,10 @@ func testGetdirentries(t *testing.T, count int) {
                }
                data := buf[:n]
                for len(data) > 0 {
-                       // syscall.Getdirentries's return value may be (and usually is) much
-                       // smaller than a syscall.Dirent, which has lots of padding for
-                       // the name at the end. The compiler's checkptr validation doesn't like
-                       // that. So allocate direntMem that's always big enough, and use that
-                       // when converting to *syscall.Dirent.
-                       var direntMem [unsafe.Sizeof(syscall.Dirent{})]byte
-                       copy(direntMem[:], data)
-                       dirent := (*syscall.Dirent)(unsafe.Pointer(&direntMem[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)