diff options
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/lineedit.c | 14 |
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 */ |