diff options
Diffstat (limited to 'go/golang/gocache/1c/1c12af42ff36b43476400f0a1a2aba5fcd6674d4d30560ed61ed84862baf9ae2-d')
-rw-r--r-- | go/golang/gocache/1c/1c12af42ff36b43476400f0a1a2aba5fcd6674d4d30560ed61ed84862baf9ae2-d | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/go/golang/gocache/1c/1c12af42ff36b43476400f0a1a2aba5fcd6674d4d30560ed61ed84862baf9ae2-d b/go/golang/gocache/1c/1c12af42ff36b43476400f0a1a2aba5fcd6674d4d30560ed61ed84862baf9ae2-d new file mode 100644 index 00000000..2ba5cadf --- /dev/null +++ b/go/golang/gocache/1c/1c12af42ff36b43476400f0a1a2aba5fcd6674d4d30560ed61ed84862baf9ae2-d @@ -0,0 +1,52 @@ +// Code generated by cmd/cgo; DO NOT EDIT. + +//line /workdir/go/src/os/user/listgroups_unix.go:1:1 +// Copyright 2016 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. + +// +build dragonfly darwin freebsd !android,linux netbsd openbsd +// +build cgo,!osusergo + +package user + +import ( + "fmt" + "strconv" + "unsafe" +) + +/* +#include <unistd.h> +#include <sys/types.h> +*/ +import _ "unsafe" + +const maxGroups = 2048 + +func listGroups(u *User) ([]string, error) { + ug, err := strconv.Atoi(u.Gid) + if err != nil { + return nil, fmt.Errorf("user: list groups for %s: invalid gid %q", u.Username, u.Gid) + } + userGID := _Ctype_gid_t(ug) + nameC := make([]byte, len(u.Username)+1) + copy(nameC, u.Username) + + n := _Ctype_int(256) + gidsC := make([]_Ctype_gid_t, n) + rv := getGroupList((*_Ctype_char)(unsafe.Pointer(&nameC[0])), userGID, &gidsC[0], &n) + if rv == -1 { + // Mac is the only Unix that does not set n properly when rv == -1, so + // we need to use different logic for Mac vs. the other OS's. + if err := groupRetry(u.Username, nameC, userGID, &gidsC, &n); err != nil { + return nil, err + } + } + gidsC = gidsC[:n] + gids := make([]string, 0, n) + for _, g := range gidsC[:n] { + gids = append(gids, strconv.Itoa(int(g))) + } + return gids, nil +} |