// Copyright 2011 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 !cgo,!windows,!plan9 android osusergo,!windows,!plan9

package user

import (
	
	
	
	
	
)

func init() {
	groupImplemented = false
}

func current() (*User, error) {
	 := currentUID()
	// $USER and /etc/passwd may disagree; prefer the latter if we can get it.
	// See issue 27524 for more information.
	,  := lookupUserId()
	if  == nil {
		return , nil
	}

	,  := os.UserHomeDir()
	 = &User{
		Uid:      ,
		Gid:      currentGID(),
		Username: os.Getenv("USER"),
		Name:     "", // ignored
		HomeDir:  ,
	}
	// On Android, return a dummy user instead of failing.
	switch runtime.GOOS {
	case "android":
		if .Uid == "" {
			.Uid = "1"
		}
		if .Username == "" {
			.Username = "android"
		}
	}
	// cgo isn't available, but if we found the minimum information
	// without it, use it:
	if .Uid != "" && .Username != "" && .HomeDir != "" {
		return , nil
	}
	var  string
	if .Username == "" {
		 = "$USER"
	}
	if .HomeDir == "" {
		if  != "" {
			 += ", "
		}
		 += "$HOME"
	}
	return , fmt.Errorf("user: Current requires cgo or %s set in environment", )
}

func listGroups(*User) ([]string, error) {
	if runtime.GOOS == "android" || runtime.GOOS == "aix" {
		return nil, fmt.Errorf("user: GroupIds not implemented on %s", runtime.GOOS)
	}
	return nil, errors.New("user: GroupIds requires cgo")
}

func currentUID() string {
	if  := os.Getuid();  >= 0 {
		return strconv.Itoa()
	}
	// Note: Windows returns -1, but this file isn't used on
	// Windows anyway, so this empty return path shouldn't be
	// used.
	return ""
}

func currentGID() string {
	if  := os.Getgid();  >= 0 {
		return strconv.Itoa()
	}
	return ""
}