backport r21848 and r24000
authorFlorian Fainelli <florian@openwrt.org>
Mon, 15 Nov 2010 18:38:58 +0000 (18:38 +0000)
committerFlorian Fainelli <florian@openwrt.org>
Mon, 15 Nov 2010 18:38:58 +0000 (18:38 +0000)
SVN-Revision: 24009

tools/firmware-utils/src/imagetag.c

index 658674ec78ebd83f7c56918146165c107b3a751c..0ecbada2844c087b5cdee565c07e597fc67da594 100644 (file)
@@ -32,9 +32,9 @@ union int2char {
   char output[4];
 };
 
-/* This appears to be necessary due to alignment issues */
+/* Convert uint32_t CRC to bigendian and copy it into a character array */
 #define int2tag(tag, value)  intchar.input = htonl(value);     \
-         strncpy(tag, intchar.output, sizeof(union int2char))
+         memcpy(tag, intchar.output, sizeof(union int2char))
 
 /* Kernel header */
 struct kernelhdr {
@@ -94,7 +94,7 @@ uint32_t compute_crc32(uint32_t crc, FILE *binfile, size_t compute_start, size_t
        size_t read;
 
        fseek(binfile, compute_start, SEEK_SET);
-       
+
        /* read block of 1024 bytes */
        while (binfile && !feof(binfile) && !ferror(binfile) && (compute_len >= sizeof(readbuf))) {
                read = fread(readbuf, sizeof(uint8_t), sizeof(readbuf), binfile);
@@ -221,7 +221,7 @@ int tagfile(const char *kernel, const char *rootfs, const char *bin,
        printf("Data alignment to %dk with 'deadc0de' appended\n", flash_bs/1024);
        fseek(binfile, rootfsoff + rootfslen - fwaddr, SEEK_SET);
        fwrite(&deadcode, sizeof(uint32_t), 1, binfile);
-       
+
        /* Flush the binfile buffer so that when we read from file, it contains
          * everything in the buffer
         */
@@ -243,7 +243,7 @@ int tagfile(const char *kernel, const char *rootfs, const char *bin,
          * needs to be rootfs + deadcode
          */
        rootfscrc = compute_crc32(rootfscrc, binfile, kerneloff - fwaddr, rootfslen + sizeof(deadcode));
-       
+
        /* Close the files */
        fclose(kernelfile);
        fclose(rootfsfile);
@@ -306,7 +306,7 @@ int main(int argc, char **argv)
        uint32_t flashstart, fwoffset, loadaddr, entry;
        uint32_t fwaddr, flash_bs;
        int tagidfound = 0;
-       
+
        kernel = rootfs = bin = boardid = chipid = magic2 = ver = rsignature = layoutver = NULL;
        entry = 0;
 
@@ -394,11 +394,11 @@ int main(int argc, char **argv)
                fprintf(stderr, "You need to specify the kernel entry (-e)\n");
                return 1;
        }
-       
+
        /* Fallback to defaults */
 
        fwaddr = flashstart + fwoffset;
-       
+
        if (!magic2) {
                magic2 = malloc(sizeof(char) * 14);
                if (!magic2) {
@@ -416,7 +416,7 @@ int main(int argc, char **argv)
                }
                strcpy(ver, IMAGETAG_VER);
        }
-               
+
 
        return tagfile(kernel, rootfs, bin, boardid, chipid, fwaddr, loadaddr, entry, ver, magic2, flash_bs, rsignature, layoutver);
 }