diff options
author | def <dennis@felsin9.de> | 2015-02-09 08:06:56 +0100 |
---|---|---|
committer | def <dennis@felsin9.de> | 2015-02-09 08:06:56 +0100 |
commit | d6d152e451cf54bf4e20885bdc786ee1187e5cfb (patch) | |
tree | d2519572e5392dfa78ec87309ec4cf287ee859b3 /lib | |
parent | 18fb3a391cecab9f9f0d71e455051315c8cf9a6d (diff) | |
download | Nim-d6d152e451cf54bf4e20885bdc786ee1187e5cfb.tar.gz |
Add a new line after readPasswordFromStdin, add result
Diffstat (limited to 'lib')
-rw-r--r-- | lib/impure/rdstdin.nim | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/impure/rdstdin.nim b/lib/impure/rdstdin.nim index f53058a9b..aaf2ed1ca 100644 --- a/lib/impure/rdstdin.nim +++ b/lib/impure/rdstdin.nim @@ -33,9 +33,11 @@ when defined(Windows): stdout.write(prompt) result = readLine(stdin, line) - proc readPasswordFromStdin*(prompt: string, password: var TaintedString) = + proc readPasswordFromStdin*(prompt: string, password: var TaintedString): + bool {.tags: [ReadIOEffect, WriteIOEffect].} = ## Reads a `password` from stdin without printing it. `password` must not - ## be ``nil``! + ## be ``nil``! Returns ``false`` if the end of the file has been reached, + ## ``true`` otherwise. proc getch(): cint {.header: "<conio.h>", importc: "_getch".} password.setLen(0) @@ -50,6 +52,8 @@ when defined(Windows): password.setLen(password.len - 1) else: password.add(c) + stdout.write "\n" + # TODO: How to detect EOF on Windows? else: import readline, history, termios, unsigned @@ -80,7 +84,8 @@ else: discard readline.bind_key('\t'.ord, doNothing) - proc readPasswordFromStdin*(prompt: string, password: var TaintedString) = + proc readPasswordFromStdin*(prompt: string, password: var TaintedString): + bool {.tags: [ReadIOEffect, WriteIOEffect].} = password.setLen(0) let fd = stdin.getFileHandle() var cur, old: Termios @@ -89,10 +94,11 @@ else: cur.lflag = cur.lflag and not Tcflag(ECHO) discard fd.tcsetattr(TCSADRAIN, cur.addr) stdout.write prompt - discard stdin.readLine(password) + result = stdin.readLine(password) + stdout.write "\n" discard fd.tcsetattr(TCSADRAIN, old.addr) proc readPasswordFromStdin*(prompt: string): TaintedString = ## Reads a password from stdin without printing it. result = TaintedString("") - readPasswordFromStdin(prompt, result) + discard readPasswordFromStdin(prompt, result) |