func ByteSliceToStringSlice()

in sys/windows/syscall_windows.go [552:584]


func ByteSliceToStringSlice(utf16 []byte) ([]string, error) {
	n := len(utf16)
	// Discard odd byte
	if n&1 != 0 {
		n--
		utf16 = utf16[:n]
	}
	if n == 0 {
		return nil, nil
	}
	terminated := false
	for i := 0; i < n && !terminated; i += 2 {
		terminated = utf16[i] == 0 && utf16[i+1] == 0
	}
	if !terminated {
		// Append a null uint16 at the end if terminator is missing
		utf16 = append(utf16, 0, 0)
	}
	var numArgs int32
	argsWide, err := syscall.CommandLineToArgv((*uint16)(unsafe.Pointer(&utf16[0])), &numArgs)
	if err != nil {
		return nil, err
	}

	// Free memory allocated for CommandLineToArgvW arguments.
	defer syscall.LocalFree((syscall.Handle)(unsafe.Pointer(argsWide)))

	args := make([]string, numArgs)
	for idx := range args {
		args[idx] = syscall.UTF16ToString(argsWide[idx][:])
	}
	return args, nil
}