Add timeout for reading from stdin

This commit is contained in:
sfigato 2020-04-30 14:04:01 +02:00
parent 4de4a4aee2
commit 16bf5ace2a
Signed by: blallo
GPG Key ID: 0CBE577C9B72DC3F

17
main.go
View File

@ -6,12 +6,13 @@ import (
"fmt" "fmt"
"os" "os"
"strings" "strings"
"time"
) )
var noVersion = "dev" var noVersion = "dev"
var version string var version string
func readFromConsole() string { func readFromConsole(result chan string) {
var text, line string var text, line string
var err error var err error
counter := 0 counter := 0
@ -29,7 +30,8 @@ func readFromConsole() string {
Error.F("Error in reading text from console\n%s", err) Error.F("Error in reading text from console\n%s", err)
os.Exit(1) os.Exit(1)
} }
return strings.TrimRight(text, "\n") result <- strings.TrimRight(text, "\n")
return
} }
func toList(input string) []string { func toList(input string) []string {
@ -100,7 +102,16 @@ func main() {
} }
if flag.NArg() == 0 { if flag.NArg() == 0 {
text = readFromConsole() result := make(chan string, 1)
go readFromConsole(result)
select {
case text = <-result:
Info.Ln("text read from console")
case <-time.After(5 * time.Minute):
Error.Ln("timeout reading from console")
os.Exit(3)
}
} else { } else {
for _, arg := range flag.Args() { for _, arg := range flag.Args() {
text += fmt.Sprintf("%s\n", arg) text += fmt.Sprintf("%s\n", arg)