diff --git a/libisoburn/burn_wrap.c b/libisoburn/burn_wrap.c index 0fb808a6..cf957a9f 100644 --- a/libisoburn/burn_wrap.c +++ b/libisoburn/burn_wrap.c @@ -249,6 +249,7 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d, { int ret, lba, nwa, profile, readonly= 0; struct burn_multi_caps *caps= NULL; + struct isoburn_toc_entry *t; char profile_name[80]; profile_name[0]= 0; @@ -309,11 +310,17 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d, /* This might also be multi-session media which do not get shown with a decent TOC. CD-R TOC (profile 0x08) can be trusted. Others not. + Do a scan search of ISO headers. */ - /* do a scan search of ISO headers */ ret= isoburn_emulate_toc(d, 1|2); if(ret<0) goto ex; + if(ret>0) { /* point msc1 to last session */ + if((*o)->toc!=NULL) { + for(t= (*o)->toc; t->next!=NULL; t= t->next); + (*o)->fabricated_msc1= t->start_lba; + } + } } } #ifdef Hardcoded_cd_rW @@ -540,6 +547,10 @@ int isoburn_disc_get_msc1(struct burn_drive *d, int *start_lba) ret= isoburn_find_emulator(&o, d, 0); if(ret<0) return(0); + if(o->fabricated_msc1>=0) { + *start_lba= o->fabricated_msc1; + return(1); + } if(ret>0) if(o->emulation_mode>0) { *start_lba= 0; return(1); diff --git a/libisoburn/isoburn.c b/libisoburn/isoburn.c index 87c60e00..0ee32746 100644 --- a/libisoburn/isoburn.c +++ b/libisoburn/isoburn.c @@ -112,6 +112,7 @@ int isoburn_new(struct isoburn **objpt, int flag) o->drive= NULL; o->emulation_mode= 0; + o->fabricated_msc1= -1; o->zero_nwa= Libisoburn_overwriteable_starT; o->min_start_byte= o->zero_nwa * 2048; o->nwa= o->zero_nwa; diff --git a/libisoburn/isoburn.h b/libisoburn/isoburn.h index 11d1cbe9..850d3288 100644 --- a/libisoburn/isoburn.h +++ b/libisoburn/isoburn.h @@ -51,6 +51,10 @@ struct isoburn { struct isoburn *next; + /* If >= 0, this address is used as reply for isoburn_disc_get_msc1() + */ + int fabricated_msc1; + /* The nwa to be used for a first session on the present kind of overwriteable media (usually Libisoburn_overwriteable_starT, but might be forced to 0) */ diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index ae368542..8bf14fce 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2008.05.08.141920" +#define Xorriso_timestamP "2008.05.08.185350"