mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-22 14:23:50 -07:00
chg: when pressing ctrl-c, the command history is saved
This commit is contained in:
parent
ac12a892b0
commit
2fe42173de
2 changed files with 36 additions and 8 deletions
|
@ -18,8 +18,10 @@
|
||||||
#ifdef HAVE_READLINE
|
#ifdef HAVE_READLINE
|
||||||
#include <readline/readline.h>
|
#include <readline/readline.h>
|
||||||
#include <readline/history.h>
|
#include <readline/history.h>
|
||||||
|
#include <signal.h>
|
||||||
#endif
|
#endif
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
#include "usart_defs.h"
|
#include "usart_defs.h"
|
||||||
#include "util_posix.h"
|
#include "util_posix.h"
|
||||||
#include "proxgui.h"
|
#include "proxgui.h"
|
||||||
|
@ -134,6 +136,23 @@ static int check_comm(void) {
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
static void flush_history(void) {
|
||||||
|
#ifdef HAVE_READLINE
|
||||||
|
if (session.history_path) {
|
||||||
|
write_history(session.history_path);
|
||||||
|
free(session.history_path);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_READLINE
|
||||||
|
struct sigaction old_action;
|
||||||
|
static void terminate_handler(int signum) {
|
||||||
|
sigaction(SIGINT, &old_action, NULL);
|
||||||
|
flush_history();
|
||||||
|
kill(0, SIGINT);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// first slot is always NULL, indicating absence of script when idx=0
|
// first slot is always NULL, indicating absence of script when idx=0
|
||||||
static FILE *cmdscriptfile[MAX_NESTED_CMDSCRIPT + 1] = {0};
|
static FILE *cmdscriptfile[MAX_NESTED_CMDSCRIPT + 1] = {0};
|
||||||
|
@ -211,16 +230,26 @@ main_loop(char *script_cmds_file, char *script_cmd, bool stayInCommandLoop) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_READLINE
|
#ifdef HAVE_READLINE
|
||||||
char *my_history_path = NULL;
|
session.history_path = NULL;
|
||||||
if (searchHomeFilePath(&my_history_path, NULL, PROXHISTORY, true) != PM3_SUCCESS) {
|
if (searchHomeFilePath(&session.history_path, NULL, PROXHISTORY, true) != PM3_SUCCESS) {
|
||||||
PrintAndLogEx(ERR, "No history will be recorded");
|
PrintAndLogEx(ERR, "No history will be recorded");
|
||||||
my_history_path = NULL;
|
session.history_path = NULL;
|
||||||
} else {
|
} else {
|
||||||
read_history(my_history_path);
|
|
||||||
|
struct sigaction action;
|
||||||
|
memset(&action, 0, sizeof(action));
|
||||||
|
action.sa_handler = &terminate_handler;
|
||||||
|
sigaction(SIGINT, &action, &old_action);
|
||||||
|
|
||||||
|
rl_catch_signals = 1;
|
||||||
|
rl_set_signals();
|
||||||
|
read_history(session.history_path);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// loops every time enter is pressed...
|
// loops every time enter is pressed...
|
||||||
while (1) {
|
while (1) {
|
||||||
|
|
||||||
bool printprompt = false;
|
bool printprompt = false;
|
||||||
if (session.pm3_present) {
|
if (session.pm3_present) {
|
||||||
if (conn.send_via_fpc_usart == false)
|
if (conn.send_via_fpc_usart == false)
|
||||||
|
@ -391,11 +420,9 @@ check_script:
|
||||||
pop_cmdscriptfile();
|
pop_cmdscriptfile();
|
||||||
|
|
||||||
#ifdef HAVE_READLINE
|
#ifdef HAVE_READLINE
|
||||||
if (my_history_path) {
|
flush_history();
|
||||||
write_history(my_history_path);
|
|
||||||
free(my_history_path);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (cmd) {
|
if (cmd) {
|
||||||
free(cmd);
|
free(cmd);
|
||||||
cmd = NULL;
|
cmd = NULL;
|
||||||
|
|
|
@ -43,6 +43,7 @@ typedef struct {
|
||||||
// char *defaultPaths[spItemCount]; // Array should allow loop searching for files
|
// char *defaultPaths[spItemCount]; // Array should allow loop searching for files
|
||||||
clientdebugLevel_t client_debug_level;
|
clientdebugLevel_t client_debug_level;
|
||||||
// uint8_t device_debug_level;
|
// uint8_t device_debug_level;
|
||||||
|
char *history_path;
|
||||||
} session_arg_t;
|
} session_arg_t;
|
||||||
|
|
||||||
extern session_arg_t session;
|
extern session_arg_t session;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue