aboutsummaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
Diffstat (limited to 'libbb')
-rw-r--r--libbb/lineedit.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/libbb/lineedit.c b/libbb/lineedit.c
index b25386bc0..5d65665d3 100644
--- a/libbb/lineedit.c
+++ b/libbb/lineedit.c
@@ -958,14 +958,16 @@ static void load_history(const char *fromfile)
958 FILE *fp; 958 FILE *fp;
959 int hi; 959 int hi;
960 960
961 /* cleanup old */ 961 /* NB: do not trash old history if file can't be opened */
962 for (hi = state->cnt_history; hi > 0;) {
963 hi--;
964 free(state->history[hi]);
965 }
966 962
967 fp = fopen(fromfile, "r"); 963 fp = fopen(fromfile, "r");
968 if (fp) { 964 if (fp) {
965 /* clean up old history */
966 for (hi = state->cnt_history; hi > 0;) {
967 hi--;
968 free(state->history[hi]);
969 }
970
969 for (hi = 0; hi < MAX_HISTORY;) { 971 for (hi = 0; hi < MAX_HISTORY;) {
970 char *hl = xmalloc_getline(fp); 972 char *hl = xmalloc_getline(fp);
971 int l; 973 int l;
@@ -982,8 +984,8 @@ static void load_history(const char *fromfile)
982 state->history[hi++] = hl; 984 state->history[hi++] = hl;
983 } 985 }
984 fclose(fp); 986 fclose(fp);
987 state->cur_history = state->cnt_history = hi;
985 } 988 }
986 state->cur_history = state->cnt_history = hi;
987} 989}
988 990
989/* state->flags is already checked to be nonzero */ 991/* state->flags is already checked to be nonzero */