From 57d5edada75686fb1c19ce1bbf3e16f4f2784303 Mon Sep 17 00:00:00 2001 From: Rich Salz Date: Sun, 26 Apr 2015 23:45:12 -0400 Subject: [PATCH] Add readline (etc) support Compile with -DREADLINE and the appropriate library. Reviewed-by: Richard Levitte --- apps/openssl.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/apps/openssl.c b/apps/openssl.c index 2a85145c91..b42d031011 100644 --- a/apps/openssl.c +++ b/apps/openssl.c @@ -448,9 +448,11 @@ int main(int argc, char *argv[]) /* ok, lets enter interactive mode */ for (;;) { ret = 0; - for (p = buf, n = sizeof buf, i = 0, first = 1;; first = 0) { - prompt = first ? "OpenSSL> " : "> "; + /* Read a line, continue reading if line ends with \ */ + for (p = buf, n = sizeof buf, i = 0, first = 1; n > 0; first = 0) { + prompt = first ? "openssl : " : "> "; p[0] = '\0'; +#ifndef READLINE fputs(prompt, stdout); fflush(stdout); if (!fgets(p, n, stdin)) @@ -465,7 +467,33 @@ int main(int argc, char *argv[]) i -= 2; p += i; n -= i; +#else + { + extern char *readline(const char *); + extern void add_history(const char *cp); + char *text; + + char *text = readline(prompt); + if (text == NULL) + goto end; + i = strlen(text); + if (i == 0 || i > n) + break; + if (text[i - 1] != '\\') { + p += strlen(strcpy(p, text)); + free(text); + add_history(buf); + break; + } + + text[i - 1] = '\0'; + p += strlen(strcpy(p, text)); + free(text); + n -= i; + } +#endif } + if (!chopup_args(&arg, buf)) { BIO_printf(bio_err, "Can't parse (no memory?)\n"); break; -- 2.25.1