altoslib: Correct hexfile address ranges
authorKeith Packard <keithp@keithp.com>
Tue, 14 May 2013 05:27:00 +0000 (22:27 -0700)
committerKeith Packard <keithp@keithp.com>
Tue, 14 May 2013 05:27:00 +0000 (22:27 -0700)
Stop trying to use sentinal values for addresses and just keep a
boolean tracking whether they've been initialized. Avoids precision
errors in the variables.

Signed-off-by: Keith Packard <keithp@keithp.com>
altoslib/AltosHexfile.java

index 68f42f14b4ade98f023bff8da197213f0c9dd3fe..2140228a179f44acf126c5f3288a438a9bd6464f 100644 (file)
@@ -230,17 +230,19 @@ public class AltosHexfile {
                }
 
                long    extended_addr = 0;
-               long    base = 0xffffffff;
-               long    bound = 0x00000000;
+               long    base = 0;
+               long    bound = 0;
+               boolean set = false;
                for (HexRecord record : record_list) {
                        switch (record.type) {
                        case 0:
                                long addr = extended_addr + record.address;
                                long r_bound = addr + record.data.length;
-                               if (addr < base)
+                               if (!set || addr < base)
                                        base = addr;
-                               if (r_bound > bound)
+                               if (!set || r_bound > bound)
                                        bound = r_bound;
+                               set = true;
                                break;
                        case 1:
                                break;
@@ -259,7 +261,7 @@ public class AltosHexfile {
                        }
                }
 
-               if (base >= bound)
+               if (!set || base >= bound)
                        throw new IOException("invalid hex file");
 
                if (bound - base > 4 * 1024 * 1024)