diff options
author | Werner Koch <wk@gnupg.org> | 2020-07-02 15:47:57 +0200 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2020-07-02 15:48:55 +0200 |
commit | d70b8769c888f42896ae3ef4972bf82e9b5a0c32 (patch) | |
tree | 8a7334e5c82d69ec24a6b7c29e48971297a33f02 /common/ttyio.c | |
parent | scd:nks: Fix certificate read problem with TCOS signature card v2. (diff) | |
download | gnupg2-d70b8769c888f42896ae3ef4972bf82e9b5a0c32.tar.xz gnupg2-d70b8769c888f42896ae3ef4972bf82e9b5a0c32.zip |
Support a history file in gpg-card and gpg-connect-agent.
* common/gpgrlhelp.c (read_write_history): New.
(gnupg_rl_initialize): Register new function.
* common/ttyio.c (my_rl_rw_history): New var.
(tty_private_set_rl_hooks): Add arg read_write_history.
(tty_read_history): New.
(tty_write_history): New.
* tools/gpg-card.c (HISTORYNAME): New.
(oNoHistory): New enum value.
(opts): New option --no-history.
(cmd_history): New.
(cmds): New command "history".
(interactive_loop): Read and save the history.
* tools/gpg-connect-agent.c (HISTORYNAME): New.
(opts): New option --no-history.
(main): Read and save the history. New command /history.
--
Yeah, finally we have stored history; I should have added this much
earlier.
Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'common/ttyio.c')
-rw-r--r-- | common/ttyio.c | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/common/ttyio.c b/common/ttyio.c index 4c095bc03..a27c095cf 100644 --- a/common/ttyio.c +++ b/common/ttyio.c @@ -101,7 +101,7 @@ static void (*my_rl_cleanup_after_signal) (void); static void (*my_rl_init_stream) (FILE *); static char *(*my_rl_readline) (const char*); static void (*my_rl_add_history) (const char*); - +static int (*my_rl_rw_history)(const char *, int, int); /* This is a wrapper around ttyname so that we can use it even when the standard streams are redirected. It figures the name out the @@ -703,7 +703,8 @@ tty_private_set_rl_hooks (void (*init_stream) (FILE *), void (*inhibit_completion) (int), void (*cleanup_after_signal) (void), char *(*readline_fun) (const char*), - void (*add_history_fun) (const char*)) + void (*add_history_fun) (const char*), + int (*rw_history_fun)(const char *, int, int)) { my_rl_init_stream = init_stream; my_rl_set_completer = set_completer; @@ -711,6 +712,40 @@ tty_private_set_rl_hooks (void (*init_stream) (FILE *), my_rl_cleanup_after_signal = cleanup_after_signal; my_rl_readline = readline_fun; my_rl_add_history = add_history_fun; + my_rl_rw_history = rw_history_fun; +} + + +/* Read the history from FILENAME or limit the size of the history. + * If FILENAME is NULL and NLINES is zero the current history is + * cleared. Returns 0 on success or -1 on error and sets ERRNO. No + * error is return if readline support is not available. */ +int +tty_read_history (const char *filename, int nlines) +{ + int rc; + + if (!my_rl_rw_history) + return 0; + + rc = my_rl_rw_history (filename, 0, nlines); + if (rc && gpg_err_code_from_syserror () == GPG_ERR_ENOENT) + rc = 0; + + return rc; +} + + +/* Write the current history to the file FILENAME. Returns 0 on + * success or -1 on error and sets ERRNO. No error is return if + * readline support is not available. */ +int +tty_write_history (const char *filename) +{ + if (!my_rl_rw_history) + return 0; + + return my_rl_rw_history (filename, 1, 0); } |