Fix incorrect use of getenv() before relocation
A large number of boards incorrectly used getenv() in their board init
code running before relocation. In some cases this caused U-Boot to
hang when certain environment variables grew too long.
Fix the code to use getenv_r().
Signed-off-by: Wolfgang Denk <wd@denx.de>
Cc: Stefan Roese <sr@denx.de>
Cc: The LEOX team <team@leox.org>
Cc: Michael Schwingen <michael@schwingen.org>
Cc: Georg Schardt <schardt@team-ctech.de>
Cc: Werner Pfister <Pfister_Werner@intercontrol.de>
Cc: Dirk Eibach <eibach@gdsys.de>
Cc: Peter De Schrijver <p2@mind.be>
Cc: John Zhan <zhanz@sinovee.com>
Cc: Rishi Bhattacharya <rishi@ti.com>
Cc: Peter Tyser <ptyser@xes-inc.com>
diff --git a/board/svm_sc8xx/svm_sc8xx.c b/board/svm_sc8xx/svm_sc8xx.c
index 4390e49..f34b835 100644
--- a/board/svm_sc8xx/svm_sc8xx.c
+++ b/board/svm_sc8xx/svm_sc8xx.c
@@ -75,27 +75,29 @@
* Return 1 for "SC8xx" type, 0 else.
*/
-int checkboard (void)
+int checkboard(void)
{
- char *s = getenv("serial#");
- int board_type;
+ char buf[64];
+ int i;
+ int l = getenv_f("serial#", buf, sizeof(buf));
+ int board_type;
- if (!s || strncmp(s, "SVM8", 4)) {
- printf ("### No HW ID - assuming SVM SC8xx\n");
+ if (l < 0 || strncmp(buf, "SVM8", 4)) {
+ printf("### No HW ID - assuming SVM SC8xx\n");
+ return (0);
+ }
+
+ board_type = 1;
+
+ for (i = 0; i < l; ++i) {
+ if (buf[i] == ' ')
+ break;
+ putc(buf[i]);
+ }
+
+ putc('\n');
+
return (0);
- }
-
- board_type = 1;
-
- for (; *s; ++s) {
- if (*s == ' ')
- break;
- putc (*s);
- }
-
- putc ('\n');
-
- return (0);
}
/* ------------------------------------------------------------------------- */