func parseKernProcargs2()

in providers/darwin/process_darwin.go [194:234]


func parseKernProcargs2(data []byte, p *process) error {
	// argc
	if len(data) < 4 {
		return errInvalidProcargs2Data
	}
	argc := binary.LittleEndian.Uint32(data)
	data = data[4:]

	// exe
	lines := strings.Split(string(data), "\x00")
	p.exe = lines[0]
	lines = lines[1:]

	// Skip nulls that may be appended after the exe.
	for len(lines) > 0 {
		if lines[0] != "" {
			break
		}
		lines = lines[1:]
	}

	// argv
	if c := min(argc, uint32(len(lines))); c > 0 {
		p.args = lines[:c]
		lines = lines[c:]
	}

	// env vars
	env := make(map[string]string, len(lines))
	for _, l := range lines {
		if len(l) == 0 {
			break
		}

		key, val, _ := strings.Cut(l, "=")
		env[key] = val
	}
	p.env = env

	return nil
}