func()

in providers/aix/process_aix_ppc64.go [195:231]


func (p *process) Environment() (map[string]string, error) {
	if p.env != nil {
		return p.env, nil
	}
	p.env = map[string]string{}

	/* If buffer is not large enough, args are truncated */
	buf := make([]byte, 8192)
	info := C.struct_procsinfo64{}
	info.pi_pid = C.pid_t(p.pid)

	if _, err := C.getevars(unsafe.Pointer(&info), C.sizeof_struct_procsinfo64, (*C.char)(&buf[0]), 8192); err != nil {
		return nil, fmt.Errorf("error while calling getevars: %w", err)
	}

	bbuf := bytes.NewBuffer(buf)

	delim := []byte{61} // "="

	for {
		line, err := bbuf.ReadBytes(0)
		if err == io.EOF || line[0] == 0 {
			break
		}
		if err != nil {
			return nil, fmt.Errorf("error while calling getevars: %w", err)
		}

		pair := bytes.SplitN(chop(line), delim, 2)
		if len(pair) != 2 {
			return nil, errors.New("error reading process environment")
		}
		p.env[string(pair[0])] = string(pair[1])
	}

	return p.env, nil
}