$OpenBSD: patch-readline_readline_c,v 1.2 2004/06/07 05:58:45 david Exp $
--- readline/readline.c.orig	1995-02-24 15:20:03.000000000 -0600
+++ readline/readline.c	2004-06-06 22:06:07.000000000 -0500
@@ -610,22 +610,22 @@ rl_signal_handler (sig)
 
 rl_set_signals ()
 {
-  old_int = (SigHandler *)signal (SIGINT, rl_signal_handler);
+  old_int = (SigHandler *)signal (SIGINT, (void *)rl_signal_handler);
   if (old_int == (SigHandler *)SIG_IGN)
     signal (SIGINT, SIG_IGN);
 
-  old_alrm = (SigHandler *)signal (SIGALRM, rl_signal_handler);
+  old_alrm = (SigHandler *)signal (SIGALRM, (void *)rl_signal_handler);
   if (old_alrm == (SigHandler *)SIG_IGN)
     signal (SIGALRM, SIG_IGN);
 
 #if defined (SIGTSTP)
-  old_tstp = (SigHandler *)signal (SIGTSTP, rl_signal_handler);
+  old_tstp = (SigHandler *)signal (SIGTSTP, (void *)rl_signal_handler);
   if (old_tstp == (SigHandler *)SIG_IGN)
     signal (SIGTSTP, SIG_IGN);
 #endif
 #if defined (SIGTTOU)
-  old_ttou = (SigHandler *)signal (SIGTTOU, rl_signal_handler);
-  old_ttin = (SigHandler *)signal (SIGTTIN, rl_signal_handler);
+  old_ttou = (SigHandler *)signal (SIGTTOU, (void *)rl_signal_handler);
+  old_ttin = (SigHandler *)signal (SIGTTIN, (void *)rl_signal_handler);
 
   if (old_tstp == (SigHandler *)SIG_IGN)
     {
@@ -635,26 +635,26 @@ rl_set_signals ()
 #endif
 
 #if defined (SIGWINCH)
-  old_sigwinch = (SigHandler *)signal (SIGWINCH, rl_handle_sigwinch);
+  old_sigwinch = (SigHandler *)signal (SIGWINCH, (void *)rl_handle_sigwinch);
 #endif
 }
 
 rl_clear_signals ()
 {
-  signal (SIGINT, old_int);
-  signal (SIGALRM, old_alrm);
+  signal (SIGINT, (void *)old_int);
+  signal (SIGALRM, (void *)old_alrm);
 
 #if defined (SIGTSTP)
-  signal (SIGTSTP, old_tstp);
+  signal (SIGTSTP, (void *)old_tstp);
 #endif
 
 #if defined (SIGTTOU)
-  signal (SIGTTOU, old_ttou);
-  signal (SIGTTIN, old_ttin);
+  signal (SIGTTOU, (void *)old_ttou);
+  signal (SIGTTIN, (void *)old_ttin);
 #endif
 
 #if defined (SIGWINCH)
-      signal (SIGWINCH, old_sigwinch);
+      signal (SIGWINCH, (void *)old_sigwinch);
 #endif
 }
 #endif  /* HANDLE_SIGNALS */
@@ -1700,8 +1700,14 @@ update_line (old, new, current_line)
     return;
 
   wsatend = 1;			/* flag for trailing whitespace */
-  ols = oe - 1;			/* find last same */
-  nls = ne - 1;
+
+  /* find last same */
+  ols = oe;
+  if (oe != old)
+    ols--;
+  nls = ne;
+  if (ne != new)
+    nls--;
   while ((*ols == *nls) && (ols > ofd) && (nls > nfd))
     {
       if (*ols != ' ')
