From 91955a715a1cfc4f75f0699fa7e14ccf15c134c4 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Wed, 6 May 2009 17:43:30 +0000 Subject: [PATCH] Bug fix: -load volid did not perform pattern searc --- xorriso/xorriso_timestamp.h | 2 +- xorriso/xorrisoburn.c | 28 ++++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index e6b5abcc..e67e5fd6 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2009.05.06.173600" +#define Xorriso_timestamP "2009.05.06.174222" diff --git a/xorriso/xorrisoburn.c b/xorriso/xorrisoburn.c index dd62eb75..6c494c70 100644 --- a/xorriso/xorrisoburn.c +++ b/xorriso/xorrisoburn.c @@ -539,6 +539,8 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag) size_t value_length; char *value= NULL; double num; + int lba, track, session, params_flag, adr_mode; + char volid[33], adr_data[163], *adr_pt; static int no_rr_or_joliet= 0; @@ -608,8 +610,30 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag) if(xorriso->image_start_mode&(1<<31)) /* used up setting */ xorriso->image_start_mode&= ~0xffff; /* perform auto setting */ if((xorriso->image_start_mode&(1<<30))) { /* if enabled at all */ - ret= isoburn_set_msc1(drive, xorriso->image_start_mode & 0xffff, - xorriso->image_start_value, + adr_pt= xorriso->image_start_value; + adr_mode= xorriso->image_start_mode & 0xffff; + if(adr_mode == 4 && strlen(adr_pt) <= 80) { + /* Convert volid search expression into lba */ + params_flag= 0; + ret= Xorriso__bourne_to_reg(xorriso->image_start_value, adr_data, 0); + if(ret == 1) + params_flag|= 4; + ret= isoburn_get_mount_params(drive, 4, adr_data, &lba, &track, + &session, volid, params_flag); + Xorriso_process_msg_queues(xorriso,0); + if(ret <= 0) + goto ex; + if(session <= 0 || track <= 0 || ret == 2) { + Xorriso_msgs_submit(xorriso, 0, + "-load : Given address does not point to an ISO 9660 session", + 0, "FAILURE", 0); + ret= 0; goto ex; + } + sprintf(volid, "%d", lba); + adr_pt= volid; + adr_mode= 3; + } + ret= isoburn_set_msc1(drive, adr_mode, adr_pt, !!(xorriso->image_start_mode & (1<<16))); if(ret<=0) goto ex;