]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blob - vendor/github.com/bgentry/speakeasy/speakeasy_windows.go
Merge branch 'fix_read_test' of github.com:alexandreFre/terraform-provider-statuscake
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / bgentry / speakeasy / speakeasy_windows.go
1 // +build windows
2
3 package speakeasy
4
5 import (
6 "syscall"
7 )
8
9 // SetConsoleMode function can be used to change value of ENABLE_ECHO_INPUT:
10 // http://msdn.microsoft.com/en-us/library/windows/desktop/ms686033(v=vs.85).aspx
11 const ENABLE_ECHO_INPUT = 0x0004
12
13 func getPassword() (password string, err error) {
14 var oldMode uint32
15
16 err = syscall.GetConsoleMode(syscall.Stdin, &oldMode)
17 if err != nil {
18 return
19 }
20
21 var newMode uint32 = (oldMode &^ ENABLE_ECHO_INPUT)
22
23 err = setConsoleMode(syscall.Stdin, newMode)
24 defer setConsoleMode(syscall.Stdin, oldMode)
25 if err != nil {
26 return
27 }
28
29 return readline()
30 }
31
32 func setConsoleMode(console syscall.Handle, mode uint32) (err error) {
33 dll := syscall.MustLoadDLL("kernel32")
34 proc := dll.MustFindProc("SetConsoleMode")
35 r, _, err := proc.Call(uintptr(console), uintptr(mode))
36
37 if r == 0 {
38 return err
39 }
40 return nil
41 }