Code generated by cmd/cgo; DO NOT EDIT.
line /usr/local/Cellar/go/1.16.3/libexec/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 (
	
	
	
)
#include <unistd.h>#include <sys/types.h>
import _ 

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 :=  /*line :29:13*/_Ctype_gid_t /*line :29:20*/(ug)
	nameC := make([]byte, len(u.Username)+1)
	copy(nameC, u.Username)

	n :=  /*line :33:7*/_Ctype_int /*line :33:12*/(256)
	gidsC := make([] /*line :34:18*/_Ctype_gid_t /*line :34:25*/, n)
	rv := getGroupList((* /*line :35:23*/_Ctype_char /*line :35:29*/)(unsafe.Pointer(&nameC[0])), userGID, &gidsC[0], &n)
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