Browse Source

Add timeout for reading from stdin

Blallo 4 years ago
parent
commit
16bf5ace2a
1 changed files with 14 additions and 3 deletions
  1. 14 3
      main.go

+ 14 - 3
main.go

@@ -6,12 +6,13 @@ import (
 	"fmt"
 	"os"
 	"strings"
+	"time"
 )
 
 var noVersion = "dev"
 var version string
 
-func readFromConsole() string {
+func readFromConsole(result chan string) {
 	var text, line string
 	var err error
 	counter := 0
@@ -29,7 +30,8 @@ func readFromConsole() string {
 		Error.F("Error in reading text from console\n%s", err)
 		os.Exit(1)
 	}
-	return strings.TrimRight(text, "\n")
+	result <- strings.TrimRight(text, "\n")
+	return
 }
 
 func toList(input string) []string {
@@ -100,7 +102,16 @@ func main() {
 	}
 
 	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 {
 		for _, arg := range flag.Args() {
 			text += fmt.Sprintf("%s\n", arg)