diff options
author | 2017-09-07 10:00:26 +0200 | |
---|---|---|
committer | 2017-09-07 10:09:45 +0200 | |
commit | f2cbe790a5c3c3e8cb59b592c252b2b84025bd91 (patch) | |
tree | ac2fafdcb653ee05ed8ca3cfbc18d818cf6e7f3d /vendor/golang.org/x/sys/unix/syscall_freebsd.go | |
parent | 13ab652c89a8bf5b16017156f8fb388e1889a8e1 (diff) |
Wait until vpp is ready + Update vendor
Change-Id: I7c42d44d60f84fd21e55f9e4928d776f5466cc83
Signed-off-by: Lukas Macko <lmacko@cisco.com>
Diffstat (limited to 'vendor/golang.org/x/sys/unix/syscall_freebsd.go')
-rw-r--r-- | vendor/golang.org/x/sys/unix/syscall_freebsd.go | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go index 077d1f3..ec56ed6 100644 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go @@ -54,16 +54,32 @@ func nametomib(name string) (mib []_C_int, err error) { return buf[0 : n/siz], nil } -func direntIno(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) -} - -func direntReclen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) -} - -func direntNamlen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) +// ParseDirent parses up to max directory entries in buf, +// appending the names to names. It returns the number +// bytes consumed from buf, the number of entries added +// to names, and the new names slice. +func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) { + origlen := len(buf) + for max != 0 && len(buf) > 0 { + dirent := (*Dirent)(unsafe.Pointer(&buf[0])) + if dirent.Reclen == 0 { + buf = nil + break + } + buf = buf[dirent.Reclen:] + if dirent.Fileno == 0 { // File absent in directory. + continue + } + bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0])) + var name = string(bytes[0:dirent.Namlen]) + if name == "." || name == ".." { // Useless names + continue + } + max-- + count++ + names = append(names, name) + } + return origlen - len(buf), count, names } //sysnb pipe() (r int, w int, err error) |