From mboxrd@z Thu Jan 1 00:00:00 1970 From: Grant Edwards To: ecos-discuss@sources.redhat.com Subject: [ECOS] RedBoot: load.c srecord input offset fix Date: Thu, 19 Apr 2001 13:19:00 -0000 Message-id: <20010419152033.A29215@visi.com> X-SW-Source: 2001-04/msg00221.html The "offset" variable in load_srec_image() isn't incremented properly (assuming its purpose is to keep track of the current byte offset in the input stream). My version of load.c has diverged enough that I can't generate a usable patch, so I'll summarize the changes: Increment at top of main while loop: while ((c = (*getc)()) > 0) { + ++offset; lp = line; len = 0; // Start of line if (c != 'S') { Double the byte-count for the address field to get the character count since calling _hex2(func,N,&sum) consumes 2N characters from the input stream:: case '2': case '3': base_addr = addr = (unsigned char *)_hex2(getc, (type-'1'+2), &sum); - offset += (type-'1'+2); + offset += (type-'1'+2)*2; if (first_addr) { if (base) { addr_offset = (unsigned long)base - (unsigned long)addr; Double the byte-count for the data field to get the character count, and incrment by 2 instead of 1 for the checksum byte: return; } count -= ((type-'1'+2)+1); - offset += count; + offset += count*2; while (count-- > 0) { val = _hex2(getc, 1, &sum); *addr++ = val; } cksum = _hex2(getc, 1, 0); - offset += 1; + offset += 2; sum = sum & 0xFF; cksum = (~cksum & 0xFF); if (cksum != sum) { -- Grant Edwards grante@visi.com