diff --git a/libisofs/ecma119.c b/libisofs/ecma119.c index d019532..15bc355 100644 --- a/libisofs/ecma119.c +++ b/libisofs/ecma119.c @@ -2184,10 +2184,6 @@ int ecma119_image_new(IsoImage *src, IsoWriteOpts *opts, Ecma119Image **img) for (i = 0; i < (int) target->nwriters; ++i) { IsoImageWriter *writer = target->writers[i]; - /* Delaying boot image patching until new LBA is known */ - if (i == el_torito_writer_index) - continue; - /* Exposing address of data start to IsoWriteOpts and memorizing this address for all files which have no block address: symbolic links, device files, empty data files. @@ -2206,14 +2202,9 @@ int ecma119_image_new(IsoImage *src, IsoWriteOpts *opts, Ecma119Image **img) } } - /* Now perform delayed image patching and System Area preparations */ - if (el_torito_writer_index >= 0) { - IsoImageWriter *writer = target->writers[el_torito_writer_index]; - ret = writer->compute_data_blocks(writer); - if (ret < 0) { - goto target_cleanup; - } - } + ret = iso_patch_eltoritos(target); + if (ret < 0) + goto target_cleanup; if (((target->system_area_options & 0xfc) >> 2) == 2) { ret = iso_read_mipsel_elf(target, 0); if (ret < 0) diff --git a/libisofs/eltorito.c b/libisofs/eltorito.c index 36d235b..7d55a4f 100644 --- a/libisofs/eltorito.c +++ b/libisofs/eltorito.c @@ -1102,7 +1102,8 @@ int make_boot_info_table(uint8_t *buf, uint32_t pvd_lba, * 1 on success, 0 error (but continue), < 0 error */ static -int patch_boot_image(uint8_t *buf, Ecma119Image *t, size_t imgsize, int idx) +int patch_boot_info_table(uint8_t *buf, Ecma119Image *t, + size_t imgsize, int idx) { int ret; @@ -1116,27 +1117,15 @@ int patch_boot_image(uint8_t *buf, Ecma119Image *t, size_t imgsize, int idx) return ret; } -static -int eltorito_writer_compute_data_blocks(IsoImageWriter *writer) +/* Patch the boot images if indicated */ +int iso_patch_eltoritos(Ecma119Image *t) { - /* - * We have nothing to write, but if we need to patch an isolinux image, - * this is a good place to do so. - */ - Ecma119Image *t; int ret, idx; size_t size; uint8_t *buf; IsoStream *new = NULL; IsoStream *original = NULL; - if (writer == NULL) { - return ISO_NULL_POINTER; - } - - t = writer->target; - - /* Patch the boot image info tables if indicated */ for (idx = 0; idx < t->catalog->num_bootimages; idx++) { if (!(t->catalog->bootimages[idx]->isolinux_options & 0x01)) continue; @@ -1162,7 +1151,7 @@ int eltorito_writer_compute_data_blocks(IsoImageWriter *writer) } /* ok, patch the read buffer */ - ret = patch_boot_image(buf, t, size, idx); + ret = patch_boot_info_table(buf, t, size, idx); if (ret < 0) { return ret; } @@ -1179,6 +1168,16 @@ int eltorito_writer_compute_data_blocks(IsoImageWriter *writer) return ISO_SUCCESS; } +static +int eltorito_writer_compute_data_blocks(IsoImageWriter *writer) +{ + /* + * We have nothing to write. + */ + return ISO_SUCCESS; +} + + /** * Write the Boot Record Volume Descriptor (ECMA-119, 8.2) */ diff --git a/libisofs/eltorito.h b/libisofs/eltorito.h index 828bba9..09514e8 100644 --- a/libisofs/eltorito.h +++ b/libisofs/eltorito.h @@ -151,5 +151,8 @@ int eltorito_writer_create(Ecma119Image *target); int make_boot_info_table(uint8_t *buf, uint32_t pvd_lba, uint32_t boot_lba, uint32_t imgsize); +/* Patch the boot images if indicated. +*/ +int iso_patch_eltoritos(Ecma119Image *t); #endif /* LIBISO_ELTORITO_H */