Skip to content

Commit

Permalink
tools/env: fix redundant env flag comparison
Browse files Browse the repository at this point in the history
This fixes two bugs with comparison of redundant environment flags on
read.

flag0 and flag1 in fw_env_open() were declared signed instead of
unsigned char breaking BOOLEAN mode "== 0xFF" tests and in INCREMENTAL
mode the wrong environment would be chosen where the flag values are
127 and 128 (either way round). With both flags over 128, both signs
flipped and the logic worked by happy accident.

Also there was a logic bug in the INCREMENTAL test (after signedness was
fixed) in the case flag0=0, flag1=255, env 1 would be incorrectly chosen.

Fix both of these.

Signed-off-by: Jon Povey <[email protected]>
  • Loading branch information
Jon Povey authored and wdenx committed Apr 20, 2011
1 parent aef293b commit 735eb0f
Showing 1 changed file with 6 additions and 7 deletions.
13 changes: 6 additions & 7 deletions tools/env/fw_env.c
Original file line number Diff line number Diff line change
Expand Up @@ -1067,11 +1067,11 @@ static char *envmatch (char * s1, char * s2)
int fw_env_open(void)
{
int crc0, crc0_ok;
char flag0;
unsigned char flag0;
void *addr0;

int crc1, crc1_ok;
char flag1;
unsigned char flag1;
void *addr1;

struct env_image_single *single;
Expand Down Expand Up @@ -1185,14 +1185,13 @@ int fw_env_open(void)
}
break;
case FLAG_INCREMENTAL:
if ((flag0 == 255 && flag1 == 0) ||
flag1 > flag0)
if (flag0 == 255 && flag1 == 0)
dev_current = 1;
else if ((flag1 == 255 && flag0 == 0) ||
flag0 > flag1)
dev_current = 0;
else /* flags are equal - almost impossible */
flag0 >= flag1)
dev_current = 0;
else /* flag1 > flag0 */
dev_current = 1;
break;
default:
fprintf (stderr, "Unknown flag scheme %u \n",
Expand Down

0 comments on commit 735eb0f

Please sign in to comment.