From: Joerg S. <Joe...@fo...> - 2015-11-26 10:47:05
|
"Ganssauge, Gottfried" <Got...@ha...> wrote: > Hello list, > > We recently had to switch the machine which produces UDF images for our products from Ubuntu-12 LTS to Ubuntu-14 LTS. > Unfortunately suddenly all UDF images produced by the new machine were rejected by our DVD-ROM manufacturer. Their > pre production verification step spit out the following message: > > PI51_U14 - Fehler: > [e] DVD 1 Volume Descriptor Sequences are not equivalent > [w] DVD 1 Inconsistency between UDF Main and Reserve Volume Descriptor Sequence > > I started to investigate and found out that the Volume Set ID is slightly different between the original and the copy of the primary volume descriptor. > As these problems remained consistently with images written on the new machine we suspected a connection to mkisofs which we use to create our images. > On the old machine we used 3.01a24 whereas on the new machine 3.01a28 is used - in both cases directly from the Ubuntu software archives. > Further investigation showed that the difference is in the Volume Set Identifier field at Offset 72 in the Primary Volume Descriptor. > > I then went through mkisofs' sources and could locate the problematic code at line 1990 in mkisofs/udf.c in routine udf_main_seq_write. > That routine is called twice - once to write the main VDS and then again to write the reserve VDS. > Between calls to that routine some time passes so that the call to clock() returns a slightly different time when called the second time. > To fix that problem I used the tv_usec field of "tv_begun" which is initialized directly after "begun" and then left stable. Good catch! > The complete patch looks like this: > > diff --git a/mkisofs/udf.c b/mkisofs/udf.c > index 25feca6..04390e2 100644 > --- a/mkisofs/udf.c > +++ b/mkisofs/udf.c > @@ -98,7 +98,7 @@ static UConst char sccsid[] = > extern int use_sparcboot; > > extern struct directory *root; > -extern struct timeval tv_begun; > +extern time_t begun; > > static unsigned lba_main_seq; > static unsigned lba_main_seq_copy; > @@ -723,7 +723,7 @@ set_primary_vol_desc(buf, lba) > /*pvd->volume_abstract;*/ > /*pvd->volume_copyright_notice;*/ > /*pvd->application_ident;*/ > - set_timestamp_from_time_t(&pvd->recording_date_and_time, tv_begun.tv_sec); > + set_timestamp_from_time_t(&pvd->recording_date_and_time, begun); > set_impl_ident(&pvd->impl_ident); > set_tag(&pvd->desc_tag, UDF_TAGID_PRIMARY_VOLUME_DESC, lba, 512); It seems that your patch is reversed. I'll see what I can do. Jörg -- EMail:jo...@sc... (home) Jörg Schilling D-13353 Berlin joe...@fo... (work) Blog: http://schily.blogspot.com/ URL: http://cdrecord.org/private/ http://sourceforge.net/projects/schilytools/files/' |