doc, vtysh: Fixup of history handling
This fix does two things:
1) If the ${HOME}/.history_quagga file does not exist, create it
for history storing.
2) Allow vtysh -c "..." commands to be stored in history file
as well
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
diff --git a/vtysh/vtysh_main.c b/vtysh/vtysh_main.c
index aa7d021..02a19b7 100644
--- a/vtysh/vtysh_main.c
+++ b/vtysh/vtysh_main.c
@@ -223,6 +223,7 @@
struct cmd_rec *tail = NULL;
int echo_command = 0;
int no_error = 0;
+ char *homedir = NULL;
/* Preserve name of myself. */
progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]);
@@ -317,6 +318,27 @@
exit(1);
}
+ /*
+ * Setup history file for use by both -c and regular input
+ * If we can't find the home directory, then don't store
+ * the history information
+ */
+ homedir = vtysh_get_home ();
+ if (homedir)
+ {
+ snprintf(history_file, sizeof(history_file), "%s/.history_quagga", homedir);
+ if (read_history (history_file) != 0)
+ {
+ int fp;
+
+ fp = open (history_file, O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
+ if (fp)
+ close (fp);
+
+ read_history (history_file);
+ }
+ }
+
/* If eval mode. */
if (cmd)
{
@@ -332,6 +354,9 @@
{
*eol = '\0';
+ add_history (cmd->line);
+ append_history (1, history_file);
+
if (echo_command)
printf("%s%s\n", vtysh_prompt(), cmd->line);
@@ -348,6 +373,9 @@
cmd->line = eol+1;
}
+ add_history (cmd->line);
+ append_history (1, history_file);
+
if (echo_command)
printf("%s%s\n", vtysh_prompt(), cmd->line);
@@ -368,6 +396,8 @@
XFREE(0, cr);
}
}
+
+ history_truncate_file(history_file,1000);
exit (0);
}
@@ -397,8 +427,6 @@
sigsetjmp (jmpbuf, 1);
jmpflag = 1;
- snprintf(history_file, sizeof(history_file), "%s/.history_quagga", getenv("HOME"));
- read_history(history_file);
/* Main command loop. */
while (vtysh_rl_gets ())
vtysh_execute (line_read);