Sync readline/ to version 7.0 alpha
[deliverable/binutils-gdb.git] / readline / history.c
index d7894cfd0a4202bacfff38ecd6c871f03a9be2cf..14696934b843f9d9f7a2be6b6dc01b7c8ea1e1e7 100644 (file)
@@ -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;
 {
This page took 0.04057 seconds and 4 git commands to generate.