]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Add fs_cli option to disable use of history file
authorTravis Cross <tc@traviscross.com>
Thu, 25 Sep 2014 10:47:18 +0000 (10:47 +0000)
committerTravis Cross <tc@traviscross.com>
Thu, 25 Sep 2014 11:07:49 +0000 (11:07 +0000)
With this commit, passing -Q to fs_cli will cause fs_cli to not load
or save the command history file (~/.fs_cli_history).  This can be
useful e.g. on read-only systems.

This can also be set in the fs_cli configuration file with the option
`no-history-file`.

libs/esl/fs_cli.c

index 43c186b728cef91647e8a7e3d3ba9c4093a9ecfd..3610ae5219b029c2cd34cea0a5ac801a789f5629 100644 (file)
@@ -61,6 +61,7 @@ typedef struct {
        int log_uuid;
        int log_uuid_length;
        int quiet;
+       int use_history_file;
        int batch_mode;
        char prompt_color[12];
        char input_text_color[12];
@@ -1222,6 +1223,7 @@ static void read_config(const char *dft_cfile, const char *cfile) {
                                esl_set_string(profiles[pcount].prompt_color, prompt_color);
                                esl_set_string(profiles[pcount].input_text_color, input_text_color);
                                esl_set_string(profiles[pcount].output_text_color, output_text_color);
+                               profiles[pcount].use_history_file = 1;
                                esl_log(ESL_LOG_DEBUG, "Found Profile [%s]\n", profiles[pcount].name);
                                pcount++;
                        }
@@ -1257,6 +1259,8 @@ static void read_config(const char *dft_cfile, const char *cfile) {
                                }
                        } else if(!strcasecmp(var, "quiet")) {
                                profiles[pcount-1].quiet = esl_true(val);
+                       } else if(!strcasecmp(var, "no-history-file")) {
+                               profiles[pcount-1].use_history_file = !esl_true(val);
                        } else if(!strcasecmp(var, "prompt-color")) {
                                esl_set_string(profiles[pcount-1].prompt_color, match_color(val));
                        } else if(!strcasecmp(var, "input-text-color")) {
@@ -1298,6 +1302,8 @@ int main(int argc, char *argv[])
        const char *line = NULL;
        char cmd_str[1024] = "";
        cli_profile_t *profile = NULL;
+       int argv_use_history_file = 1;
+       int use_history_file = 0;
 #ifndef WIN32
        char hfile[512] = "/tmp/fs_cli_history";
        char cfile[512] = "/etc/fs_cli.conf";
@@ -1324,6 +1330,7 @@ int main(int argc, char *argv[])
                {"log-uuid-short", 0, 0, 'S'},
                {"quiet", 0, 0, 'q'},
                {"batchmode", 0, 0, 'b'},
+               {"no-history-file", 0, 0, 'Q'},
                {"retry", 0, 0, 'r'},
                {"interrupt", 0, 0, 'i'},
                {"reconnect", 0, 0, 'R'},
@@ -1381,6 +1388,7 @@ int main(int argc, char *argv[])
        esl_set_string(internal_profile.prompt_color, prompt_color);
        esl_set_string(internal_profile.input_text_color, input_text_color);
        esl_set_string(internal_profile.output_text_color, output_text_color);
+       internal_profile.use_history_file = 1;
        if (home) {
                snprintf(hfile, sizeof(hfile), "%s/.fs_cli_history", home);
                snprintf(cfile, sizeof(cfile), "%s/.fs_cli_conf", home);
@@ -1395,7 +1403,7 @@ int main(int argc, char *argv[])
        esl_global_set_default_logger(6); /* default debug level to 6 (info) */
        for(;;) {
                int option_index = 0;
-               opt = getopt_long(argc, argv, "H:P:u:p:d:x:l:USt:T:qrRhib?n", options, &option_index);
+               opt = getopt_long(argc, argv, "H:P:u:p:d:x:l:USt:T:qQrRhib?n", options, &option_index);
                if (opt == -1) break;
                switch (opt) {
                        case 'H':
@@ -1450,6 +1458,9 @@ int main(int argc, char *argv[])
                        case 'b':
                                argv_batch = 1;
                                break;
+                       case 'Q':
+                               argv_use_history_file = 0;
+                               break;
                        case 'i':
                                allow_ctl_c = 1;
                                break;
@@ -1505,6 +1516,9 @@ int main(int argc, char *argv[])
                profile->batch_mode = 1;
                feature_level=0;
        }
+       if (argv_use_history_file && profile->use_history_file) {
+               use_history_file = 1;
+       }
        if (*argv_loglevel) {
                esl_set_string(profile->loglevel, argv_loglevel);
                profile->quiet = 0;
@@ -1658,7 +1672,7 @@ int main(int argc, char *argv[])
        }
        history(myhistory, &ev, H_SETSIZE, 800);
        el_set(el, EL_HIST, history, myhistory);
-       history(myhistory, &ev, H_LOAD, hfile);
+       if (use_history_file) history(myhistory, &ev, H_LOAD, hfile);
        el_source(el, NULL);
 #endif
 #ifdef WIN32
@@ -1712,7 +1726,7 @@ int main(int argc, char *argv[])
        }
 #ifdef HAVE_LIBEDIT
  done:
-       history(myhistory, &ev, H_SAVE, hfile);
+       if (use_history_file) history(myhistory, &ev, H_SAVE, hfile);
        history_end(myhistory);
        el_end(el);
 #endif