Patchwork [U-Boot,RFC,v2,11/15] main: Use autoconf in command line reading

login
register
mail settings
Submitter Simon Glass
Date Feb. 24, 2013, 5:26 p.m.
Message ID <1361726773-18639-12-git-send-email-sjg@chromium.org>
Download mbox | patch
Permalink /patch/222789/
State Superseded, archived
Headers show

Comments

Simon Glass - Feb. 24, 2013, 5:26 p.m.
Remove #ifdefs in favour of autoconf for this code. This involves removing
a few unnecessary #ifdefs in headers also.

We have two versions of the code - one that handles command line editing and
one that is just a simple implementation. Create a new function called
readline_into_buffer() which calls either cread_line() or the new
simple_readline(), created to hold the 'simple' code.

The cread_print_hist_list() function is not actually used anywhere, so punt
it.

Signed-off-by: Simon Glass <sjg@chromium.org>
---
Changes in v2: None

 common/main.c     | 186 ++++++++++++++++++++++++------------------------------
 include/command.h |   2 -
 include/common.h  |   2 -
 3 files changed, 84 insertions(+), 106 deletions(-)
Joe Hershberger - Feb. 24, 2013, 8:56 p.m.
Hi Simon,

On Sun, Feb 24, 2013 at 11:26 AM, Simon Glass <sjg@chromium.org> wrote:
> Remove #ifdefs in favour of autoconf for this code. This involves removing
> a few unnecessary #ifdefs in headers also.
>
> We have two versions of the code - one that handles command line editing and
> one that is just a simple implementation. Create a new function called
> readline_into_buffer() which calls either cread_line() or the new
> simple_readline(), created to hold the 'simple' code.
>
> The cread_print_hist_list() function is not actually used anywhere, so punt
> it.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
> Changes in v2: None
>
>  common/main.c     | 186 ++++++++++++++++++++++++------------------------------
>  include/command.h |   2 -
>  include/common.h  |   2 -
>  3 files changed, 84 insertions(+), 106 deletions(-)
>
> diff --git a/common/main.c b/common/main.c
> index e1483db..3966321 100644
> --- a/common/main.c
> +++ b/common/main.c
> @@ -514,8 +514,6 @@ void reset_cmd_timeout(void)
>  }
>  #endif
>
> -#ifdef CONFIG_CMDLINE_EDITING
> -
>  /*
>   * cmdline-editing related codes from vivi.
>   * Author: Janghoon Lyu <nandy@mizi.com>
> @@ -618,27 +616,6 @@ static char* hist_next(void)
>         return (ret);
>  }
>
> -#ifndef CONFIG_CMDLINE_EDITING
> -static void cread_print_hist_list(void)
> -{
> -       int i;
> -       unsigned long n;
> -
> -       n = hist_num - hist_max;
> -
> -       i = hist_add_idx + 1;
> -       while (1) {
> -               if (i > hist_max)
> -                       i = 0;
> -               if (i == hist_add_idx)
> -                       break;
> -               printf("%s\n", hist_list[i]);
> -               n++;
> -               i++;
> -       }
> -}
> -#endif /* CONFIG_CMDLINE_EDITING */
> -
>  #define BEGINNING_OF_LINE() {                  \
>         while (num) {                           \
>                 getcmd_putch(CTL_BACKSPACE);    \
> @@ -900,27 +877,27 @@ static int cread_line(const char *const prompt, char *buf, unsigned int *len,
>                         REFRESH_TO_EOL();
>                         continue;
>                 }
> -#ifdef CONFIG_AUTO_COMPLETE
> -               case '\t': {
> -                       int num2, col;
> +               case '\t':
> +                       if (autoconf_auto_complete()) {
> +                               int num2, col;
>
> -                       /* do not autocomplete when in the middle */
> -                       if (num < eol_num) {
> -                               getcmd_cbeep();
> -                               break;
> -                       }
> +                               /* do not autocomplete when in the middle */
> +                               if (num < eol_num) {
> +                                       getcmd_cbeep();
> +                                       break;
> +                               }
>
> -                       buf[num] = '\0';
> -                       col = strlen(prompt) + eol_num;
> -                       num2 = num;
> -                       if (cmd_auto_complete(prompt, buf, &num2, &col)) {
> -                               col = num2 - num;
> -                               num += col;
> -                               eol_num += col;
> +                               buf[num] = '\0';
> +                               col = strlen(prompt) + eol_num;
> +                               num2 = num;
> +                               if (cmd_auto_complete(prompt, buf, &num2,
> +                                               &col)) {
> +                                       col = num2 - num;
> +                                       num += col;
> +                                       eol_num += col;
> +                               }
> +                               break;
>                         }
> -                       break;
> -               }
> -#endif
>                 default:
>                         cread_add_char(ichar, insert, &num, &eol_num, buf, *len);
>                         break;
> @@ -936,8 +913,6 @@ static int cread_line(const char *const prompt, char *buf, unsigned int *len,
>         return 0;
>  }
>
> -#endif /* CONFIG_CMDLINE_EDITING */
> -
>  /****************************************************************************/
>
>  /*
> @@ -959,46 +934,14 @@ int readline (const char *const prompt)
>         return readline_into_buffer(prompt, console_buffer, 0);
>  }
>
> -
> -int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
> +static int simple_readline(const char *const prompt, int plen, char *p,
> +                          int timeout)
>  {
> -       char *p = buffer;
> -#ifdef CONFIG_CMDLINE_EDITING
> -       unsigned int len = CONFIG_SYS_CBSIZE;
> -       int rc;
> -       static int initted = 0;
> -
> -       /*
> -        * History uses a global array which is not
> -        * writable until after relocation to RAM.
> -        * Revert to non-history version if still
> -        * running from flash.
> -        */
> -       if (gd->flags & GD_FLG_RELOC) {
> -               if (!initted) {
> -                       hist_init();
> -                       initted = 1;
> -               }
> -
> -               if (prompt)
> -                       puts (prompt);
> -
> -               rc = cread_line(prompt, p, &len, timeout);
> -               return rc < 0 ? rc : len;
> -
> -       } else {
> -#endif /* CONFIG_CMDLINE_EDITING */
>         char * p_buf = p;
>         int     n = 0;                          /* buffer index         */
> -       int     plen = 0;                       /* prompt length        */
>         int     col;                            /* output column cnt    */
>         char    c;
>
> -       /* print prompt */
> -       if (prompt) {
> -               plen = strlen (prompt);
> -               puts (prompt);
> -       }
>         col = plen;
>
>         for (;;) {
> @@ -1011,32 +954,32 @@ int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
>                 }
>                 WATCHDOG_RESET();       /* Trigger watchdog, if needed */
>
> -#ifdef CONFIG_SHOW_ACTIVITY
> -               while (!tstc()) {
> -                       show_activity(0);
> -                       WATCHDOG_RESET();
> +               if (autoconf_show_activity()) {
> +                       while (!tstc()) {
> +                               show_activity(0);
> +                               WATCHDOG_RESET();
> +                       }
>                 }
> -#endif
>                 c = getc();
>

It would be great if you separated the following unrelated formatting
changes into a separate patch.

>                 /*
>                  * Special character handling
>                  */
>                 switch (c) {
> -               case '\r':                              /* Enter                */
> +               case '\r':                      /* Enter                */
>                 case '\n':
>                         *p = '\0';
>                         puts ("\r\n");
> -                       return (p - p_buf);
> +                       return p - p_buf;
>
> -               case '\0':                              /* nul                  */
> +               case '\0':                      /* nul                  */
>                         continue;
>
> -               case 0x03:                              /* ^C - break           */
> +               case 0x03:                      /* ^C - break           */
>                         p_buf[0] = '\0';        /* discard input */
> -                       return (-1);
> +                       return -1;
>
> -               case 0x15:                              /* ^U - erase line      */
> +               case 0x15:                      /* ^U - erase line      */
>                         while (col > plen) {
>                                 puts (erase_seq);
>                                 --col;
> @@ -1045,15 +988,15 @@ int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
>                         n = 0;
>                         continue;
>
> -               case 0x17:                              /* ^W - erase word      */
> +               case 0x17:                      /* ^W - erase word      */
>                         p=delete_char(p_buf, p, &col, &n, plen);
>                         while ((n > 0) && (*p != ' ')) {
>                                 p=delete_char(p_buf, p, &col, &n, plen);
>                         }
>                         continue;
>
> -               case 0x08:                              /* ^H  - backspace      */
> -               case 0x7F:                              /* DEL - backspace      */
> +               case 0x08:                      /* ^H  - backspace      */
> +               case 0x7F:                      /* DEL - backspace      */
>                         p=delete_char(p_buf, p, &col, &n, plen);
>                         continue;
>
> @@ -1062,22 +1005,28 @@ int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
>                          * Must be a normal character then
>                          */
>                         if (n < CONFIG_SYS_CBSIZE-2) {
> -                               if (c == '\t') {        /* expand TABs          */
> -#ifdef CONFIG_AUTO_COMPLETE
> -                                       /* if auto completion triggered just continue */
> -                                       *p = '\0';
> -                                       if (cmd_auto_complete(prompt, console_buffer, &n, &col)) {
> -                                               p = p_buf + n;  /* reset */
> -                                               continue;
> +                               if (c == '\t') {        /* expand TABs */
> +                                       if (autoconf_auto_complete()) {
> +                                               /*
> +                                                * if auto completion triggered
> +                                                * just continue
> +                                                */
> +                                               *p = '\0';
> +                                               if (cmd_auto_complete(prompt,
> +                                                               console_buffer,
> +                                                               &n, &col)) {
> +                                                       /* reset */
> +                                                       p = p_buf + n;
> +                                                       continue;
> +                                               }
>                                         }
> -#endif
>                                         puts (tab_seq+(col&07));
>                                         col += 8 - (col&07);
>                                 } else {
>                                         char buf[2];
>
>                                         /*
> -                                        * Echo input using puts() to force am
> +                                        * Echo input using puts() to force an
>                                          * LCD flush if we are using an LCD
>                                          */
>                                         ++col;
> @@ -1092,9 +1041,42 @@ int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
>                         }
>                 }
>         }
> -#ifdef CONFIG_CMDLINE_EDITING
> +}
> +
> +int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
> +{
> +       unsigned int len = CONFIG_SYS_CBSIZE;
> +       int rc;
> +       static int initted;
> +
> +       /*
> +        * History uses a global array which is not
> +        * writable until after relocation to RAM.
> +        * Revert to non-history version if still
> +        * running from flash.
> +        */
> +       if (autoconf_cmdline_editing() && (gd->flags & GD_FLG_RELOC)) {
> +               if (!initted) {
> +                       hist_init();
> +                       initted = 1;
> +               }
> +
> +               if (prompt)
> +                       puts(prompt);
> +
> +               rc = cread_line(prompt, buffer, &len, timeout);
> +               return rc < 0 ? rc : len;
> +
> +       } else {
> +               int plen = 0;                   /* prompt length */
> +
> +               /* print prompt */
> +               if (prompt) {
> +                       plen = strlen(prompt);
> +                       puts(prompt);
> +               }
> +               return simple_readline(prompt, plen, buffer, timeout);
>         }
> -#endif
>  }
>
>  /****************************************************************************/
> diff --git a/include/command.h b/include/command.h
> index 3785eb9..80da938 100644
> --- a/include/command.h
> +++ b/include/command.h
> @@ -75,10 +75,8 @@ cmd_tbl_t *find_cmd_tbl (const char *cmd, cmd_tbl_t *table, int table_len);
>
>  extern int cmd_usage(const cmd_tbl_t *cmdtp);
>
> -#ifdef CONFIG_AUTO_COMPLETE
>  extern int var_complete(int argc, char * const argv[], char last_char, int maxv, char *cmdv[]);
>  extern int cmd_auto_complete(const char *const prompt, char *buf, int *np, int *colp);
> -#endif
>
>  /*
>   * Monitor Command
> diff --git a/include/common.h b/include/common.h
> index fb219fd..1457349 100644
> --- a/include/common.h
> +++ b/include/common.h
> @@ -857,9 +857,7 @@ int pcmcia_init (void);
>
>  #include <bootstage.h>
>
> -#ifdef CONFIG_SHOW_ACTIVITY
>  void show_activity(int arg);
> -#endif
>
>  /* Multicore arch functions */
>  #ifdef CONFIG_MP
> --
> 1.8.1.3
>
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot

Reviewed-by: Joe Hershberger <joe.hershberger@ni.com>
Simon Glass - Feb. 26, 2013, 5:46 a.m.
Hi Joe,

On Sun, Feb 24, 2013 at 12:56 PM, Joe Hershberger
<joe.hershberger@gmail.com> wrote:
> Hi Simon,
>
> On Sun, Feb 24, 2013 at 11:26 AM, Simon Glass <sjg@chromium.org> wrote:
>> Remove #ifdefs in favour of autoconf for this code. This involves removing
>> a few unnecessary #ifdefs in headers also.
>>
>> We have two versions of the code - one that handles command line editing and
>> one that is just a simple implementation. Create a new function called
>> readline_into_buffer() which calls either cread_line() or the new
>> simple_readline(), created to hold the 'simple' code.
>>
>> The cread_print_hist_list() function is not actually used anywhere, so punt
>> it.
>>
>> Signed-off-by: Simon Glass <sjg@chromium.org>
>> ---
>> Changes in v2: None
>>
>>  common/main.c     | 186 ++++++++++++++++++++++++------------------------------
>>  include/command.h |   2 -
>>  include/common.h  |   2 -
>>  3 files changed, 84 insertions(+), 106 deletions(-)
>>
>> diff --git a/common/main.c b/common/main.c
>> index e1483db..3966321 100644
>> --- a/common/main.c
>> +++ b/common/main.c
[snip]

>
> It would be great if you separated the following unrelated formatting
> changes into a separate patch.

OK, will do.

>
>>                 /*
>>                  * Special character handling
>>                  */
>>                 switch (c) {
>> -               case '\r':                              /* Enter                */
>> +               case '\r':                      /* Enter                */
>>                 case '\n':
>>                         *p = '\0';
>>                         puts ("\r\n");
>> -                       return (p - p_buf);
>> +                       return p - p_buf;
>>
>> -               case '\0':                              /* nul                  */
>> +               case '\0':                      /* nul                  */
>>                         continue;
>>
>> -               case 0x03:                              /* ^C - break           */
>> +               case 0x03:                      /* ^C - break           */
>>                         p_buf[0] = '\0';        /* discard input */
>> -                       return (-1);
>> +                       return -1;
>>
>> -               case 0x15:                              /* ^U - erase line      */
>> +               case 0x15:                      /* ^U - erase line      */
>>                         while (col > plen) {
>>                                 puts (erase_seq);
>>                                 --col;
>> @@ -1045,15 +988,15 @@ int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
>>                         n = 0;
>>                         continue;
>>
>> -               case 0x17:                              /* ^W - erase word      */
>> +               case 0x17:                      /* ^W - erase word      */
>>                         p=delete_char(p_buf, p, &col, &n, plen);
>>                         while ((n > 0) && (*p != ' ')) {
>>                                 p=delete_char(p_buf, p, &col, &n, plen);
>>                         }
>>                         continue;
>>
>> -               case 0x08:                              /* ^H  - backspace      */
>> -               case 0x7F:                              /* DEL - backspace      */
>> +               case 0x08:                      /* ^H  - backspace      */
>> +               case 0x7F:                      /* DEL - backspace      */
>>                         p=delete_char(p_buf, p, &col, &n, plen);
>>                         continue;
>>
>> @@ -1062,22 +1005,28 @@ int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
>>                          * Must be a normal character then
>>                          */
>>                         if (n < CONFIG_SYS_CBSIZE-2) {
>> -                               if (c == '\t') {        /* expand TABs          */
>> -#ifdef CONFIG_AUTO_COMPLETE
>> -                                       /* if auto completion triggered just continue */
>> -                                       *p = '\0';
>> -                                       if (cmd_auto_complete(prompt, console_buffer, &n, &col)) {
>> -                                               p = p_buf + n;  /* reset */
>> -                                               continue;
>> +                               if (c == '\t') {        /* expand TABs */
>> +                                       if (autoconf_auto_complete()) {
>> +                                               /*
>> +                                                * if auto completion triggered
>> +                                                * just continue
>> +                                                */
>> +                                               *p = '\0';
>> +                                               if (cmd_auto_complete(prompt,
>> +                                                               console_buffer,
>> +                                                               &n, &col)) {
>> +                                                       /* reset */
>> +                                                       p = p_buf + n;
>> +                                                       continue;
>> +                                               }
>>                                         }
>> -#endif
>>                                         puts (tab_seq+(col&07));
>>                                         col += 8 - (col&07);
>>                                 } else {
>>                                         char buf[2];
>>
>>                                         /*
>> -                                        * Echo input using puts() to force am
>> +                                        * Echo input using puts() to force an
>>                                          * LCD flush if we are using an LCD
>>                                          */
>>                                         ++col;
[snip]

Regards,
Simon

Patch

diff --git a/common/main.c b/common/main.c
index e1483db..3966321 100644
--- a/common/main.c
+++ b/common/main.c
@@ -514,8 +514,6 @@  void reset_cmd_timeout(void)
 }
 #endif
 
-#ifdef CONFIG_CMDLINE_EDITING
-
 /*
  * cmdline-editing related codes from vivi.
  * Author: Janghoon Lyu <nandy@mizi.com>
@@ -618,27 +616,6 @@  static char* hist_next(void)
 	return (ret);
 }
 
-#ifndef CONFIG_CMDLINE_EDITING
-static void cread_print_hist_list(void)
-{
-	int i;
-	unsigned long n;
-
-	n = hist_num - hist_max;
-
-	i = hist_add_idx + 1;
-	while (1) {
-		if (i > hist_max)
-			i = 0;
-		if (i == hist_add_idx)
-			break;
-		printf("%s\n", hist_list[i]);
-		n++;
-		i++;
-	}
-}
-#endif /* CONFIG_CMDLINE_EDITING */
-
 #define BEGINNING_OF_LINE() {			\
 	while (num) {				\
 		getcmd_putch(CTL_BACKSPACE);	\
@@ -900,27 +877,27 @@  static int cread_line(const char *const prompt, char *buf, unsigned int *len,
 			REFRESH_TO_EOL();
 			continue;
 		}
-#ifdef CONFIG_AUTO_COMPLETE
-		case '\t': {
-			int num2, col;
+		case '\t':
+			if (autoconf_auto_complete()) {
+				int num2, col;
 
-			/* do not autocomplete when in the middle */
-			if (num < eol_num) {
-				getcmd_cbeep();
-				break;
-			}
+				/* do not autocomplete when in the middle */
+				if (num < eol_num) {
+					getcmd_cbeep();
+					break;
+				}
 
-			buf[num] = '\0';
-			col = strlen(prompt) + eol_num;
-			num2 = num;
-			if (cmd_auto_complete(prompt, buf, &num2, &col)) {
-				col = num2 - num;
-				num += col;
-				eol_num += col;
+				buf[num] = '\0';
+				col = strlen(prompt) + eol_num;
+				num2 = num;
+				if (cmd_auto_complete(prompt, buf, &num2,
+						&col)) {
+					col = num2 - num;
+					num += col;
+					eol_num += col;
+				}
+				break;
 			}
-			break;
-		}
-#endif
 		default:
 			cread_add_char(ichar, insert, &num, &eol_num, buf, *len);
 			break;
@@ -936,8 +913,6 @@  static int cread_line(const char *const prompt, char *buf, unsigned int *len,
 	return 0;
 }
 
-#endif /* CONFIG_CMDLINE_EDITING */
-
 /****************************************************************************/
 
 /*
@@ -959,46 +934,14 @@  int readline (const char *const prompt)
 	return readline_into_buffer(prompt, console_buffer, 0);
 }
 
-
-int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
+static int simple_readline(const char *const prompt, int plen, char *p,
+			   int timeout)
 {
-	char *p = buffer;
-#ifdef CONFIG_CMDLINE_EDITING
-	unsigned int len = CONFIG_SYS_CBSIZE;
-	int rc;
-	static int initted = 0;
-
-	/*
-	 * History uses a global array which is not
-	 * writable until after relocation to RAM.
-	 * Revert to non-history version if still
-	 * running from flash.
-	 */
-	if (gd->flags & GD_FLG_RELOC) {
-		if (!initted) {
-			hist_init();
-			initted = 1;
-		}
-
-		if (prompt)
-			puts (prompt);
-
-		rc = cread_line(prompt, p, &len, timeout);
-		return rc < 0 ? rc : len;
-
-	} else {
-#endif	/* CONFIG_CMDLINE_EDITING */
 	char * p_buf = p;
 	int	n = 0;				/* buffer index		*/
-	int	plen = 0;			/* prompt length	*/
 	int	col;				/* output column cnt	*/
 	char	c;
 
-	/* print prompt */
-	if (prompt) {
-		plen = strlen (prompt);
-		puts (prompt);
-	}
 	col = plen;
 
 	for (;;) {
@@ -1011,32 +954,32 @@  int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
 		}
 		WATCHDOG_RESET();	/* Trigger watchdog, if needed */
 
-#ifdef CONFIG_SHOW_ACTIVITY
-		while (!tstc()) {
-			show_activity(0);
-			WATCHDOG_RESET();
+		if (autoconf_show_activity()) {
+			while (!tstc()) {
+				show_activity(0);
+				WATCHDOG_RESET();
+			}
 		}
-#endif
 		c = getc();
 
 		/*
 		 * Special character handling
 		 */
 		switch (c) {
-		case '\r':				/* Enter		*/
+		case '\r':			/* Enter		*/
 		case '\n':
 			*p = '\0';
 			puts ("\r\n");
-			return (p - p_buf);
+			return p - p_buf;
 
-		case '\0':				/* nul			*/
+		case '\0':			/* nul			*/
 			continue;
 
-		case 0x03:				/* ^C - break		*/
+		case 0x03:			/* ^C - break		*/
 			p_buf[0] = '\0';	/* discard input */
-			return (-1);
+			return -1;
 
-		case 0x15:				/* ^U - erase line	*/
+		case 0x15:			/* ^U - erase line	*/
 			while (col > plen) {
 				puts (erase_seq);
 				--col;
@@ -1045,15 +988,15 @@  int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
 			n = 0;
 			continue;
 
-		case 0x17:				/* ^W - erase word	*/
+		case 0x17:			/* ^W - erase word	*/
 			p=delete_char(p_buf, p, &col, &n, plen);
 			while ((n > 0) && (*p != ' ')) {
 				p=delete_char(p_buf, p, &col, &n, plen);
 			}
 			continue;
 
-		case 0x08:				/* ^H  - backspace	*/
-		case 0x7F:				/* DEL - backspace	*/
+		case 0x08:			/* ^H  - backspace	*/
+		case 0x7F:			/* DEL - backspace	*/
 			p=delete_char(p_buf, p, &col, &n, plen);
 			continue;
 
@@ -1062,22 +1005,28 @@  int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
 			 * Must be a normal character then
 			 */
 			if (n < CONFIG_SYS_CBSIZE-2) {
-				if (c == '\t') {	/* expand TABs		*/
-#ifdef CONFIG_AUTO_COMPLETE
-					/* if auto completion triggered just continue */
-					*p = '\0';
-					if (cmd_auto_complete(prompt, console_buffer, &n, &col)) {
-						p = p_buf + n;	/* reset */
-						continue;
+				if (c == '\t') {	/* expand TABs */
+					if (autoconf_auto_complete()) {
+						/*
+						 * if auto completion triggered
+						 * just continue
+						 */
+						*p = '\0';
+						if (cmd_auto_complete(prompt,
+								console_buffer,
+								&n, &col)) {
+							/* reset */
+							p = p_buf + n;
+							continue;
+						}
 					}
-#endif
 					puts (tab_seq+(col&07));
 					col += 8 - (col&07);
 				} else {
 					char buf[2];
 
 					/*
-					 * Echo input using puts() to force am
+					 * Echo input using puts() to force an
 					 * LCD flush if we are using an LCD
 					 */
 					++col;
@@ -1092,9 +1041,42 @@  int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
 			}
 		}
 	}
-#ifdef CONFIG_CMDLINE_EDITING
+}
+
+int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
+{
+	unsigned int len = CONFIG_SYS_CBSIZE;
+	int rc;
+	static int initted;
+
+	/*
+	 * History uses a global array which is not
+	 * writable until after relocation to RAM.
+	 * Revert to non-history version if still
+	 * running from flash.
+	 */
+	if (autoconf_cmdline_editing() && (gd->flags & GD_FLG_RELOC)) {
+		if (!initted) {
+			hist_init();
+			initted = 1;
+		}
+
+		if (prompt)
+			puts(prompt);
+
+		rc = cread_line(prompt, buffer, &len, timeout);
+		return rc < 0 ? rc : len;
+
+	} else {
+		int plen = 0;			/* prompt length */
+
+		/* print prompt */
+		if (prompt) {
+			plen = strlen(prompt);
+			puts(prompt);
+		}
+		return simple_readline(prompt, plen, buffer, timeout);
 	}
-#endif
 }
 
 /****************************************************************************/
diff --git a/include/command.h b/include/command.h
index 3785eb9..80da938 100644
--- a/include/command.h
+++ b/include/command.h
@@ -75,10 +75,8 @@  cmd_tbl_t *find_cmd_tbl (const char *cmd, cmd_tbl_t *table, int table_len);
 
 extern int cmd_usage(const cmd_tbl_t *cmdtp);
 
-#ifdef CONFIG_AUTO_COMPLETE
 extern int var_complete(int argc, char * const argv[], char last_char, int maxv, char *cmdv[]);
 extern int cmd_auto_complete(const char *const prompt, char *buf, int *np, int *colp);
-#endif
 
 /*
  * Monitor Command
diff --git a/include/common.h b/include/common.h
index fb219fd..1457349 100644
--- a/include/common.h
+++ b/include/common.h
@@ -857,9 +857,7 @@  int	pcmcia_init (void);
 
 #include <bootstage.h>
 
-#ifdef CONFIG_SHOW_ACTIVITY
 void show_activity(int arg);
-#endif
 
 /* Multicore arch functions */
 #ifdef CONFIG_MP