Bug fix: Add-on sessions with partition offset claimed too many blocks as size. Regression of version 1.4.8.
This commit is contained in:
parent
a936409a82
commit
615dc7e997
@ -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 */
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user