summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Olbrich <m.olbrich@pengutronix.de>2019-09-25 10:44:21 +0000
committerGitHub <noreply@github.com>2019-09-25 10:44:21 +0000
commit4d6fd4da0861d2823f2e451feb7180f363e88486 (patch)
tree5c009c1589bb0172f5ded32482b591499295c71a
parente368d4c50daa24e227c5321bf70c43234f4ed229 (diff)
parente5129acb62675f7a405704a609de3ad9cb0acd54 (diff)
downloadgenimage-4d6fd4da0861d2823f2e451feb7180f363e88486.tar.gz
genimage-4d6fd4da0861d2823f2e451feb7180f363e88486.tar.xz
Merge pull request #74 from michaelolbrich/cleanup
Some cleanup and small improvements
-rw-r--r--image-hd.c2
-rw-r--r--util.c28
2 files changed, 14 insertions, 16 deletions
diff --git a/image-hd.c b/image-hd.c
index fcb05d3..863f40a 100644
--- a/image-hd.c
+++ b/image-hd.c
@@ -447,7 +447,7 @@ static int hdimage_setup(struct image *image, cfg_t *cfg)
++partition_table_entries;
}
if (!hd->gpt && !hd->extended_partition && partition_table_entries > 4)
- hd->extended_partition = 4;
+ hd->extended_partition = 4;
has_extended = hd->extended_partition > 0;
if (hd->disk_uuid ) {
diff --git a/util.c b/util.c
index f66827f..b1ec96f 100644
--- a/util.c
+++ b/util.c
@@ -363,8 +363,8 @@ static int map_file_extents(struct image *image, const char *filename, int f,
goto err_out;
/* Build extent array */
- *extent_count = fiemap->fm_mapped_extents;
- *extents = xzalloc(fiemap->fm_mapped_extents * sizeof(struct extent));
+ *extent_count = fiemap->fm_extent_count;
+ *extents = xzalloc(*extent_count * sizeof(struct extent));
for (i = 0; i < fiemap->fm_mapped_extents; i++) {
(*extents)[i].start = fiemap->fm_extents[i].fe_logical;
(*extents)[i].end = fiemap->fm_extents[i].fe_logical + fiemap->fm_extents[i].fe_length;
@@ -397,7 +397,7 @@ int pad_file(struct image *image, const char *infile,
int f = -1, outf = -1, flags = 0;
unsigned long f_offset = 0;
struct extent *extents;
- size_t extent_count;
+ size_t extent_count = 0;
void *buf = NULL;
int now, r, w;
unsigned e;
@@ -477,7 +477,11 @@ int pad_file(struct image *image, const char *infile,
whole_file_exent(size, &extents, &extent_count);
}
+ image_debug(image, "copying %zu bytes from %s at offset %zd\n",
+ size, infile, image->last_offset);
+
for (e = 0; e < extent_count && size > 0; e++) {
+ image_debug(image, "copying [%lld,%lld]\n", extents[e].start, extents[e].end);
/* Ship over any holes in the input file */
if (f_offset != extents[e].start) {
unsigned long skip = extents[e].start - f_offset;
@@ -509,13 +513,13 @@ int pad_file(struct image *image, const char *infile,
fill:
if (fillpattern == 0 && (s.st_mode & S_IFMT) == S_IFREG) {
/* Truncate output to desired size */
- image_info(image, "f_offset=%lu filesize=%llu\n", f_offset, (unsigned long long)lseek(outf, 0, SEEK_CUR));
image->last_offset = lseek(outf, 0, SEEK_CUR) + size;
ret = ftruncate(outf, image->last_offset);
if (ret == -1) {
+ ret = -errno;
image_error(image, "ftruncate %s: %s\n", outfile, strerror(errno));
- goto err_out;
- }
+ goto err_out;
+ }
}
else {
memset(buf, fillpattern, 4096);
@@ -580,7 +584,6 @@ err_out:
int extend_file(struct image *image, size_t size)
{
const char *outfile = imageoutfile(image);
- char buf = '\0';
int f;
off_t offset;
int ret = 0;
@@ -603,15 +606,10 @@ int extend_file(struct image *image, size_t size)
if ((size_t)offset == size)
goto out;
- if (lseek(f, size - 1, SEEK_SET) < 0) {
- ret = -errno;
- image_error(image, "seek %s: %s\n", outfile, strerror(errno));
- goto out;
- }
- ret = write(f, &buf, 1);
- if (ret < 1) {
+ ret = ftruncate(f, size);
+ if (ret == -1) {
ret = -errno;
- image_error(image, "write %s: %s\n", outfile, strerror(errno));
+ image_error(image, "ftruncate %s: %s\n", outfile, strerror(errno));
goto out;
}
ret = 0;