fix endianness issue with addpattern
[openwrt/svn-archive/archive.git] / openwrt / target / utils / src / addpattern.c
index 084ecf29a5a9bb3c0fd8df7493f44f0d7b9bb604..5f49b921f6c0930a32027ad53708bb4417c96744 100644 (file)
@@ -66,7 +66,8 @@ struct code_header {                  /* from cyutils.h */
        char fwvern[3];
        char id[4];                                     /* U2ND */
        char hw_ver;                            /* 0: for 4702, 1: for 4712 -- new in 2.04.3 */
-       unsigned short flags;       /* SUPPORT_ flags new for 3.37.2 (WRT54G v2.2 and WRT54GS v1.1) */
+       char unused;
+       unsigned char flags[2];       /* SUPPORT_ flags new for 3.37.2 (WRT54G v2.2 and WRT54GS v1.1) */
        unsigned char res2[10];
 } ;
 
@@ -76,7 +77,7 @@ void usage(void) __attribute__ (( __noreturn__ ));
 
 void usage(void)
 {
-       fprintf(stderr, "Usage: addpattern [-i trxfile] [-o binfile] [-p pattern] [-g] [-b] [-v v#.#.#] [-{0|1|2}]\n");
+       fprintf(stderr, "Usage: addpattern [-i trxfile] [-o binfile] [-p pattern] [-g] [-b] [-v v#.#.#] [-{0|1|2|4}]\n");
        exit(EXIT_FAILURE);
 }
 
@@ -104,7 +105,7 @@ int main(int argc, char **argv)
        hdr = (struct code_header *) buf;
        memset(hdr, 0, sizeof(struct code_header));
 
-       while ((c = getopt(argc, argv, "i:o:p:gbv:012")) != -1) {
+       while ((c = getopt(argc, argv, "i:o:p:gbv:0124")) != -1) {
                switch (c) {
                        case 'i':
                                ifn = optarg;
@@ -132,9 +133,14 @@ int main(int argc, char **argv)
                                break;
                        case '2':                       /* new 54G v2.2 and 54GS v1.1 flags */
                                hdr->hw_ver = 1;
-                               hdr->flags |= SUPPORT_4712_CHIP;
-                               hdr->flags |= SUPPORT_INTEL_FLASH;
-                               hdr->flags |= SUPPORT_5325E_SWITCH;
+                               hdr->flags[0] |= SUPPORT_4712_CHIP;
+                               hdr->flags[0] |= SUPPORT_INTEL_FLASH;
+                               hdr->flags[0] |= SUPPORT_5325E_SWITCH;
+                               break;
+                       case '4':
+                               /* V4 firmware sets the flags to 0x1f */
+                               hdr->hw_ver = 0;
+                               hdr->flags[0] = 0x1f;
                                break;
 
                        default: