aboutsummaryrefslogtreecommitdiffstats
path: root/tools/firmware-utils
diff options
context:
space:
mode:
Diffstat (limited to 'tools/firmware-utils')
-rw-r--r--tools/firmware-utils/Makefile2
-rw-r--r--tools/firmware-utils/src/fw.h3
-rw-r--r--tools/firmware-utils/src/mkfwimage.c23
3 files changed, 15 insertions, 13 deletions
diff --git a/tools/firmware-utils/Makefile b/tools/firmware-utils/Makefile
index eca4dd7da7..d318788ac5 100644
--- a/tools/firmware-utils/Makefile
+++ b/tools/firmware-utils/Makefile
@@ -38,7 +38,7 @@ define Host/Compile
$(call cc,mkzynfw)
$(call cc,lzma2eva,-lz)
$(call cc,mkcasfw)
- $(call cc,mkfwimage,-lz -Wall -Werror -Wextra)
+ $(call cc,mkfwimage,-lz -Wall -Werror -Wextra -D_FILE_OFFSET_BITS=64)
$(call cc,mkfwimage2,-lz)
$(call cc,imagetag imagetag_cmdline cyg_crc32)
$(call cc,add_header)
diff --git a/tools/firmware-utils/src/fw.h b/tools/firmware-utils/src/fw.h
index 44f8d851d2..53a92a573c 100644
--- a/tools/firmware-utils/src/fw.h
+++ b/tools/firmware-utils/src/fw.h
@@ -27,6 +27,7 @@
#define MAGIC_ENDS "ENDS"
#define MAGIC_LENGTH 4
+#define PART_NAME_LENGTH 16
typedef struct header {
char magic[MAGIC_LENGTH];
@@ -37,7 +38,7 @@ typedef struct header {
typedef struct part {
char magic[MAGIC_LENGTH];
- char name[16];
+ char name[PART_NAME_LENGTH];
char pad[12];
u_int32_t memaddr;
u_int32_t index;
diff --git a/tools/firmware-utils/src/mkfwimage.c b/tools/firmware-utils/src/mkfwimage.c
index c779bd5d83..4365fddc8b 100644
--- a/tools/firmware-utils/src/mkfwimage.c
+++ b/tools/firmware-utils/src/mkfwimage.c
@@ -230,9 +230,10 @@ static int write_part(void* mem, part_data_t* d)
memcpy(mem + sizeof(part_t), addr, d->stats.st_size);
munmap(addr, d->stats.st_size);
- memset(p->name, 0, sizeof(p->name));
- strncpy(p->magic, MAGIC_PART, MAGIC_LENGTH);
- strncpy(p->name, d->partition_name, sizeof(p->name));
+ memset(p->name, 0, PART_NAME_LENGTH);
+ memcpy(p->magic, MAGIC_PART, MAGIC_LENGTH);
+ memcpy(p->name, d->partition_name, PART_NAME_LENGTH);
+
p->index = htonl(d->partition_index);
p->data_size = htonl(d->stats.st_size);
p->part_size = htonl(d->partition_length);
@@ -273,7 +274,7 @@ static void print_image_info(const image_info_t* im)
for (i = 0; i < im->part_count; ++i)
{
const part_data_t* d = &im->parts[i];
- INFO(" %10s: %8lld bytes (free: %8lld)\n",
+ INFO(" %10s: %8ld bytes (free: %8ld)\n",
d->partition_name,
d->stats.st_size,
d->partition_length - d->stats.st_size);
@@ -372,7 +373,7 @@ static int validate_image_layout(image_info_t* im)
return -3;
}
if (d->stats.st_size > d->partition_length) {
- ERROR("File '%s' too big (%d) - max size: 0x%08X (exceeds %llu bytes)\n",
+ ERROR("File '%s' too big (%d) - max size: 0x%08X (exceeds %lu bytes)\n",
d->filename, i, d->partition_length,
d->stats.st_size - d->partition_length);
return -4;
@@ -474,30 +475,30 @@ int main(int argc, char* argv[])
switch (o) {
case 'v':
if (optarg)
- strncpy(im.version, optarg, sizeof(im.version));
+ strncpy(im.version, optarg, sizeof(im.version) - 1);
break;
case 'o':
if (optarg)
- strncpy(im.outputfile, optarg, sizeof(im.outputfile));
+ strncpy(im.outputfile, optarg, sizeof(im.outputfile) - 1);
break;
case 'm':
if (optarg)
- strncpy(im.magic, optarg, sizeof(im.magic));
+ strncpy(im.magic, optarg, sizeof(im.magic) - 1);
break;
case 'h':
usage(argv[0]);
return -1;
case 'k':
if (optarg)
- strncpy(kernelfile, optarg, sizeof(kernelfile));
+ strncpy(kernelfile, optarg, sizeof(kernelfile) - 1);
break;
case 'r':
if (optarg)
- strncpy(rootfsfile, optarg, sizeof(rootfsfile));
+ strncpy(rootfsfile, optarg, sizeof(rootfsfile) - 1);
break;
case 'B':
if (optarg)
- strncpy(board_name, optarg, sizeof(board_name));
+ strncpy(board_name, optarg, sizeof(board_name) - 1);
break;
}
}