mmc: Fix mmc_spi error on cmd->flags field
[oweals/u-boot.git] / tools / mkenvimage.c
index 3a20b23ed16eb856613b4f571c6c257eb31a4732..55212687e17d0162790002c1c3e5fffbfccb45ca 100644 (file)
@@ -35,6 +35,7 @@
 #include <stdint.h>
 #include <string.h>
 #include <unistd.h>
+#include <libgen.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/mman.h>
@@ -213,7 +214,7 @@ int main(int argc, char **argv)
                filebuf = mmap(NULL, sizeof(*envptr) * filesize, PROT_READ,
                               MAP_PRIVATE, txt_fd, 0);
                if (filebuf == MAP_FAILED) {
-                       fprintf(stderr, "mmap (%ld bytes) failed: %s\n",
+                       fprintf(stderr, "mmap (%zu bytes) failed: %s\n",
                                        sizeof(*envptr) * filesize,
                                        strerror(errno));
                        fprintf(stderr, "Falling back to read()\n");
@@ -221,7 +222,7 @@ int main(int argc, char **argv)
                        filebuf = malloc(sizeof(*envptr) * filesize);
                        ret = read(txt_fd, filebuf, sizeof(*envptr) * filesize);
                        if (ret != sizeof(*envptr) * filesize) {
-                               fprintf(stderr, "Can't read the whole input file (%ld bytes): %s\n",
+                               fprintf(stderr, "Can't read the whole input file (%zu bytes): %s\n",
                                        sizeof(*envptr) * filesize,
                                        strerror(errno));
 
@@ -285,7 +286,9 @@ int main(int argc, char **argv)
        crc = crc32(0, envptr, envsize);
        targetendian_crc = bigendian ? cpu_to_be32(crc) : cpu_to_le32(crc);
 
-       memcpy(dataptr, &targetendian_crc, sizeof(uint32_t));
+       memcpy(dataptr, &targetendian_crc, sizeof(targetendian_crc));
+       if (redundant)
+               dataptr[sizeof(targetendian_crc)] = 1;
 
        if (!bin_filename || strcmp(bin_filename, "-") == 0) {
                bin_fd = STDOUT_FILENO;