| // Copyright 2018 The Go Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style | 
 | // license that can be found in the LICENSE file. | 
 |  | 
 | //go:build freebsd | 
 |  | 
 | package syscall_test | 
 |  | 
 | import ( | 
 | 	"fmt" | 
 | 	"os" | 
 | 	"syscall" | 
 | 	"testing" | 
 | 	"unsafe" | 
 | ) | 
 |  | 
 | func TestConvertFromDirent11(t *testing.T) { | 
 | 	const ( | 
 | 		filenameFmt  = "%04d" | 
 | 		numFiles     = 64 | 
 | 		fixedHdrSize = int(unsafe.Offsetof(syscall.Dirent_freebsd11{}.Name)) | 
 | 	) | 
 |  | 
 | 	namlen := len(fmt.Sprintf(filenameFmt, 0)) | 
 | 	reclen := syscall.Roundup(fixedHdrSize+namlen+1, 4) | 
 | 	old := make([]byte, numFiles*reclen) | 
 | 	for i := 0; i < numFiles; i++ { | 
 | 		dent := syscall.Dirent_freebsd11{ | 
 | 			Fileno: uint32(i + 1), | 
 | 			Reclen: uint16(reclen), | 
 | 			Type:   syscall.DT_REG, | 
 | 			Namlen: uint8(namlen), | 
 | 		} | 
 | 		rec := make([]byte, reclen) | 
 | 		copy(rec, (*[fixedHdrSize]byte)(unsafe.Pointer(&dent))[:]) | 
 | 		copy(rec[fixedHdrSize:], fmt.Sprintf(filenameFmt, i+1)) | 
 | 		copy(old[i*reclen:], rec) | 
 | 	} | 
 |  | 
 | 	buf := make([]byte, 2*len(old)) | 
 | 	n := syscall.ConvertFromDirents11(buf, old) | 
 |  | 
 | 	names := make([]string, 0, numFiles) | 
 | 	_, _, names = syscall.ParseDirent(buf[:n], -1, names) | 
 |  | 
 | 	if len(names) != numFiles { | 
 | 		t.Errorf("expected %d files, have %d; names: %q", numFiles, len(names), names) | 
 | 	} | 
 |  | 
 | 	for i, name := range names { | 
 | 		if expected := fmt.Sprintf(filenameFmt, i+1); name != expected { | 
 | 			t.Errorf("expected names[%d] to be %q; got %q", i, expected, name) | 
 | 		} | 
 | 	} | 
 | } | 
 |  | 
 | func TestMain(m *testing.M) { | 
 | 	if os.Getenv("GO_DEATHSIG_PARENT") == "1" { | 
 | 		deathSignalParent() | 
 | 	} else if os.Getenv("GO_DEATHSIG_CHILD") == "1" { | 
 | 		deathSignalChild() | 
 | 	} | 
 |  | 
 | 	os.Exit(m.Run()) | 
 | } |