diff -Naur -x .svn cross-lfs.orig/trunk/BOOK/final-system/common/coreutils.xml cross-lfs/trunk/BOOK/final-system/common/coreutils.xml
--- cross-lfs.orig/trunk/BOOK/final-system/common/coreutils.xml	2008-09-21 11:53:53.000000000 +0000
+++ cross-lfs/trunk/BOOK/final-system/common/coreutils.xml	2008-09-21 11:42:50.000000000 +0000
@@ -32,13 +32,7 @@
 
 <screen os="p2"><userinput>patch -Np1 -i ../&coreutils-uname-patch;</userinput></screen>
 
-    <para os="s1">The following command renames the internal implementation of
-    futimens to gl_futimens as newer versions of Glibc provide an incompatible
-    version:</para>
-
-<screen os="s2"><userinput>sed -i "s/futimens/gl_&amp;/" $(grep -lr futimens *)</userinput></screen>
-
-    <para os="c">Now prepare Coreutils for compilation:</para>
+   <para os="c">Now prepare Coreutils for compilation:</para>
 
 <screen os="d"><userinput>./configure --prefix=/usr \
     --enable-no-install-program=arch,kill,su,uptime \
diff -Naur -x .svn cross-lfs.orig/trunk/BOOK/general.ent cross-lfs/trunk/BOOK/general.ent
--- cross-lfs.orig/trunk/BOOK/general.ent	2008-09-21 11:54:04.000000000 +0000
+++ cross-lfs/trunk/BOOK/general.ent	2008-09-21 11:39:35.000000000 +0000
@@ -2,7 +2,7 @@
 
 <!ENTITY month "09"> <!-- Use two digits -->
 <!ENTITY month_name "September">
-<!ENTITY day "20"> <!-- Use two digits -->
+<!ENTITY day "21"> <!-- Use two digits -->
 <!ENTITY year "2008"> <!-- Use four digits -->
 
 <!ENTITY releasedate "&month_name; &day;, &year;">
diff -Naur -x .svn cross-lfs.orig/trunk/BOOK/introduction/common/changelog.xml cross-lfs/trunk/BOOK/introduction/common/changelog.xml
--- cross-lfs.orig/trunk/BOOK/introduction/common/changelog.xml	2008-09-21 11:53:47.000000000 +0000
+++ cross-lfs/trunk/BOOK/introduction/common/changelog.xml	2008-09-21 14:00:59.000000000 +0000
@@ -36,6 +36,22 @@
     </listitem>
 -->
 
+<listitem>
+  <para>September 22, 2008</para>
+  <itemizedlist>
+    <listitem>
+      <para>[Jonathan] - Updated Iana-Etc to 2.30.</para>
+    </listitem>
+    <listitem>
+      <para>[Jonathan] - Removed futimens sed command from 
+		Coreutils-6.12.</para>
+    </listitem>
+    <listitem>
+      <para>[Jonathan] - Updated Readline fixes patch to version 5.</para>
+    </listitem>
+  </itemizedlist>
+</listitem>
+
     <listitem>
       <para>September 20, 2008</para>
       <itemizedlist>
diff -Naur -x .svn cross-lfs.orig/trunk/BOOK/packages.ent cross-lfs/trunk/BOOK/packages.ent
--- cross-lfs.orig/trunk/BOOK/packages.ent	2008-09-21 11:54:04.000000000 +0000
+++ cross-lfs/trunk/BOOK/packages.ent	2008-09-21 11:41:40.000000000 +0000
@@ -209,10 +209,10 @@
 <!ENTITY hfsutils-md5 "fa572afd6da969e25c1455f728750ec4">
 <!ENTITY hfsutils-home "http://www.mars.org/home/rob/proj/hfs">
 
-<!ENTITY iana-etc-version "2.20">
-<!ENTITY iana-etc-size "192 KB">
+<!ENTITY iana-etc-version "2.30">
+<!ENTITY iana-etc-size "204 KB">
 <!ENTITY iana-etc-url "http://www.sethwklein.net/projects/iana-etc/downloads/iana-etc-&iana-etc-version;.tar.bz2">
-<!ENTITY iana-etc-md5 "51d584b7b6115528c21e8ea32250f2b1">
+<!ENTITY iana-etc-md5 "3ba3afb1d1b261383d247f46cb135ee8">
 <!ENTITY iana-etc-home "http://www.sethwklein.net/projects/iana-etc">
 
 <!ENTITY inetutils-version "1.5">
diff -Naur -x .svn cross-lfs.orig/trunk/BOOK/patches.ent cross-lfs/trunk/BOOK/patches.ent
--- cross-lfs.orig/trunk/BOOK/patches.ent	2008-09-21 11:54:04.000000000 +0000
+++ cross-lfs/trunk/BOOK/patches.ent	2008-09-21 13:55:19.000000000 +0000
@@ -64,8 +64,8 @@
 <!ENTITY perl-libc-patch-md5 "2d5d9cfd00a7e6554496338133bcd06c">
 <!ENTITY perl-libc-patch-size "4 KB">
 
-<!ENTITY readline-fixes-patch "readline-&readline-version;-fixes-4.patch">
-<!ENTITY readline-fixes-patch-md5 "14ae1c3f3ff7223656f874bcf36e6f19">
+<!ENTITY readline-fixes-patch "readline-&readline-version;-fixes-5.patch">
+<!ENTITY readline-fixes-patch-md5 "7390b2296b7b11209829646537294ebb">
 <!ENTITY readline-fixes-patch-size "20 KB">
 
 <!ENTITY vim-branch_update-patch "vim-&vim-version;-branch_update-1.patch">
diff -Naur -x .svn cross-lfs.orig/trunk/patches/readline-5.2-fixes-4.patch cross-lfs/trunk/patches/readline-5.2-fixes-4.patch
--- cross-lfs.orig/trunk/patches/readline-5.2-fixes-4.patch	2008-09-21 11:53:38.000000000 +0000
+++ cross-lfs/trunk/patches/readline-5.2-fixes-4.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,612 +0,0 @@
-Submitted By: Jim Gifford (jim at linuxfromscratch dot org)
-Date: 12-21-2007
-Initial Package Version: 5.2
-Origin: Upstream
-Upstream Status: Applied
-Description: Contains all upstream patches up to 5.2-012
-
-diff -Naur readline-5.2.orig/complete.c readline-5.2/complete.c
---- readline-5.2.orig/complete.c	2006-07-28 11:35:49.000000000 -0400
-+++ readline-5.2/complete.c	2007-12-21 00:06:28.000000000 -0500
-@@ -428,7 +428,7 @@
- 	return (1);
-       if (c == 'n' || c == 'N' || c == RUBOUT)
- 	return (0);
--      if (c == ABORT_CHAR)
-+      if (c == ABORT_CHAR || c < 0)
- 	_rl_abort_internal ();
-       if (for_pager && (c == NEWLINE || c == RETURN))
- 	return (2);
-diff -Naur readline-5.2.orig/display.c readline-5.2/display.c
---- readline-5.2.orig/display.c	2006-09-14 14:20:12.000000000 -0400
-+++ readline-5.2/display.c	2007-12-21 00:06:31.000000000 -0500
-@@ -391,14 +391,14 @@
-       t = ++p;
-       local_prompt = expand_prompt (p, &prompt_visible_length,
- 				       &prompt_last_invisible,
--				       (int *)NULL,
-+				       &prompt_invis_chars_first_line,
- 				       &prompt_physical_chars);
-       c = *t; *t = '\0';
-       /* The portion of the prompt string up to and including the
- 	 final newline is now null-terminated. */
-       local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length,
- 						   (int *)NULL,
--						   &prompt_invis_chars_first_line,
-+						   (int *)NULL,
- 						   (int *)NULL);
-       *t = c;
-       local_prompt_len = local_prompt ? strlen (local_prompt) : 0;
-@@ -561,6 +561,17 @@
-       wrap_offset = prompt_invis_chars_first_line = 0;
-     }
- 
-+#if defined (HANDLE_MULTIBYTE)
-+#define CHECK_INV_LBREAKS() \
-+      do { \
-+	if (newlines >= (inv_lbsize - 2)) \
-+	  { \
-+	    inv_lbsize *= 2; \
-+	    inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
-+	    _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \
-+	  } \
-+      } while (0)
-+#else
- #define CHECK_INV_LBREAKS() \
-       do { \
- 	if (newlines >= (inv_lbsize - 2)) \
-@@ -569,6 +580,7 @@
- 	    inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
- 	  } \
-       } while (0)
-+#endif /* HANDLE_MULTIBYTE */
- 
- #if defined (HANDLE_MULTIBYTE)	  
- #define CHECK_LPOS() \
-@@ -1036,7 +1048,7 @@
- 		tx = _rl_col_width (&visible_line[pos], 0, nleft) - visible_wrap_offset;
- 	      else
- 		tx = nleft;
--	      if (_rl_last_c_pos > tx)
-+	      if (tx >= 0 && _rl_last_c_pos > tx)
- 		{
- 	          _rl_backspace (_rl_last_c_pos - tx);	/* XXX */
- 	          _rl_last_c_pos = tx;
-@@ -1192,7 +1204,7 @@
-      int current_line, omax, nmax, inv_botlin;
- {
-   register char *ofd, *ols, *oe, *nfd, *nls, *ne;
--  int temp, lendiff, wsatend, od, nd;
-+  int temp, lendiff, wsatend, od, nd, o_cpos;
-   int current_invis_chars;
-   int col_lendiff, col_temp;
- #if defined (HANDLE_MULTIBYTE)
-@@ -1453,6 +1465,8 @@
- 	_rl_last_c_pos = lendiff;
-     }
- 
-+  o_cpos = _rl_last_c_pos;
-+
-   /* When this function returns, _rl_last_c_pos is correct, and an absolute
-      cursor postion in multibyte mode, but a buffer index when not in a
-      multibyte locale. */
-@@ -1462,7 +1476,9 @@
-   /* We need to indicate that the cursor position is correct in the presence of
-      invisible characters in the prompt string.  Let's see if setting this when
-      we make sure we're at the end of the drawn prompt string works. */
--  if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && _rl_last_c_pos == prompt_physical_chars)
-+  if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && 
-+      (_rl_last_c_pos > 0 || o_cpos > 0) &&
-+      _rl_last_c_pos == prompt_physical_chars)
-     cpos_adjusted = 1;
- #endif
- #endif
-@@ -1506,11 +1522,31 @@
-     {
-       /* Non-zero if we're increasing the number of lines. */
-       int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin;
-+      /* If col_lendiff is > 0, implying that the new string takes up more
-+	 screen real estate than the old, but lendiff is < 0, meaning that it
-+	 takes fewer bytes, we need to just output the characters starting
-+	 from the first difference.  These will overwrite what is on the
-+	 display, so there's no reason to do a smart update.  This can really
-+	 only happen in a multibyte environment. */
-+      if (lendiff < 0)
-+	{
-+	  _rl_output_some_chars (nfd, temp);
-+	  _rl_last_c_pos += _rl_col_width (nfd, 0, temp);
-+	  /* If nfd begins before any invisible characters in the prompt,
-+	     adjust _rl_last_c_pos to account for wrap_offset and set
-+	     cpos_adjusted to let the caller know. */
-+	  if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible))
-+	    {
-+	      _rl_last_c_pos -= wrap_offset;
-+	      cpos_adjusted = 1;
-+	    }
-+	  return;
-+	}
-       /* Sometimes it is cheaper to print the characters rather than
- 	 use the terminal's capabilities.  If we're growing the number
- 	 of lines, make sure we actually cause the new line to wrap
- 	 around on auto-wrapping terminals. */
--      if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
-+      else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
- 	{
- 	  /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and
- 	     _rl_horizontal_scroll_mode == 1, inserting the characters with
-@@ -1533,11 +1569,16 @@
- 	    }
- 	  else
- 	    {
--	      /* We have horizontal scrolling and we are not inserting at
--		 the end.  We have invisible characters in this line.  This
--		 is a dumb update. */
- 	      _rl_output_some_chars (nfd, temp);
- 	      _rl_last_c_pos += col_temp;
-+	      /* If nfd begins before any invisible characters in the prompt,
-+		 adjust _rl_last_c_pos to account for wrap_offset and set
-+		 cpos_adjusted to let the caller know. */
-+	      if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible))
-+		{
-+		  _rl_last_c_pos -= wrap_offset;
-+		  cpos_adjusted = 1;
-+		}
- 	      return;
- 	    }
- 	  /* Copy (new) chars to screen from first diff to last match. */
-@@ -1586,8 +1627,22 @@
- 	  temp = nls - nfd;
- 	  if (temp > 0)
- 	    {
-+	      /* If nfd begins at the prompt, or before the invisible
-+		 characters in the prompt, we need to adjust _rl_last_c_pos
-+		 in a multibyte locale to account for the wrap offset and
-+		 set cpos_adjusted accordingly. */
- 	      _rl_output_some_chars (nfd, temp);
--	      _rl_last_c_pos += _rl_col_width (nfd, 0, temp);;
-+	      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-+		{
-+                  _rl_last_c_pos += _rl_col_width (nfd, 0, temp);
-+                  if (current_line == 0 && wrap_offset &&  ((nfd - new) <= prompt_last_invisible))
-+		    {
-+		      _rl_last_c_pos -= wrap_offset;
-+		      cpos_adjusted = 1;
-+		    }
-+		}
-+              else
-+                _rl_last_c_pos += temp;
- 	    }
- 	}
-       /* Otherwise, print over the existing material. */
-@@ -1595,8 +1650,20 @@
- 	{
- 	  if (temp > 0)
- 	    {
-+	      /* If nfd begins at the prompt, or before the invisible
-+		 characters in the prompt, we need to adjust _rl_last_c_pos
-+		 in a multibyte locale to account for the wrap offset and
-+		 set cpos_adjusted accordingly. */
- 	      _rl_output_some_chars (nfd, temp);
- 	      _rl_last_c_pos += col_temp;		/* XXX */
-+	      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-+		{
-+		  if (current_line == 0 && wrap_offset &&  ((nfd - new) <= prompt_last_invisible))
-+		    {
-+		      _rl_last_c_pos -= wrap_offset;
-+		      cpos_adjusted = 1;
-+		    }
-+		}
- 	    }
- 	  lendiff = (oe - old) - (ne - new);
- 	  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-@@ -1732,7 +1799,10 @@
-   if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-     {
-       dpos = _rl_col_width (data, 0, new);
--      if (dpos > prompt_last_invisible)		/* XXX - don't use woff here */
-+      /* Use NEW when comparing against the last invisible character in the
-+	 prompt string, since they're both buffer indices and DPOS is a
-+	 desired display position. */
-+      if (new > prompt_last_invisible)		/* XXX - don't use woff here */
- 	{
- 	  dpos -= woff;
- 	  /* Since this will be assigned to _rl_last_c_pos at the end (more
-@@ -2380,6 +2450,8 @@
- 
-   if (end <= start)
-     return 0;
-+  if (MB_CUR_MAX == 1 || rl_byte_oriented)
-+    return (end - start);
- 
-   memset (&ps, 0, sizeof (mbstate_t));
- 
-diff -Naur readline-5.2.orig/input.c readline-5.2/input.c
---- readline-5.2.orig/input.c	2006-08-16 15:15:16.000000000 -0400
-+++ readline-5.2/input.c	2007-12-21 00:06:32.000000000 -0500
-@@ -133,8 +133,11 @@
-     return (0);
- 
-   *key = ibuffer[pop_index++];
--
-+#if 0
-   if (pop_index >= ibuffer_len)
-+#else
-+  if (pop_index > ibuffer_len)
-+#endif
-     pop_index = 0;
- 
-   return (1);
-@@ -151,7 +154,7 @@
-     {
-       pop_index--;
-       if (pop_index < 0)
--	pop_index = ibuffer_len - 1;
-+	pop_index = ibuffer_len;
-       ibuffer[pop_index] = key;
-       return (1);
-     }
-@@ -250,7 +253,8 @@
-       while (chars_avail--)
- 	{
- 	  k = (*rl_getc_function) (rl_instream);
--	  rl_stuff_char (k);
-+	  if (rl_stuff_char (k) == 0)
-+	    break;			/* some problem; no more room */
- 	  if (k == NEWLINE || k == RETURN)
- 	    break;
- 	}
-@@ -373,7 +377,11 @@
-       RL_SETSTATE (RL_STATE_INPUTPENDING);
-     }
-   ibuffer[push_index++] = key;
-+#if 0
-   if (push_index >= ibuffer_len)
-+#else
-+  if (push_index > ibuffer_len)
-+#endif
-     push_index = 0;
- 
-   return 1;
-@@ -513,20 +521,26 @@
-      char *mbchar;
-      int size;
- {
--  int mb_len = 0;
-+  int mb_len, c;
-   size_t mbchar_bytes_length;
-   wchar_t wc;
-   mbstate_t ps, ps_back;
- 
-   memset(&ps, 0, sizeof (mbstate_t));
-   memset(&ps_back, 0, sizeof (mbstate_t));
--  
-+
-+  mb_len = 0;  
-   while (mb_len < size)
-     {
-       RL_SETSTATE(RL_STATE_MOREINPUT);
--      mbchar[mb_len++] = rl_read_key ();
-+      c = rl_read_key ();
-       RL_UNSETSTATE(RL_STATE_MOREINPUT);
- 
-+      if (c < 0)
-+	break;
-+
-+      mbchar[mb_len++] = c;
-+
-       mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps);
-       if (mbchar_bytes_length == (size_t)(-1))
- 	break;		/* invalid byte sequence for the current locale */
-@@ -564,7 +578,7 @@
- 
-   c = first;
-   memset (mb, 0, mlen);
--  for (i = 0; i < mlen; i++)
-+  for (i = 0; c >= 0 && i < mlen; i++)
-     {
-       mb[i] = (char)c;
-       memset (&ps, 0, sizeof (mbstate_t));
-diff -Naur readline-5.2.orig/isearch.c readline-5.2/isearch.c
---- readline-5.2.orig/isearch.c	2005-12-26 17:18:53.000000000 -0500
-+++ readline-5.2/isearch.c	2007-12-21 00:06:28.000000000 -0500
-@@ -327,8 +327,15 @@
-   rl_command_func_t *f;
- 
-   f = (rl_command_func_t *)NULL;
-- 
-- /* Translate the keys we do something with to opcodes. */
-+
-+  if (c < 0)
-+    {
-+      cxt->sflags |= SF_FAILED;
-+      cxt->history_pos = cxt->last_found_line;
-+      return -1;
-+    }
-+
-+  /* Translate the keys we do something with to opcodes. */
-   if (c >= 0 && _rl_keymap[c].type == ISFUNC)
-     {
-       f = _rl_keymap[c].function;
-diff -Naur readline-5.2.orig/misc.c readline-5.2/misc.c
---- readline-5.2.orig/misc.c	2005-12-26 17:20:46.000000000 -0500
-+++ readline-5.2/misc.c	2007-12-21 00:06:28.000000000 -0500
-@@ -146,6 +146,8 @@
- 	  rl_restore_prompt ();
- 	  rl_clear_message ();
- 	  RL_UNSETSTATE(RL_STATE_NUMERICARG);
-+	  if (key < 0)
-+	    return -1;
- 	  return (_rl_dispatch (key, _rl_keymap));
- 	}
-     }
-diff -Naur readline-5.2.orig/readline.c readline-5.2/readline.c
---- readline-5.2.orig/readline.c	2006-08-16 15:00:36.000000000 -0400
-+++ readline-5.2/readline.c	2007-12-21 00:06:28.000000000 -0500
-@@ -645,6 +645,11 @@
-   if ((cxt->flags & KSEQ_DISPATCHED) == 0)
-     {
-       nkey = _rl_subseq_getchar (cxt->okey);
-+      if (nkey < 0)
-+	{
-+	  _rl_abort_internal ();
-+	  return -1;
-+	}
-       r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg);
-       cxt->flags |= KSEQ_DISPATCHED;
-     }
-diff -Naur readline-5.2.orig/support/shobj-conf readline-5.2/support/shobj-conf
---- readline-5.2.orig/support/shobj-conf	2006-04-11 09:15:43.000000000 -0400
-+++ readline-5.2/support/shobj-conf	2007-12-21 00:06:32.000000000 -0500
-@@ -10,7 +10,7 @@
- # Chet Ramey
- # chet@po.cwru.edu
- 
--# Copyright (C) 1996-2002 Free Software Foundation, Inc.
-+# Copyright (C) 1996-2007 Free Software Foundation, Inc.
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
-@@ -114,7 +114,7 @@
- 	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
- 	;;
- 
--freebsd2* | netbsd*)
-+freebsd2*)
- 	SHOBJ_CFLAGS=-fpic
- 	SHOBJ_LD=ld
- 	SHOBJ_LDFLAGS='-x -Bshareable'
-@@ -125,7 +125,7 @@
- 
- # FreeBSD-3.x ELF
- freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*)
--	SHOBJ_CFLAGS=-fpic
-+	SHOBJ_CFLAGS=-fPIC
- 	SHOBJ_LD='${CC}'
- 
- 	if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then
-@@ -142,7 +142,7 @@
- 	;;
- 
- # Darwin/MacOS X
--darwin8*)
-+darwin[89]*)
- 	SHOBJ_STATUS=supported
- 	SHLIB_STATUS=supported
- 	
-@@ -153,7 +153,7 @@
- 	SHLIB_LIBVERSION='$(SHLIB_MAJOR)$(SHLIB_MINOR).$(SHLIB_LIBSUFF)'
- 	SHLIB_LIBSUFF='dylib'
- 
--	SHOBJ_LDFLAGS='-undefined dynamic_lookup'
-+	SHOBJ_LDFLAGS='-dynamiclib -dynamic -undefined dynamic_lookup -arch_only `/usr/bin/arch`'
- 	SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
- 
- 	SHLIB_LIBS='-lncurses'	# see if -lcurses works on MacOS X 10.1 
-@@ -171,7 +171,7 @@
- 	SHLIB_LIBSUFF='dylib'
- 
- 	case "${host_os}" in
--	darwin[78]*)	SHOBJ_LDFLAGS=''
-+	darwin[789]*)	SHOBJ_LDFLAGS=''
- 			SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
- 			;;
- 	*)		SHOBJ_LDFLAGS='-dynamic'
-@@ -182,7 +182,7 @@
- 	SHLIB_LIBS='-lncurses'	# see if -lcurses works on MacOS X 10.1 
- 	;;
- 
--openbsd*)
-+openbsd*|netbsd*)
- 	SHOBJ_CFLAGS=-fPIC
- 	SHOBJ_LD='${CC}'
- 	SHOBJ_LDFLAGS='-shared'
-@@ -247,7 +247,7 @@
- 	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
- 	;;
- 
--aix4.[2-9]*-*gcc*)		# lightly tested by jik@cisco.com
-+aix4.[2-9]*-*gcc*|aix[5-9].*-*gcc*)		# lightly tested by jik@cisco.com
- 	SHOBJ_CFLAGS=-fpic
- 	SHOBJ_LD='ld'
- 	SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall'
-@@ -258,7 +258,7 @@
- 	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
- 	;;
- 
--aix4.[2-9]*)
-+aix4.[2-9]*|aix[5-9].*)
- 	SHOBJ_CFLAGS=-K
- 	SHOBJ_LD='ld'
- 	SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall'
-@@ -329,7 +329,7 @@
- 	SHOBJ_LD='${CC}'
- 	# if you have problems linking here, moving the `-Wl,+h,$@' from
- 	# SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work
--	SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s'
-+	SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s'
- 
- 	SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)'
- 	SHLIB_LIBSUFF='sl'
-diff -Naur readline-5.2.orig/text.c readline-5.2/text.c
---- readline-5.2.orig/text.c	2006-07-28 11:55:27.000000000 -0400
-+++ readline-5.2/text.c	2007-12-21 00:06:28.000000000 -0500
-@@ -857,6 +857,9 @@
-   c = rl_read_key ();
-   RL_UNSETSTATE(RL_STATE_MOREINPUT);
- 
-+  if (c < 0)
-+    return -1;
-+
- #if defined (HANDLE_SIGNALS)
-   if (RL_ISSTATE (RL_STATE_CALLBACK) == 0)
-     _rl_restore_tty_signals ();
-@@ -1520,6 +1523,9 @@
- 
-   mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX);
- 
-+  if (mb_len <= 0)
-+    return -1;
-+
-   if (count < 0)
-     return (_rl_char_search_internal (-count, bdir, mbchar, mb_len));
-   else
-@@ -1536,6 +1542,9 @@
-   c = rl_read_key ();
-   RL_UNSETSTATE(RL_STATE_MOREINPUT);
- 
-+  if (c < 0)
-+    return -1;
-+
-   if (count < 0)
-     return (_rl_char_search_internal (-count, bdir, c));
-   else
-diff -Naur readline-5.2.orig/vi_mode.c readline-5.2/vi_mode.c
---- readline-5.2.orig/vi_mode.c	2006-07-29 16:42:28.000000000 -0400
-+++ readline-5.2/vi_mode.c	2007-12-21 00:06:28.000000000 -0500
-@@ -886,6 +886,13 @@
-   RL_SETSTATE(RL_STATE_MOREINPUT);
-   c = rl_read_key ();
-   RL_UNSETSTATE(RL_STATE_MOREINPUT);
-+
-+  if (c < 0)
-+    {
-+      *nextkey = 0;
-+      return -1;
-+    }
-+
-   *nextkey = c;
- 
-   if (!member (c, vi_motion))
-@@ -902,6 +909,11 @@
- 	  RL_SETSTATE(RL_STATE_MOREINPUT);
- 	  c = rl_read_key ();	/* real command */
- 	  RL_UNSETSTATE(RL_STATE_MOREINPUT);
-+	  if (c < 0)
-+	    {
-+	      *nextkey = 0;
-+	      return -1;
-+	    }
- 	  *nextkey = c;
- 	}
-       else if (key == c && (key == 'd' || key == 'y' || key == 'c'))
-@@ -1224,14 +1236,22 @@
- _rl_vi_callback_char_search (data)
-      _rl_callback_generic_arg *data;
- {
-+  int c;
- #if defined (HANDLE_MULTIBYTE)
--  _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
-+  c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
- #else
-   RL_SETSTATE(RL_STATE_MOREINPUT);
--  _rl_vi_last_search_char = rl_read_key ();
-+  c = rl_read_key ();
-   RL_UNSETSTATE(RL_STATE_MOREINPUT);
- #endif
- 
-+  if (c <= 0)
-+    return -1;
-+
-+#if !defined (HANDLE_MULTIBYTE)
-+  _rl_vi_last_search_char = c;
-+#endif
-+
-   _rl_callback_func = 0;
-   _rl_want_redisplay = 1;
- 
-@@ -1247,6 +1267,7 @@
- rl_vi_char_search (count, key)
-      int count, key;
- {
-+  int c;
- #if defined (HANDLE_MULTIBYTE)
-   static char *target;
-   static int tlen;
-@@ -1293,11 +1314,17 @@
-       else
- 	{
- #if defined (HANDLE_MULTIBYTE)
--	  _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
-+	  c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
-+	  if (c <= 0)
-+	    return -1;
-+	  _rl_vi_last_search_mblen = c;
- #else
- 	  RL_SETSTATE(RL_STATE_MOREINPUT);
--	  _rl_vi_last_search_char = rl_read_key ();
-+	  c = rl_read_key ();
- 	  RL_UNSETSTATE(RL_STATE_MOREINPUT);
-+	  if (c < 0)
-+	    return -1;
-+	  _rl_vi_last_search_char = c;
- #endif
- 	}
-     }
-@@ -1467,6 +1494,9 @@
-   c = rl_read_key ();
-   RL_UNSETSTATE(RL_STATE_MOREINPUT);
- 
-+  if (c < 0)
-+    return -1;
-+
- #if defined (HANDLE_MULTIBYTE)
-   if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-     c = _rl_read_mbstring (c, mb, mlen);
-@@ -1485,6 +1515,9 @@
- 
-   _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
- 
-+  if (c < 0)
-+    return -1;
-+
-   _rl_callback_func = 0;
-   _rl_want_redisplay = 1;
- 
-@@ -1516,6 +1549,9 @@
-   else
-     _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
- 
-+  if (c < 0)
-+    return -1;
-+
-   return (_rl_vi_change_char (count, c, mb));
- }
- 
-@@ -1650,7 +1686,7 @@
-   ch = rl_read_key ();
-   RL_UNSETSTATE(RL_STATE_MOREINPUT);
- 
--  if (ch < 'a' || ch > 'z')
-+  if (ch < 0 || ch < 'a' || ch > 'z')	/* make test against 0 explicit */
-     {
-       rl_ding ();
-       return -1;
-@@ -1702,7 +1738,7 @@
-       rl_point = rl_mark;
-       return 0;
-     }
--  else if (ch < 'a' || ch > 'z')
-+  else if (ch < 0 || ch < 'a' || ch > 'z')	/* make test against 0 explicit */
-     {
-       rl_ding ();
-       return -1;
diff -Naur -x .svn cross-lfs.orig/trunk/patches/readline-5.2-fixes-5.patch cross-lfs/trunk/patches/readline-5.2-fixes-5.patch
--- cross-lfs.orig/trunk/patches/readline-5.2-fixes-5.patch	1970-01-01 00:00:00.000000000 +0000
+++ cross-lfs/trunk/patches/readline-5.2-fixes-5.patch	2008-09-21 13:53:30.000000000 +0000
@@ -0,0 +1,612 @@
+Submitted By: Matt Burgess (matthew at linuxfromscratch dot org)
+Date: 2007-12-22
+Initial Package Version: 5.2
+Upstream Status: From Upstream
+Origin: http://ftp.gnu.org/gnu/readline/readline-5.2-patches/
+Description: A combined patch containing patches 001-012 from upstream.
+
+diff -Naur readline-5.2.orig/complete.c readline-5.2/complete.c
+--- readline-5.2.orig/complete.c	2006-07-28 15:35:49.000000000 +0000
++++ readline-5.2/complete.c	2007-12-22 09:42:33.000000000 +0000
+@@ -428,7 +428,7 @@
+ 	return (1);
+       if (c == 'n' || c == 'N' || c == RUBOUT)
+ 	return (0);
+-      if (c == ABORT_CHAR)
++      if (c == ABORT_CHAR || c < 0)
+ 	_rl_abort_internal ();
+       if (for_pager && (c == NEWLINE || c == RETURN))
+ 	return (2);
+diff -Naur readline-5.2.orig/display.c readline-5.2/display.c
+--- readline-5.2.orig/display.c	2006-09-14 18:20:12.000000000 +0000
++++ readline-5.2/display.c	2007-12-22 09:42:33.000000000 +0000
+@@ -391,14 +391,14 @@
+       t = ++p;
+       local_prompt = expand_prompt (p, &prompt_visible_length,
+ 				       &prompt_last_invisible,
+-				       (int *)NULL,
++				       &prompt_invis_chars_first_line,
+ 				       &prompt_physical_chars);
+       c = *t; *t = '\0';
+       /* The portion of the prompt string up to and including the
+ 	 final newline is now null-terminated. */
+       local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length,
+ 						   (int *)NULL,
+-						   &prompt_invis_chars_first_line,
++						   (int *)NULL,
+ 						   (int *)NULL);
+       *t = c;
+       local_prompt_len = local_prompt ? strlen (local_prompt) : 0;
+@@ -561,6 +561,17 @@
+       wrap_offset = prompt_invis_chars_first_line = 0;
+     }
+ 
++#if defined (HANDLE_MULTIBYTE)
++#define CHECK_INV_LBREAKS() \
++      do { \
++	if (newlines >= (inv_lbsize - 2)) \
++	  { \
++	    inv_lbsize *= 2; \
++	    inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
++	    _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \
++	  } \
++      } while (0)
++#else
+ #define CHECK_INV_LBREAKS() \
+       do { \
+ 	if (newlines >= (inv_lbsize - 2)) \
+@@ -569,6 +580,7 @@
+ 	    inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
+ 	  } \
+       } while (0)
++#endif /* HANDLE_MULTIBYTE */
+ 
+ #if defined (HANDLE_MULTIBYTE)	  
+ #define CHECK_LPOS() \
+@@ -1036,7 +1048,7 @@
+ 		tx = _rl_col_width (&visible_line[pos], 0, nleft) - visible_wrap_offset;
+ 	      else
+ 		tx = nleft;
+-	      if (_rl_last_c_pos > tx)
++	      if (tx >= 0 && _rl_last_c_pos > tx)
+ 		{
+ 	          _rl_backspace (_rl_last_c_pos - tx);	/* XXX */
+ 	          _rl_last_c_pos = tx;
+@@ -1192,7 +1204,7 @@
+      int current_line, omax, nmax, inv_botlin;
+ {
+   register char *ofd, *ols, *oe, *nfd, *nls, *ne;
+-  int temp, lendiff, wsatend, od, nd;
++  int temp, lendiff, wsatend, od, nd, o_cpos;
+   int current_invis_chars;
+   int col_lendiff, col_temp;
+ #if defined (HANDLE_MULTIBYTE)
+@@ -1453,6 +1465,8 @@
+ 	_rl_last_c_pos = lendiff;
+     }
+ 
++  o_cpos = _rl_last_c_pos;
++
+   /* When this function returns, _rl_last_c_pos is correct, and an absolute
+      cursor postion in multibyte mode, but a buffer index when not in a
+      multibyte locale. */
+@@ -1462,7 +1476,9 @@
+   /* We need to indicate that the cursor position is correct in the presence of
+      invisible characters in the prompt string.  Let's see if setting this when
+      we make sure we're at the end of the drawn prompt string works. */
+-  if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && _rl_last_c_pos == prompt_physical_chars)
++  if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && 
++      (_rl_last_c_pos > 0 || o_cpos > 0) &&
++      _rl_last_c_pos == prompt_physical_chars)
+     cpos_adjusted = 1;
+ #endif
+ #endif
+@@ -1506,11 +1522,31 @@
+     {
+       /* Non-zero if we're increasing the number of lines. */
+       int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin;
++      /* If col_lendiff is > 0, implying that the new string takes up more
++	 screen real estate than the old, but lendiff is < 0, meaning that it
++	 takes fewer bytes, we need to just output the characters starting
++	 from the first difference.  These will overwrite what is on the
++	 display, so there's no reason to do a smart update.  This can really
++	 only happen in a multibyte environment. */
++      if (lendiff < 0)
++	{
++	  _rl_output_some_chars (nfd, temp);
++	  _rl_last_c_pos += _rl_col_width (nfd, 0, temp);
++	  /* If nfd begins before any invisible characters in the prompt,
++	     adjust _rl_last_c_pos to account for wrap_offset and set
++	     cpos_adjusted to let the caller know. */
++	  if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible))
++	    {
++	      _rl_last_c_pos -= wrap_offset;
++	      cpos_adjusted = 1;
++	    }
++	  return;
++	}
+       /* Sometimes it is cheaper to print the characters rather than
+ 	 use the terminal's capabilities.  If we're growing the number
+ 	 of lines, make sure we actually cause the new line to wrap
+ 	 around on auto-wrapping terminals. */
+-      if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
++      else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
+ 	{
+ 	  /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and
+ 	     _rl_horizontal_scroll_mode == 1, inserting the characters with
+@@ -1533,11 +1569,16 @@
+ 	    }
+ 	  else
+ 	    {
+-	      /* We have horizontal scrolling and we are not inserting at
+-		 the end.  We have invisible characters in this line.  This
+-		 is a dumb update. */
+ 	      _rl_output_some_chars (nfd, temp);
+ 	      _rl_last_c_pos += col_temp;
++	      /* If nfd begins before any invisible characters in the prompt,
++		 adjust _rl_last_c_pos to account for wrap_offset and set
++		 cpos_adjusted to let the caller know. */
++	      if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible))
++		{
++		  _rl_last_c_pos -= wrap_offset;
++		  cpos_adjusted = 1;
++		}
+ 	      return;
+ 	    }
+ 	  /* Copy (new) chars to screen from first diff to last match. */
+@@ -1586,8 +1627,22 @@
+ 	  temp = nls - nfd;
+ 	  if (temp > 0)
+ 	    {
++	      /* If nfd begins at the prompt, or before the invisible
++		 characters in the prompt, we need to adjust _rl_last_c_pos
++		 in a multibyte locale to account for the wrap offset and
++		 set cpos_adjusted accordingly. */
+ 	      _rl_output_some_chars (nfd, temp);
+-	      _rl_last_c_pos += _rl_col_width (nfd, 0, temp);;
++	      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
++		{
++                  _rl_last_c_pos += _rl_col_width (nfd, 0, temp);
++                  if (current_line == 0 && wrap_offset &&  ((nfd - new) <= prompt_last_invisible))
++		    {
++		      _rl_last_c_pos -= wrap_offset;
++		      cpos_adjusted = 1;
++		    }
++		}
++              else
++                _rl_last_c_pos += temp;
+ 	    }
+ 	}
+       /* Otherwise, print over the existing material. */
+@@ -1595,8 +1650,20 @@
+ 	{
+ 	  if (temp > 0)
+ 	    {
++	      /* If nfd begins at the prompt, or before the invisible
++		 characters in the prompt, we need to adjust _rl_last_c_pos
++		 in a multibyte locale to account for the wrap offset and
++		 set cpos_adjusted accordingly. */
+ 	      _rl_output_some_chars (nfd, temp);
+ 	      _rl_last_c_pos += col_temp;		/* XXX */
++	      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
++		{
++		  if (current_line == 0 && wrap_offset &&  ((nfd - new) <= prompt_last_invisible))
++		    {
++		      _rl_last_c_pos -= wrap_offset;
++		      cpos_adjusted = 1;
++		    }
++		}
+ 	    }
+ 	  lendiff = (oe - old) - (ne - new);
+ 	  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+@@ -1732,7 +1799,10 @@
+   if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+     {
+       dpos = _rl_col_width (data, 0, new);
+-      if (dpos > prompt_last_invisible)		/* XXX - don't use woff here */
++      /* Use NEW when comparing against the last invisible character in the
++	 prompt string, since they're both buffer indices and DPOS is a
++	 desired display position. */
++      if (new > prompt_last_invisible)		/* XXX - don't use woff here */
+ 	{
+ 	  dpos -= woff;
+ 	  /* Since this will be assigned to _rl_last_c_pos at the end (more
+@@ -2380,6 +2450,8 @@
+ 
+   if (end <= start)
+     return 0;
++  if (MB_CUR_MAX == 1 || rl_byte_oriented)
++    return (end - start);
+ 
+   memset (&ps, 0, sizeof (mbstate_t));
+ 
+diff -Naur readline-5.2.orig/input.c readline-5.2/input.c
+--- readline-5.2.orig/input.c	2006-08-16 19:15:16.000000000 +0000
++++ readline-5.2/input.c	2007-12-22 09:42:33.000000000 +0000
+@@ -133,8 +133,11 @@
+     return (0);
+ 
+   *key = ibuffer[pop_index++];
+-
++#if 0
+   if (pop_index >= ibuffer_len)
++#else
++  if (pop_index > ibuffer_len)
++#endif
+     pop_index = 0;
+ 
+   return (1);
+@@ -151,7 +154,7 @@
+     {
+       pop_index--;
+       if (pop_index < 0)
+-	pop_index = ibuffer_len - 1;
++	pop_index = ibuffer_len;
+       ibuffer[pop_index] = key;
+       return (1);
+     }
+@@ -250,7 +253,8 @@
+       while (chars_avail--)
+ 	{
+ 	  k = (*rl_getc_function) (rl_instream);
+-	  rl_stuff_char (k);
++	  if (rl_stuff_char (k) == 0)
++	    break;			/* some problem; no more room */
+ 	  if (k == NEWLINE || k == RETURN)
+ 	    break;
+ 	}
+@@ -373,7 +377,11 @@
+       RL_SETSTATE (RL_STATE_INPUTPENDING);
+     }
+   ibuffer[push_index++] = key;
++#if 0
+   if (push_index >= ibuffer_len)
++#else
++  if (push_index > ibuffer_len)
++#endif
+     push_index = 0;
+ 
+   return 1;
+@@ -513,20 +521,26 @@
+      char *mbchar;
+      int size;
+ {
+-  int mb_len = 0;
++  int mb_len, c;
+   size_t mbchar_bytes_length;
+   wchar_t wc;
+   mbstate_t ps, ps_back;
+ 
+   memset(&ps, 0, sizeof (mbstate_t));
+   memset(&ps_back, 0, sizeof (mbstate_t));
+-  
++
++  mb_len = 0;  
+   while (mb_len < size)
+     {
+       RL_SETSTATE(RL_STATE_MOREINPUT);
+-      mbchar[mb_len++] = rl_read_key ();
++      c = rl_read_key ();
+       RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ 
++      if (c < 0)
++	break;
++
++      mbchar[mb_len++] = c;
++
+       mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps);
+       if (mbchar_bytes_length == (size_t)(-1))
+ 	break;		/* invalid byte sequence for the current locale */
+@@ -564,7 +578,7 @@
+ 
+   c = first;
+   memset (mb, 0, mlen);
+-  for (i = 0; i < mlen; i++)
++  for (i = 0; c >= 0 && i < mlen; i++)
+     {
+       mb[i] = (char)c;
+       memset (&ps, 0, sizeof (mbstate_t));
+diff -Naur readline-5.2.orig/isearch.c readline-5.2/isearch.c
+--- readline-5.2.orig/isearch.c	2005-12-26 22:18:53.000000000 +0000
++++ readline-5.2/isearch.c	2007-12-22 09:42:33.000000000 +0000
+@@ -327,8 +327,15 @@
+   rl_command_func_t *f;
+ 
+   f = (rl_command_func_t *)NULL;
+- 
+- /* Translate the keys we do something with to opcodes. */
++
++  if (c < 0)
++    {
++      cxt->sflags |= SF_FAILED;
++      cxt->history_pos = cxt->last_found_line;
++      return -1;
++    }
++
++  /* Translate the keys we do something with to opcodes. */
+   if (c >= 0 && _rl_keymap[c].type == ISFUNC)
+     {
+       f = _rl_keymap[c].function;
+diff -Naur readline-5.2.orig/misc.c readline-5.2/misc.c
+--- readline-5.2.orig/misc.c	2005-12-26 22:20:46.000000000 +0000
++++ readline-5.2/misc.c	2007-12-22 09:42:33.000000000 +0000
+@@ -146,6 +146,8 @@
+ 	  rl_restore_prompt ();
+ 	  rl_clear_message ();
+ 	  RL_UNSETSTATE(RL_STATE_NUMERICARG);
++	  if (key < 0)
++	    return -1;
+ 	  return (_rl_dispatch (key, _rl_keymap));
+ 	}
+     }
+diff -Naur readline-5.2.orig/readline.c readline-5.2/readline.c
+--- readline-5.2.orig/readline.c	2006-08-16 19:00:36.000000000 +0000
++++ readline-5.2/readline.c	2007-12-22 09:42:33.000000000 +0000
+@@ -645,6 +645,11 @@
+   if ((cxt->flags & KSEQ_DISPATCHED) == 0)
+     {
+       nkey = _rl_subseq_getchar (cxt->okey);
++      if (nkey < 0)
++	{
++	  _rl_abort_internal ();
++	  return -1;
++	}
+       r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg);
+       cxt->flags |= KSEQ_DISPATCHED;
+     }
+diff -Naur readline-5.2.orig/support/shobj-conf readline-5.2/support/shobj-conf
+--- readline-5.2.orig/support/shobj-conf	2006-04-11 13:15:43.000000000 +0000
++++ readline-5.2/support/shobj-conf	2007-12-22 09:42:33.000000000 +0000
+@@ -10,7 +10,7 @@
+ # Chet Ramey
+ # chet@po.cwru.edu
+ 
+-# Copyright (C) 1996-2002 Free Software Foundation, Inc.
++# Copyright (C) 1996-2007 Free Software Foundation, Inc.
+ #
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -114,7 +114,7 @@
+ 	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
+ 	;;
+ 
+-freebsd2* | netbsd*)
++freebsd2*)
+ 	SHOBJ_CFLAGS=-fpic
+ 	SHOBJ_LD=ld
+ 	SHOBJ_LDFLAGS='-x -Bshareable'
+@@ -125,7 +125,7 @@
+ 
+ # FreeBSD-3.x ELF
+ freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*)
+-	SHOBJ_CFLAGS=-fpic
++	SHOBJ_CFLAGS=-fPIC
+ 	SHOBJ_LD='${CC}'
+ 
+ 	if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then
+@@ -142,7 +142,7 @@
+ 	;;
+ 
+ # Darwin/MacOS X
+-darwin8*)
++darwin[89]*)
+ 	SHOBJ_STATUS=supported
+ 	SHLIB_STATUS=supported
+ 	
+@@ -153,7 +153,7 @@
+ 	SHLIB_LIBVERSION='$(SHLIB_MAJOR)$(SHLIB_MINOR).$(SHLIB_LIBSUFF)'
+ 	SHLIB_LIBSUFF='dylib'
+ 
+-	SHOBJ_LDFLAGS='-undefined dynamic_lookup'
++	SHOBJ_LDFLAGS='-dynamiclib -dynamic -undefined dynamic_lookup -arch_only `/usr/bin/arch`'
+ 	SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
+ 
+ 	SHLIB_LIBS='-lncurses'	# see if -lcurses works on MacOS X 10.1 
+@@ -171,7 +171,7 @@
+ 	SHLIB_LIBSUFF='dylib'
+ 
+ 	case "${host_os}" in
+-	darwin[78]*)	SHOBJ_LDFLAGS=''
++	darwin[789]*)	SHOBJ_LDFLAGS=''
+ 			SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
+ 			;;
+ 	*)		SHOBJ_LDFLAGS='-dynamic'
+@@ -182,7 +182,7 @@
+ 	SHLIB_LIBS='-lncurses'	# see if -lcurses works on MacOS X 10.1 
+ 	;;
+ 
+-openbsd*)
++openbsd*|netbsd*)
+ 	SHOBJ_CFLAGS=-fPIC
+ 	SHOBJ_LD='${CC}'
+ 	SHOBJ_LDFLAGS='-shared'
+@@ -247,7 +247,7 @@
+ 	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
+ 	;;
+ 
+-aix4.[2-9]*-*gcc*)		# lightly tested by jik@cisco.com
++aix4.[2-9]*-*gcc*|aix[5-9].*-*gcc*)		# lightly tested by jik@cisco.com
+ 	SHOBJ_CFLAGS=-fpic
+ 	SHOBJ_LD='ld'
+ 	SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall'
+@@ -258,7 +258,7 @@
+ 	SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
+ 	;;
+ 
+-aix4.[2-9]*)
++aix4.[2-9]*|aix[5-9].*)
+ 	SHOBJ_CFLAGS=-K
+ 	SHOBJ_LD='ld'
+ 	SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall'
+@@ -329,7 +329,7 @@
+ 	SHOBJ_LD='${CC}'
+ 	# if you have problems linking here, moving the `-Wl,+h,$@' from
+ 	# SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work
+-	SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s'
++	SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s'
+ 
+ 	SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)'
+ 	SHLIB_LIBSUFF='sl'
+diff -Naur readline-5.2.orig/text.c readline-5.2/text.c
+--- readline-5.2.orig/text.c	2006-07-28 15:55:27.000000000 +0000
++++ readline-5.2/text.c	2007-12-22 09:42:33.000000000 +0000
+@@ -857,6 +857,9 @@
+   c = rl_read_key ();
+   RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ 
++  if (c < 0)
++    return -1;
++
+ #if defined (HANDLE_SIGNALS)
+   if (RL_ISSTATE (RL_STATE_CALLBACK) == 0)
+     _rl_restore_tty_signals ();
+@@ -1520,6 +1523,9 @@
+ 
+   mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX);
+ 
++  if (mb_len <= 0)
++    return -1;
++
+   if (count < 0)
+     return (_rl_char_search_internal (-count, bdir, mbchar, mb_len));
+   else
+@@ -1536,6 +1542,9 @@
+   c = rl_read_key ();
+   RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ 
++  if (c < 0)
++    return -1;
++
+   if (count < 0)
+     return (_rl_char_search_internal (-count, bdir, c));
+   else
+diff -Naur readline-5.2.orig/vi_mode.c readline-5.2/vi_mode.c
+--- readline-5.2.orig/vi_mode.c	2006-07-29 20:42:28.000000000 +0000
++++ readline-5.2/vi_mode.c	2007-12-22 09:42:33.000000000 +0000
+@@ -886,6 +886,13 @@
+   RL_SETSTATE(RL_STATE_MOREINPUT);
+   c = rl_read_key ();
+   RL_UNSETSTATE(RL_STATE_MOREINPUT);
++
++  if (c < 0)
++    {
++      *nextkey = 0;
++      return -1;
++    }
++
+   *nextkey = c;
+ 
+   if (!member (c, vi_motion))
+@@ -902,6 +909,11 @@
+ 	  RL_SETSTATE(RL_STATE_MOREINPUT);
+ 	  c = rl_read_key ();	/* real command */
+ 	  RL_UNSETSTATE(RL_STATE_MOREINPUT);
++	  if (c < 0)
++	    {
++	      *nextkey = 0;
++	      return -1;
++	    }
+ 	  *nextkey = c;
+ 	}
+       else if (key == c && (key == 'd' || key == 'y' || key == 'c'))
+@@ -1224,14 +1236,22 @@
+ _rl_vi_callback_char_search (data)
+      _rl_callback_generic_arg *data;
+ {
++  int c;
+ #if defined (HANDLE_MULTIBYTE)
+-  _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
++  c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
+ #else
+   RL_SETSTATE(RL_STATE_MOREINPUT);
+-  _rl_vi_last_search_char = rl_read_key ();
++  c = rl_read_key ();
+   RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ #endif
+ 
++  if (c <= 0)
++    return -1;
++
++#if !defined (HANDLE_MULTIBYTE)
++  _rl_vi_last_search_char = c;
++#endif
++
+   _rl_callback_func = 0;
+   _rl_want_redisplay = 1;
+ 
+@@ -1247,6 +1267,7 @@
+ rl_vi_char_search (count, key)
+      int count, key;
+ {
++  int c;
+ #if defined (HANDLE_MULTIBYTE)
+   static char *target;
+   static int tlen;
+@@ -1293,11 +1314,17 @@
+       else
+ 	{
+ #if defined (HANDLE_MULTIBYTE)
+-	  _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
++	  c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
++	  if (c <= 0)
++	    return -1;
++	  _rl_vi_last_search_mblen = c;
+ #else
+ 	  RL_SETSTATE(RL_STATE_MOREINPUT);
+-	  _rl_vi_last_search_char = rl_read_key ();
++	  c = rl_read_key ();
+ 	  RL_UNSETSTATE(RL_STATE_MOREINPUT);
++	  if (c < 0)
++	    return -1;
++	  _rl_vi_last_search_char = c;
+ #endif
+ 	}
+     }
+@@ -1467,6 +1494,9 @@
+   c = rl_read_key ();
+   RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ 
++  if (c < 0)
++    return -1;
++
+ #if defined (HANDLE_MULTIBYTE)
+   if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+     c = _rl_read_mbstring (c, mb, mlen);
+@@ -1485,6 +1515,9 @@
+ 
+   _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
+ 
++  if (c < 0)
++    return -1;
++
+   _rl_callback_func = 0;
+   _rl_want_redisplay = 1;
+ 
+@@ -1516,6 +1549,9 @@
+   else
+     _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
+ 
++  if (c < 0)
++    return -1;
++
+   return (_rl_vi_change_char (count, c, mb));
+ }
+ 
+@@ -1650,7 +1686,7 @@
+   ch = rl_read_key ();
+   RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ 
+-  if (ch < 'a' || ch > 'z')
++  if (ch < 0 || ch < 'a' || ch > 'z')	/* make test against 0 explicit */
+     {
+       rl_ding ();
+       return -1;
+@@ -1702,7 +1738,7 @@
+       rl_point = rl_mark;
+       return 0;
+     }
+-  else if (ch < 'a' || ch > 'z')
++  else if (ch < 0 || ch < 'a' || ch > 'z')	/* make test against 0 explicit */
+     {
+       rl_ding ();
+       return -1;
