X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=readline%2Fhistory.c;h=14696934b843f9d9f7a2be6b6dc01b7c8ea1e1e7;hb=4a11f2065906976675808364ddbd1c0f77eea41f;hp=d7894cfd0a4202bacfff38ecd6c871f03a9be2cf;hpb=a496fbc8802f0a5719db6347a43cc869e03d83c9;p=deliverable%2Fbinutils-gdb.git diff --git a/readline/history.c b/readline/history.c index d7894cfd0a..14696934b8 100644 --- a/readline/history.c +++ b/readline/history.c @@ -1,6 +1,6 @@ /* history.c -- standalone history library */ -/* Copyright (C) 1989-2009 Free Software Foundation, Inc. +/* Copyright (C) 1989-2011 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. @@ -48,6 +48,9 @@ #include "xmalloc.h" +/* How big to make the_history when we first allocate it. */ +#define DEFAULT_HISTORY_INITIAL_SIZE 502 + /* The number of slots to increase the_history by. */ #define DEFAULT_HISTORY_GROW_SIZE 50 @@ -236,7 +239,7 @@ history_get_time (hist) ts = hist->timestamp; if (ts[0] != history_comment_char) return 0; - t = (time_t) atol (ts + 1); /* XXX - should use strtol() here */ + t = (time_t) strtol (ts + 1, (char **)NULL, 10); /* XXX - should use strtol() here */ return t; } @@ -279,9 +282,14 @@ add_history (string) if (the_history[0]) (void) free_history_entry (the_history[0]); - /* Copy the rest of the entries, moving down one slot. */ + /* Copy the rest of the entries, moving down one slot. Copy includes + trailing NULL. */ +#if 0 for (i = 0; i < history_length; i++) the_history[i] = the_history[i + 1]; +#else + memmove (the_history, the_history + 1, history_length * sizeof (HIST_ENTRY *)); +#endif history_base++; } @@ -289,7 +297,10 @@ add_history (string) { if (history_size == 0) { - history_size = DEFAULT_HISTORY_GROW_SIZE; + if (history_stifled && history_max_entries > 0) + history_size = history_max_entries + 2; + else + history_size = DEFAULT_HISTORY_INITIAL_SIZE; the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *)); history_length = 1; } @@ -318,7 +329,7 @@ add_history_time (string) { HIST_ENTRY *hs; - if (string == 0) + if (string == 0 || history_length < 1) return; hs = the_history[history_length - 1]; FREE (hs->timestamp); @@ -394,7 +405,7 @@ replace_history_entry (which, line, data) WHICH >= 0 means to replace that particular history entry's data, as long as it matches OLD. */ void -replace_history_data (which,old, new) +replace_history_data (which, old, new) int which; histdata_t *old, *new; {