Add readline (etc) support
Compile with -DREADLINE and the appropriate library. Reviewed-by: Richard Levitte <levitte@openssl.org>
This commit is contained in:
parent
1bb2daead8
commit
57d5edada7
1 changed files with 30 additions and 2 deletions
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue