diff packages/redboot/current/src/load.c @ 143:6b5f480c6929 ecos-sw-2000-12-08

Merge from eCos master repository on 2000-12-08-02:09:36-GMT
author jlarmour
date Fri, 08 Dec 2000 03:30:06 +0000
parents 0ae0bc38e387
children 5e8f3b328bb3
line wrap: on
line diff
--- a/packages/redboot/current/src/load.c
+++ b/packages/redboot/current/src/load.c
@@ -153,7 +153,7 @@ load_srec_image(int (*getc)(void), unsig
                 lowest_address = (unsigned long)(addr - addr_offset);
             }
             if ((addr < ram_start) || (addr > ram_end)) {
-                printf("Attempt to load S-record data to address: %p [not in RAM]\n", addr);
+                printf("Attempt to load S-record data to address: %p [not in RAM]\n", (void*)addr);
                 return;
             }
             count -= ((type-'1'+2)+1);
@@ -182,7 +182,8 @@ load_srec_image(int (*getc)(void), unsig
             offset += ('9'-type+2);
             entry_address = (unsigned long *)addr;
             printf("Entry point: %p, address range: %p-%p\n", 
-                   entry_address, (void *)lowest_address, (void *)highest_address);
+                   (void*)entry_address, (void *)lowest_address, (void *)highest_address);
+            while ((c = (*getc)()) > 0) ;  // Swallow rest of data
             return;
         default:
             printf("Invalid S-record at offset 0x%lx, type: %x\n", 
@@ -337,6 +338,10 @@ do_load(int argc, char *argv[])
         printf("usage: load %s\n", usage);
         return;
     }
+    if (base_addr_set && ((base < ram_start) || (base > ram_end))) {
+        printf("Specified address (%p) is not in RAM.\n", (void*)base);
+        return;
+    }
 #ifdef CYGPKG_REDBOOT_NETWORKING
     if (mode == MODE_TFTP) {
         res = tftp_stream_open(filename, &host, TFTP_OCTET, &err);    
@@ -353,7 +358,8 @@ do_load(int argc, char *argv[])
             printf("Can't load '%s': %s\n", filename, xyzModem_error(err));
             return;
         }
-        redboot_getc_init(xyzModem_stream_read, verbose);
+        // Suppress verbosity when using xyz modem download
+        redboot_getc_init(xyzModem_stream_read, 0 && verbose);
     }
     // Read initial header - to determine file [image] type
     for (i = 0;  i < sizeof(type);  i++) {
@@ -392,5 +398,8 @@ do_load(int argc, char *argv[])
         tftp_stream_close(&err);
     }
 #endif
+    if (mode != MODE_TFTP) {
+        xyzModem_stream_close(&err);
+    }
     return;
 }