diff options
author | Tom Rini <trini@ti.com> | 2014-03-28 12:03:33 -0400 |
---|---|---|
committer | Tom Rini <trini@ti.com> | 2014-04-17 14:39:54 -0400 |
commit | 229695fee97abc7f4adad92eb8e036792c144bc6 (patch) | |
tree | 657e523c702de883411eb65770f80be68e846ba8 | |
parent | 548a64d84561b109d45348afb4c854fd671eeedd (diff) | |
download | u-boot-imx-229695fee97abc7f4adad92eb8e036792c144bc6.zip u-boot-imx-229695fee97abc7f4adad92eb8e036792c144bc6.tar.gz u-boot-imx-229695fee97abc7f4adad92eb8e036792c144bc6.tar.bz2 |
fw_env.c: Switch get_config to use '%ms' in sscanf
We currently limit ourself to 16 characters for the device name to read
the environment from. This is insufficient for /dev/mmcblk0boot1 to
work for example. Switch to '%ms' which gives us a dynamically
allocated buffer instead. We're short lived enough to not bother
free()ing the buffer.
Signed-off-by: Tom Rini <trini@ti.com>
-rw-r--r-- | tools/env/fw_env.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c index d228cc3..f5cd521 100644 --- a/tools/env/fw_env.c +++ b/tools/env/fw_env.c @@ -40,7 +40,7 @@ _min1 < _min2 ? _min1 : _min2; }) struct envdev_s { - char devname[16]; /* Device name */ + const char *devname; /* Device name */ ulong devoff; /* Device offset */ ulong env_size; /* environment size */ ulong erase_size; /* device erase size */ @@ -1243,7 +1243,7 @@ static int parse_config () return -1; } #else - strcpy (DEVNAME (0), DEVICE1_NAME); + DEVNAME (0) = DEVICE1_NAME; DEVOFFSET (0) = DEVICE1_OFFSET; ENVSIZE (0) = ENV1_SIZE; /* Default values are: erase-size=env-size */ @@ -1258,7 +1258,7 @@ static int parse_config () #endif #ifdef HAVE_REDUND - strcpy (DEVNAME (1), DEVICE2_NAME); + DEVNAME (1) = DEVICE2_NAME; DEVOFFSET (1) = DEVICE2_OFFSET; ENVSIZE (1) = ENV2_SIZE; /* Default values are: erase-size=env-size */ @@ -1297,6 +1297,7 @@ static int get_config (char *fname) int i = 0; int rc; char dump[128]; + char *devname; fp = fopen (fname, "r"); if (fp == NULL) @@ -1307,8 +1308,8 @@ static int get_config (char *fname) if (dump[0] == '#') continue; - rc = sscanf (dump, "%s %lx %lx %lx %lx", - DEVNAME (i), + rc = sscanf (dump, "%ms %lx %lx %lx %lx", + &devname, &DEVOFFSET (i), &ENVSIZE (i), &DEVESIZE (i), @@ -1317,6 +1318,8 @@ static int get_config (char *fname) if (rc < 3) continue; + DEVNAME(i) = devname; + if (rc < 4) /* Assume the erase size is the same as the env-size */ DEVESIZE(i) = ENVSIZE(i); |