diff --git a/libisofs/ecma119.c b/libisofs/ecma119.c index 2a9ee6a..1e9f69d 100644 --- a/libisofs/ecma119.c +++ b/libisofs/ecma119.c @@ -1,7 +1,7 @@ /* * Copyright (c) 2007 Vreixo Formoso * Copyright (c) 2007 Mario Danic - * Copyright (c) 2009 - 2017 Thomas Schmitt + * Copyright (c) 2009 - 2018 Thomas Schmitt * * This file is part of the libisofs project; you can redistribute it and/or * modify it under the terms of the GNU General Public License version 2 @@ -573,7 +573,7 @@ int ecma119_writer_write_vol_desc(IsoImageWriter *writer) vol.vol_desc_version[0] = 1; strncpy_pad((char*)vol.system_id, system_id, 32); strncpy_pad((char*)vol.volume_id, vol_id, 32); - if (t->pvd_size_is_total_size) { + if (t->pvd_size_is_total_size > 0) { iso_bb(vol.vol_space_size, t->total_size / 2048 + t->opts->ms_block - t->eff_partition_offset, 4); @@ -1417,7 +1417,8 @@ int write_head_part2(Ecma119Image *target, int *write_count, int flag) target->partiton_offset from any LBA pointer. */ target->eff_partition_offset = target->opts->partition_offset; - target->pvd_size_is_total_size = 0; + if (target->pvd_size_is_total_size != -1) + target->pvd_size_is_total_size = 0; for (i = 0; i < (int) target->nwriters; ++i) { writer = target->writers[i]; /* Not all writers have an entry in the partion volume descriptor set. @@ -3127,6 +3128,12 @@ int ecma119_image_new(IsoImage *src, IsoWriteOpts *in_opts, Ecma119Image **img) "Error reading overwrite volume descriptors"); goto target_cleanup; } + + /* The possible urge to use the total image size as filesystem size + is fulfilled now. The session PVD should bear the usual size. + So ban pvd_size_is_total_size from being set again. + */ + target->pvd_size_is_total_size = -1; } /* This was possibly altered by above overwrite buffer production */ diff --git a/libisofs/ecma119.h b/libisofs/ecma119.h index a0fe885..c9d61d8 100644 --- a/libisofs/ecma119.h +++ b/libisofs/ecma119.h @@ -1,6 +1,6 @@ /* * Copyright (c) 2007 Vreixo Formoso - * Copyright (c) 2009 - 2017 Thomas Schmitt + * Copyright (c) 2009 - 2018 Thomas Schmitt * * This file is part of the libisofs project; you can redistribute it and/or * modify it under the terms of the GNU General Public License version 2 @@ -588,6 +588,7 @@ struct ecma119_image /* 1= write the total size into the PVD of the ISO, * 0= write vol_space_size + * -1= write vol_space_size, do not set to 1 or 0 */ int pvd_size_is_total_size; diff --git a/libisofs/system_area.c b/libisofs/system_area.c index 265e32c..569ffe0 100644 --- a/libisofs/system_area.c +++ b/libisofs/system_area.c @@ -1,6 +1,6 @@ /* * Copyright (c) 2008 Vreixo Formoso - * Copyright (c) 2010 - 2017 Thomas Schmitt + * Copyright (c) 2010 - 2018 Thomas Schmitt * * This file is part of the libisofs project; you can redistribute it and/or * modify it under the terms of the GNU General Public License version 2 @@ -2174,11 +2174,14 @@ int iso_write_system_area(Ecma119Image *t, uint8_t *buf) } } - if ((((t->system_area_options >> 2) & 0x3f) == 0 && - (t->system_area_options & 3) == 1) || - t->opts->partition_offset > 0) { - /* Protective MBR || partition offset */ - /* ISO will not be a partition. It can span the whole image. */ + if (((((t->system_area_options >> 2) & 0x3f) == 0 && + (t->system_area_options & 3) == 1) || + t->opts->partition_offset > 0) && + t->pvd_size_is_total_size != -1) { + /* Protective MBR || partition offset + ISO will not be a partition or add-on session. + It can span the whole image. + */ t->pvd_size_is_total_size = 1; }