backfire: firmware-utils/wndr3700: allow to specify image magic via command line...
authorjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sun, 13 Mar 2011 14:53:43 +0000 (14:53 +0000)
committerjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sun, 13 Mar 2011 14:53:43 +0000 (14:53 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@26111 3c298f89-4303-0410-b956-a3cf2f4a3e73

tools/firmware-utils/src/wndr3700.c

index 51e5352cb0362b4004b241555ad718f0d83aa8f3..97b5f1d4558aa7c2abc00ddab43c8547e68fcdc3 100644 (file)
 
 #define BPB 8 /* bits/byte */
 
 
 #define BPB 8 /* bits/byte */
 
+#define WNDR3700_MAGIC_LEN     4
+
 static uint32_t crc32[1<<BPB];
 static uint32_t crc32[1<<BPB];
+static char *magic = "3700";
 
 static void init_crc32()
 {
 
 static void init_crc32()
 {
@@ -64,7 +67,7 @@ static uint32_t crc32buf(unsigned char *buf, size_t len)
 }
 
 struct header {
 }
 
 struct header {
-    uint32_t magic;
+    unsigned char magic[WNDR3700_MAGIC_LEN];
     uint32_t crc;
     unsigned char stuff[56];
 };
     uint32_t crc;
     unsigned char stuff[56];
 };
@@ -74,7 +77,7 @@ static void usage(const char *) __attribute__ (( __noreturn__ ));
 static void usage(const char *mess)
 {
        fprintf(stderr, "Error: %s\n", mess);
 static void usage(const char *mess)
 {
        fprintf(stderr, "Error: %s\n", mess);
-       fprintf(stderr, "Usage: wndr3700 input_file output_file\n");
+       fprintf(stderr, "Usage: wndr3700 input_file output_file [magic]\n");
        fprintf(stderr, "\n");
        exit(1);
 }
        fprintf(stderr, "\n");
        exit(1);
 }
@@ -90,9 +93,17 @@ int main(int argc, char **argv)
 
        // verify parameters
 
 
        // verify parameters
 
-       if (argc != 3)
+       if (argc < 3)
                usage("wrong number of arguments");
 
                usage("wrong number of arguments");
 
+       if (argc > 3)
+               magic = argv[3];
+
+       if (strlen(magic) != WNDR3700_MAGIC_LEN) {
+               fprintf(stderr, "Invalid magic: '%s'\n", magic);
+               exit(1);
+       }
+
        // mmap input_file
        if ((fd = open(argv[1], O_RDONLY))  < 0
        || (len = lseek(fd, 0, SEEK_END)) < 0
        // mmap input_file
        if ((fd = open(argv[1], O_RDONLY))  < 0
        || (len = lseek(fd, 0, SEEK_END)) < 0
@@ -110,7 +121,7 @@ int main(int argc, char **argv)
         // preload header
         memcpy(&header, input_file, sizeof(header));
 
         // preload header
         memcpy(&header, input_file, sizeof(header));
 
-        header.magic = htonl(0x33373030); /* 3700 in ascii */
+       memcpy(header.magic, magic, WNDR3700_MAGIC_LEN);
        header.crc = 0;
 
        // create a firmware image in memory and copy the input_file to it
        header.crc = 0;
 
        // create a firmware image in memory and copy the input_file to it