X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/6bc64765f773ce75454ec1592a86779e3547fe46..ef1ba39e8dae81091b6c3e73e72825ef6edea3c6:/uip/prompter.c diff --git a/uip/prompter.c b/uip/prompter.c index 37f5960b..f5332e46 100644 --- a/uip/prompter.c +++ b/uip/prompter.c @@ -78,7 +78,7 @@ main (int argc, char **argv) char *tmpfil; m_getfld_state_t gstate = 0; - if (nmh_init(argv[0], 1)) { return 1; } + if (nmh_init(argv[0], 2)) { return 1; } arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; @@ -329,9 +329,9 @@ getln (char *buffer, int n) { int c; char *cp; + static int quoting = 0; - cp = buffer; - *cp = 0; + *buffer = 0; switch (setjmp (sigenv)) { case OK: @@ -347,15 +347,20 @@ getln (char *buffer, int n) return NOTOK; } + cp = buffer; + *cp = 0; + for (;;) { switch (c = getchar ()) { case EOF: + quoting = 0; clearerr (stdin); longjmp (sigenv, DONE); case '\n': - if (cp[-1] == QUOTE) { - cp[-1] = c; + if (quoting) { + *(cp - 1) = c; + quoting = 0; wtuser = 0; return 1; } @@ -365,6 +370,11 @@ getln (char *buffer, int n) return 0; default: + if (c == QUOTE) { + quoting = 1; + } else { + quoting = 0; + } if (cp < buffer + n) *cp++ = c; *cp = 0;