summaryrefslogtreecommitdiff
path: root/src/mongo/gotools/vendor/src/github.com/howeyc/gopass/nix.go
blob: 76c9da4209350ee4502eb5610648e0c8e4b72562 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// +build linux darwin freebsd netbsd openbsd

package gopass

import (
	"io"
	"syscall"

	"golang.org/x/crypto/ssh/terminal"
)

const lineEnding = "\n"

func getch() (byte, error) {
	if oldState, err := terminal.MakeRaw(0); err != nil {
		return 0, err
	} else {
		defer terminal.Restore(0, oldState)
	}

	var buf [1]byte
	if n, err := syscall.Read(0, buf[:]); n == 0 || err != nil {
		if err != nil {
			return 0, err
		}
		return 0, io.EOF
	}
	return buf[0], nil
}