.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.1.1-0.20210319172145-bda8f5cee399 / internal / fastwalk / fastwalk_dirent_namlen_linux.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.1-0.20210319172145-bda8f5cee399/internal/fastwalk/fastwalk_dirent_namlen_linux.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.1-0.20210319172145-bda8f5cee399/internal/fastwalk/fastwalk_dirent_namlen_linux.go
new file mode 100644 (file)
index 0000000..c82e57d
--- /dev/null
@@ -0,0 +1,29 @@
+// 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 linux && !appengine
+// +build linux,!appengine
+
+package fastwalk
+
+import (
+       "bytes"
+       "syscall"
+       "unsafe"
+)
+
+func direntNamlen(dirent *syscall.Dirent) uint64 {
+       const fixedHdr = uint16(unsafe.Offsetof(syscall.Dirent{}.Name))
+       nameBuf := (*[unsafe.Sizeof(dirent.Name)]byte)(unsafe.Pointer(&dirent.Name[0]))
+       const nameBufLen = uint16(len(nameBuf))
+       limit := dirent.Reclen - fixedHdr
+       if limit > nameBufLen {
+               limit = nameBufLen
+       }
+       nameLen := bytes.IndexByte(nameBuf[:limit], 0)
+       if nameLen < 0 {
+               panic("failed to find terminating 0 byte in dirent")
+       }
+       return uint64(nameLen)
+}