diff options
Diffstat (limited to 'common')
| -rw-r--r-- | common/main.c | 33 | 
1 files changed, 23 insertions, 10 deletions
| diff --git a/common/main.c b/common/main.c index 21e7afab6..a17b60b3a 100644 --- a/common/main.c +++ b/common/main.c @@ -40,7 +40,7 @@  #include <post.h> -#if defined(CONFIG_SILENT_CONSOLE) || defined(CONFIG_POST) +#if defined(CONFIG_SILENT_CONSOLE) || defined(CONFIG_POST) || defined(CONFIG_CMDLINE_EDITING)  DECLARE_GLOBAL_DATA_PTR;  #endif @@ -67,11 +67,9 @@ static int abortboot(int);  char        console_buffer[CFG_CBSIZE];		/* console I/O buffer	*/ -#ifndef CONFIG_CMDLINE_EDITING  static char * delete_char (char *buffer, char *p, int *colp, int *np, int plen);  static char erase_seq[] = "\b \b";		/* erase sequence	*/  static char   tab_seq[] = "        ";		/* used to expand TABs	*/ -#endif /* CONFIG_CMDLINE_EDITING */  #ifdef CONFIG_BOOT_RETRY_TIME  static uint64_t endtime = 0;  /* must be set, default is instant timeout */ @@ -947,11 +945,26 @@ int readline_into_buffer (const char *const prompt, char * buffer)  		initted = 1;  	} -	puts (prompt); -	rc = cread_line(prompt, p, &len); -	return rc < 0 ? rc : len; -#else +	/* +	 * 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; +		} + +		puts (prompt); + +		rc = cread_line(prompt, p, &len); +		return rc < 0 ? rc : len; + +	} else { +#endif	/* CONFIG_CMDLINE_EDITING */  	char * p_buf = p;  	int	n = 0;				/* buffer index		*/  	int	plen = 0;			/* prompt length	*/ @@ -1047,12 +1060,13 @@ int readline_into_buffer (const char *const prompt, char * buffer)  			}  		}  	} -#endif /* CONFIG_CMDLINE_EDITING */ +#ifdef CONFIG_CMDLINE_EDITING +	} +#endif  }  /****************************************************************************/ -#ifndef CONFIG_CMDLINE_EDITING  static char * delete_char (char *buffer, char *p, int *colp, int *np, int plen)  {  	char *s; @@ -1082,7 +1096,6 @@ static char * delete_char (char *buffer, char *p, int *colp, int *np, int plen)  	(*np)--;  	return (p);  } -#endif /* CONFIG_CMDLINE_EDITING */  /****************************************************************************/ |