Adopting next development step of libisofs
This commit is contained in:
parent
615eb60115
commit
847a54f423
@ -147,6 +147,10 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
|
|||||||
return 1;
|
return 1;
|
||||||
tiles[oldest].last_error_lba = lba;
|
tiles[oldest].last_error_lba = lba;
|
||||||
|
|
||||||
|
#ifdef ISO_DATA_SOURCE_MISHAP
|
||||||
|
ret= ISO_DATA_SOURCE_MISHAP;
|
||||||
|
#else
|
||||||
|
/* <<< pre libisofs-0.6.7 */
|
||||||
/* It is not required by the specs of libisofs but implicitely assumed
|
/* It is not required by the specs of libisofs but implicitely assumed
|
||||||
...
|
...
|
||||||
But it is not possible to ignore FAILURE.
|
But it is not possible to ignore FAILURE.
|
||||||
@ -159,6 +163,8 @@ int ds_read_block(IsoDataSource *src, uint32_t lba, uint8_t *buffer)
|
|||||||
enough to make it appear plausible.
|
enough to make it appear plausible.
|
||||||
*/
|
*/
|
||||||
ret= ISO_FILE_CANT_WRITE;
|
ret= ISO_FILE_CANT_WRITE;
|
||||||
|
#endif
|
||||||
|
|
||||||
if(ret >= 0)
|
if(ret >= 0)
|
||||||
ret = -1;
|
ret = -1;
|
||||||
sprintf(msg, "ds_read_block(%lu) returns %d", (unsigned long) lba, ret);
|
sprintf(msg, "ds_read_block(%lu) returns %d", (unsigned long) lba, ret);
|
||||||
|
@ -200,7 +200,7 @@ void isoburn_version(int *major, int *minor, int *micro);
|
|||||||
*/
|
*/
|
||||||
#define isoburn_libisofs_req_major 0
|
#define isoburn_libisofs_req_major 0
|
||||||
#define isoburn_libisofs_req_minor 6
|
#define isoburn_libisofs_req_minor 6
|
||||||
#define isoburn_libisofs_req_micro 6
|
#define isoburn_libisofs_req_micro 7
|
||||||
|
|
||||||
/** The minimum version of libburn to be used with this version of libisoburn
|
/** The minimum version of libburn to be used with this version of libisoburn
|
||||||
at compile time.
|
at compile time.
|
||||||
|
@ -16,7 +16,7 @@ AC_SUBST(BURN_MICRO_VERSION)
|
|||||||
|
|
||||||
LIBISOFS_MAJOR_VERSION=0
|
LIBISOFS_MAJOR_VERSION=0
|
||||||
LIBISOFS_MINOR_VERSION=6
|
LIBISOFS_MINOR_VERSION=6
|
||||||
LIBISOFS_MICRO_VERSION=6
|
LIBISOFS_MICRO_VERSION=7
|
||||||
AC_SUBST(LIBISOFS_MAJOR_VERSION)
|
AC_SUBST(LIBISOFS_MAJOR_VERSION)
|
||||||
AC_SUBST(LIBISOFS_MINOR_VERSION)
|
AC_SUBST(LIBISOFS_MINOR_VERSION)
|
||||||
AC_SUBST(LIBISOFS_MICRO_VERSION)
|
AC_SUBST(LIBISOFS_MICRO_VERSION)
|
||||||
|
@ -1900,7 +1900,7 @@ struct FindjoB {
|
|||||||
19= empty_iso_dir iso_rr_equiv
|
19= empty_iso_dir iso_rr_equiv
|
||||||
20= is_full_in_iso iso_rr_equiv
|
20= is_full_in_iso iso_rr_equiv
|
||||||
21= report_damage
|
21= report_damage
|
||||||
>>>22= report_lba
|
22= report_lba
|
||||||
*/
|
*/
|
||||||
int action;
|
int action;
|
||||||
char *target;
|
char *target;
|
||||||
@ -11347,7 +11347,9 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
|||||||
" min_lba=blockadr , max_lba=blockadr ,",
|
" min_lba=blockadr , max_lba=blockadr ,",
|
||||||
" abort_file=path , time_limit=seconds , item_limit=number ,",
|
" abort_file=path , time_limit=seconds , item_limit=number ,",
|
||||||
" retry=on|off|default , data_to=filepath ,",
|
" retry=on|off|default , data_to=filepath ,",
|
||||||
" sector_map=filepath , map_with_volid=on|off",
|
" sector_map=filepath , map_with_volid=on|off ,",
|
||||||
|
" patch_lba0=on|off|force|blockadr[:force] ,",
|
||||||
|
" report=blocks|files|blocks_files",
|
||||||
"",
|
"",
|
||||||
"Compatibility emulation (argument list may be ended by --):",
|
"Compatibility emulation (argument list may be ended by --):",
|
||||||
" -as mkisofs [-help|-version|-o|-R|-J|-V|-P|-f|-m|-exclude-list|-no-pad|",
|
" -as mkisofs [-help|-version|-o|-R|-J|-V|-P|-f|-m|-exclude-list|-no-pad|",
|
||||||
@ -12967,7 +12969,8 @@ bd_speed:;
|
|||||||
int Xorriso_option_split_size(struct XorrisO *xorriso, char *size, int flag)
|
int Xorriso_option_split_size(struct XorrisO *xorriso, char *size, int flag)
|
||||||
{
|
{
|
||||||
double num;
|
double num;
|
||||||
static off_t limit= ((off_t) 4) * ((off_t) 1024*1024*1024) - (off_t) 1;
|
/* At most: 100 extents with 4 GB - 2 kB each = 400 GB - 800 kB */
|
||||||
|
static off_t limit= ((off_t) 400) * ((off_t) 1024*1024*1024) - (off_t) 819200;
|
||||||
|
|
||||||
num= Scanf_io_size(size, 0);
|
num= Scanf_io_size(size, 0);
|
||||||
if(num > limit) {
|
if(num > limit) {
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2008.08.24.173217"
|
#define Xorriso_timestamP "2008.08.26.163254"
|
||||||
|
@ -74,6 +74,8 @@ int Xorriso_findi_iter(struct XorrisO *xorriso, IsoDir *dir_node, off_t *mem,
|
|||||||
IsoNode ***node_array, int *node_count, int *node_idx,
|
IsoNode ***node_array, int *node_count, int *node_idx,
|
||||||
IsoNode **iterated_node, int flag);
|
IsoNode **iterated_node, int flag);
|
||||||
|
|
||||||
|
int Xorriso__file_start_lba(IsoNode *node, int *lba, int flag);
|
||||||
|
|
||||||
|
|
||||||
#define LIBISO_ISDIR(node) (iso_node_get_type(node) == LIBISO_DIR)
|
#define LIBISO_ISDIR(node) (iso_node_get_type(node) == LIBISO_DIR)
|
||||||
#define LIBISO_ISREG(node) (iso_node_get_type(node) == LIBISO_FILE)
|
#define LIBISO_ISREG(node) (iso_node_get_type(node) == LIBISO_FILE)
|
||||||
@ -91,6 +93,10 @@ int Xorriso_findi_iter(struct XorrisO *xorriso, IsoDir *dir_node, off_t *mem,
|
|||||||
#define Xorriso_cd_min_track_sizE 300
|
#define Xorriso_cd_min_track_sizE 300
|
||||||
|
|
||||||
|
|
||||||
|
/* >>> transitional macro */
|
||||||
|
#define Xorriso_libisofs_0_6_7 yes
|
||||||
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------ */
|
/* ------------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
|
||||||
@ -920,7 +926,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
|||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
isoburn_igopt_set_level(sopts, 2);
|
isoburn_igopt_set_level(sopts, 3);
|
||||||
isoburn_igopt_set_extensions(sopts, 1|((!!xorriso->do_joliet)<<1));
|
isoburn_igopt_set_extensions(sopts, 1|((!!xorriso->do_joliet)<<1));
|
||||||
isoburn_igopt_set_relaxed(sopts, isoburn_igopt_allow_deep_paths);
|
isoburn_igopt_set_relaxed(sopts, isoburn_igopt_allow_deep_paths);
|
||||||
isoburn_igopt_set_sort_files(sopts, 1);
|
isoburn_igopt_set_sort_files(sopts, 1);
|
||||||
@ -1653,7 +1659,8 @@ int Xorriso_tree_graft_node(struct XorrisO *xorriso, IsoImage *volume,
|
|||||||
struct stat stbuf;
|
struct stat stbuf;
|
||||||
char sfe[5*SfileadrL];
|
char sfe[5*SfileadrL];
|
||||||
off_t size= 0;
|
off_t size= 0;
|
||||||
static off_t limit= ((off_t) 4) * ((off_t) 1024*1024*1024) - (off_t) 1;
|
/* At most: 100 extents with 4 GB - 2 kB each = 400 GB - 800 kB */
|
||||||
|
static off_t limit= ((off_t) 400) * ((off_t) 1024*1024*1024) - (off_t) 819200;
|
||||||
|
|
||||||
if(flag&8) {
|
if(flag&8) {
|
||||||
if(cut_size > limit) {
|
if(cut_size > limit) {
|
||||||
@ -2364,12 +2371,17 @@ int Xorriso_restore_is_identical(struct XorrisO *xorriso, void *in_node,
|
|||||||
unsigned int fs_id;
|
unsigned int fs_id;
|
||||||
dev_t dev_id;
|
dev_t dev_id;
|
||||||
ino_t ino_id;
|
ino_t ino_id;
|
||||||
uint32_t dummy;
|
|
||||||
IsoStream *stream;
|
IsoStream *stream;
|
||||||
IsoImage *volume;
|
IsoImage *volume;
|
||||||
IsoNode *node;
|
IsoNode *node;
|
||||||
struct stat stbuf;
|
struct stat stbuf;
|
||||||
|
|
||||||
|
#ifdef Xorriso_libisofs_0_6_7
|
||||||
|
int dummy;
|
||||||
|
#else
|
||||||
|
uint32_t dummy;
|
||||||
|
#endif
|
||||||
|
|
||||||
memset(type_text, 0, 5);
|
memset(type_text, 0, 5);
|
||||||
if(!xorriso->volset_change_pending)
|
if(!xorriso->volset_change_pending)
|
||||||
return(0);
|
return(0);
|
||||||
@ -2384,9 +2396,20 @@ int Xorriso_restore_is_identical(struct XorrisO *xorriso, void *in_node,
|
|||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef Xorriso_libisofs_0_6_7
|
||||||
|
|
||||||
|
ret= Xorriso__file_start_lba(node, &dummy, 0);
|
||||||
|
if(ret != 0)
|
||||||
|
return(0);
|
||||||
|
|
||||||
|
#else /* Xorriso_libisofs_0_6_7 */
|
||||||
|
|
||||||
ret= iso_node_get_old_image_lba(node, &dummy, 0);
|
ret= iso_node_get_old_image_lba(node, &dummy, 0);
|
||||||
if(ret!=0)
|
if(ret!=0)
|
||||||
return(0);
|
return(0);
|
||||||
|
|
||||||
|
#endif /* ! Xorriso_libisofs_0_6_7 */
|
||||||
|
|
||||||
if(!LIBISO_ISREG(node))
|
if(!LIBISO_ISREG(node))
|
||||||
return(0);
|
return(0);
|
||||||
stream= iso_file_get_stream((IsoFile *) node);
|
stream= iso_file_get_stream((IsoFile *) node);
|
||||||
@ -4159,15 +4182,32 @@ int Xorriso_cannot_create_iter(struct XorrisO *xorriso, int iso_error,int flag)
|
|||||||
|
|
||||||
int Xorriso__node_lba_cmp(const void *node1, const void *node2)
|
int Xorriso__node_lba_cmp(const void *node1, const void *node2)
|
||||||
{
|
{
|
||||||
uint32_t lba1= 0, lba2= 0;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
#ifdef Xorriso_libisofs_0_6_7
|
||||||
|
|
||||||
|
int lba1= 0, lba2= 0;
|
||||||
|
|
||||||
|
ret= Xorriso__file_start_lba(*((IsoNode **) node1), &lba1, 0);
|
||||||
|
if(ret!=1)
|
||||||
|
lba1= 0;
|
||||||
|
ret= Xorriso__file_start_lba(*((IsoNode **) node2), &lba2, 0);
|
||||||
|
if(ret!=1)
|
||||||
|
lba2= 0;
|
||||||
|
|
||||||
|
#else /* Xorriso_libisofs_0_6_7 */
|
||||||
|
|
||||||
|
uint32_t lba1= 0, lba2= 0;
|
||||||
|
|
||||||
ret = iso_node_get_old_image_lba(*((IsoNode **) node1), &lba1, 0);
|
ret = iso_node_get_old_image_lba(*((IsoNode **) node1), &lba1, 0);
|
||||||
if(ret!=1)
|
if(ret!=1)
|
||||||
lba1= 0;
|
lba1= 0;
|
||||||
ret = iso_node_get_old_image_lba(*((IsoNode **) node2), &lba2, 0);
|
ret = iso_node_get_old_image_lba(*((IsoNode **) node2), &lba2, 0);
|
||||||
if(ret!=1)
|
if(ret!=1)
|
||||||
lba2= 0;
|
lba2= 0;
|
||||||
|
|
||||||
|
#endif /* ! Xorriso_libisofs_0_6_7 */
|
||||||
|
|
||||||
return(lba1-lba2);
|
return(lba1-lba2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5541,6 +5581,159 @@ int Xorriso_set_time(struct XorrisO *xorriso, char *in_path, time_t t,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef Xorriso_libisofs_0_6_7
|
||||||
|
|
||||||
|
int Xorriso__start_end_lbas(IsoNode *node,
|
||||||
|
int *lba_count, int **start_lbas, int **end_lbas,
|
||||||
|
off_t *size, int flag)
|
||||||
|
{
|
||||||
|
int section_count= 0, ret, i;
|
||||||
|
struct iso_file_section *sections= NULL;
|
||||||
|
|
||||||
|
*lba_count= 0;
|
||||||
|
*start_lbas= *end_lbas= NULL;
|
||||||
|
*size= 0;
|
||||||
|
if(!LIBISO_ISREG(node))
|
||||||
|
return(0);
|
||||||
|
*size= iso_file_get_size((IsoFile *) node);
|
||||||
|
ret= iso_file_get_old_image_sections((IsoFile *) node, §ion_count,
|
||||||
|
§ions, 0);
|
||||||
|
if(ret < 0)
|
||||||
|
{ret= -1; goto ex;}
|
||||||
|
if(ret != 1 || section_count <= 0)
|
||||||
|
{ret= 0; goto ex;}
|
||||||
|
*start_lbas= calloc(section_count, sizeof(int));
|
||||||
|
*end_lbas= calloc(section_count, sizeof(int));
|
||||||
|
if(*start_lbas == NULL || *end_lbas == NULL)
|
||||||
|
{ret= -1; goto ex;}
|
||||||
|
for(i= 0; i < section_count; i++) {
|
||||||
|
(*start_lbas)[i]= sections[i].block;
|
||||||
|
(*end_lbas)[i]= sections[i].block + sections[i].size / 2048 - 1;
|
||||||
|
if(sections[i].size % 2048)
|
||||||
|
(*end_lbas)[i]++;
|
||||||
|
}
|
||||||
|
*lba_count= section_count;
|
||||||
|
ret= 1;
|
||||||
|
ex:;
|
||||||
|
if(sections != NULL)
|
||||||
|
free((char *) sections);
|
||||||
|
if(ret <= 0) {
|
||||||
|
if((*start_lbas) != NULL)
|
||||||
|
free((char *) *start_lbas);
|
||||||
|
if((*end_lbas) != NULL)
|
||||||
|
free((char *) *end_lbas);
|
||||||
|
*start_lbas= *end_lbas= NULL;
|
||||||
|
*lba_count= 0;
|
||||||
|
}
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int Xorriso__file_start_lba(IsoNode *node,
|
||||||
|
int *lba, int flag)
|
||||||
|
{
|
||||||
|
int *start_lbas= NULL, *end_lbas= NULL, lba_count= 0, i, ret;
|
||||||
|
off_t size;
|
||||||
|
|
||||||
|
*lba= -1;
|
||||||
|
ret= Xorriso__start_end_lbas(node, &lba_count, &start_lbas, &end_lbas,
|
||||||
|
&size, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
return(ret);
|
||||||
|
for(i= 0; i < lba_count; i++) {
|
||||||
|
if(*lba < 0 || start_lbas[i] < *lba)
|
||||||
|
*lba= start_lbas[i];
|
||||||
|
}
|
||||||
|
if(start_lbas != NULL)
|
||||||
|
free((char *) start_lbas);
|
||||||
|
if(end_lbas != NULL)
|
||||||
|
free((char *) end_lbas);
|
||||||
|
if(*lba < 0)
|
||||||
|
return(0);
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* @param damage_start Returns first damaged byte address
|
||||||
|
@param damage_end Returns first byte address after last damaged byte
|
||||||
|
@return <0 error, 0=undamaged , 1=damaged
|
||||||
|
*/
|
||||||
|
int Xorriso_file_eval_damage(struct XorrisO *xorriso, IsoNode *node,
|
||||||
|
off_t *damage_start, off_t *damage_end,
|
||||||
|
int flag)
|
||||||
|
{
|
||||||
|
int *start_lbas= NULL, *end_lbas= NULL, lba_count= 0, sect;
|
||||||
|
int i, sectors, sector_size, ret;
|
||||||
|
off_t sect_base= 0, size= 0, byte;
|
||||||
|
struct SectorbitmaP *map;
|
||||||
|
|
||||||
|
*damage_start= *damage_end= -1;
|
||||||
|
map= xorriso->in_sector_map;
|
||||||
|
if(map == NULL)
|
||||||
|
return(0);
|
||||||
|
Sectorbitmap_get_layout(map, §ors, §or_size, 0);
|
||||||
|
sector_size/= 2048;
|
||||||
|
|
||||||
|
ret= Xorriso__start_end_lbas(node, &lba_count, &start_lbas, &end_lbas,
|
||||||
|
&size, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
return(ret);
|
||||||
|
for(sect= 0; sect < lba_count; sect++) {
|
||||||
|
for(i= start_lbas[sect]; i <= end_lbas[sect]; i+= sector_size) {
|
||||||
|
if(Sectorbitmap_is_set(map, i / sector_size, 0) == 0) {
|
||||||
|
byte= ((off_t) 2048) * ((off_t) (i - start_lbas[sect])) + sect_base;
|
||||||
|
if(*damage_start < 0 || byte < *damage_start)
|
||||||
|
*damage_start= byte;
|
||||||
|
if(byte + (off_t) 2048 > *damage_end)
|
||||||
|
*damage_end= byte + (off_t) 2048;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sect_base+= ((off_t) 2048) *
|
||||||
|
((off_t) (end_lbas[sect] - start_lbas[sect] + 1));
|
||||||
|
}
|
||||||
|
if(*damage_end > size)
|
||||||
|
*damage_end= size;
|
||||||
|
if(start_lbas != NULL)
|
||||||
|
free((char *) start_lbas);
|
||||||
|
if(end_lbas != NULL)
|
||||||
|
free((char *) end_lbas);
|
||||||
|
if(*damage_start < 0)
|
||||||
|
return(0);
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int Xorriso_report_lba(struct XorrisO *xorriso, char *show_path,
|
||||||
|
IsoNode *node, int flag)
|
||||||
|
{
|
||||||
|
int ret, *start_lbas= NULL, *end_lbas= NULL, lba_count, i;
|
||||||
|
off_t size;
|
||||||
|
char sfe[5*SfileadrL];
|
||||||
|
|
||||||
|
ret= Xorriso__start_end_lbas(node, &lba_count, &start_lbas, &end_lbas,
|
||||||
|
&size, 0);
|
||||||
|
if(ret < 0)
|
||||||
|
{ret= -1; goto ex;}
|
||||||
|
if(ret == 0)
|
||||||
|
{ret= 1; goto ex;} /* it is ok to ignore other types */
|
||||||
|
for(i= 0; i < lba_count; i++) {
|
||||||
|
sprintf(xorriso->result_line,
|
||||||
|
"File data lba: %2d , %8d , %8d , %8.f , %s\n",
|
||||||
|
i, start_lbas[i], end_lbas[i] + 1 - start_lbas[i], (double) size,
|
||||||
|
Text_shellsafe(show_path, sfe, 0));
|
||||||
|
Xorriso_result(xorriso, 0);
|
||||||
|
}
|
||||||
|
ret= 1;
|
||||||
|
ex:;
|
||||||
|
if(start_lbas != NULL)
|
||||||
|
free((char *) start_lbas);
|
||||||
|
if(end_lbas != NULL)
|
||||||
|
free((char *) end_lbas);
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* Xorriso_libisofs_0_6_7 */
|
||||||
|
|
||||||
int Xorriso_start_end_lba(struct XorrisO *xorriso, IsoNode *node,
|
int Xorriso_start_end_lba(struct XorrisO *xorriso, IsoNode *node,
|
||||||
int *start_lba, int *end_lba, off_t *size, int flag)
|
int *start_lba, int *end_lba, off_t *size, int flag)
|
||||||
{
|
{
|
||||||
@ -5574,6 +5767,7 @@ int Xorriso_file_eval_damage(struct XorrisO *xorriso, IsoNode *node,
|
|||||||
{
|
{
|
||||||
int start_lba, end_lba, i, sectors, sector_size, damaged= 0, ret;
|
int start_lba, end_lba, i, sectors, sector_size, damaged= 0, ret;
|
||||||
int next_good_lba= -1, first_bad_lba= -1;
|
int next_good_lba= -1, first_bad_lba= -1;
|
||||||
|
int i, sectors, sector_size, ret;
|
||||||
off_t size= 0;
|
off_t size= 0;
|
||||||
struct SectorbitmaP *map;
|
struct SectorbitmaP *map;
|
||||||
|
|
||||||
@ -5581,12 +5775,11 @@ int Xorriso_file_eval_damage(struct XorrisO *xorriso, IsoNode *node,
|
|||||||
map= xorriso->in_sector_map;
|
map= xorriso->in_sector_map;
|
||||||
if(map == NULL)
|
if(map == NULL)
|
||||||
return(0);
|
return(0);
|
||||||
|
Sectorbitmap_get_layout(map, §ors, §or_size, 0);
|
||||||
|
sector_size/= 2048;
|
||||||
ret= Xorriso_start_end_lba(xorriso, node, &start_lba, &end_lba, &size, 0);
|
ret= Xorriso_start_end_lba(xorriso, node, &start_lba, &end_lba, &size, 0);
|
||||||
if(ret <= 0)
|
if(ret <= 0)
|
||||||
return(ret);
|
return(ret);
|
||||||
Sectorbitmap_get_layout(map, §ors, §or_size, 0);
|
|
||||||
sector_size/= 2048;
|
|
||||||
for(i= start_lba; i <= end_lba; i+= sector_size)
|
for(i= start_lba; i <= end_lba; i+= sector_size)
|
||||||
if(Sectorbitmap_is_set(map, i / sector_size, 0) == 0) {
|
if(Sectorbitmap_is_set(map, i / sector_size, 0) == 0) {
|
||||||
damaged= 1;
|
damaged= 1;
|
||||||
@ -5594,7 +5787,6 @@ int Xorriso_file_eval_damage(struct XorrisO *xorriso, IsoNode *node,
|
|||||||
first_bad_lba= i;
|
first_bad_lba= i;
|
||||||
next_good_lba= (i / sector_size + 1) * sector_size;
|
next_good_lba= (i / sector_size + 1) * sector_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(damaged) {
|
if(damaged) {
|
||||||
*damage_start= (first_bad_lba - start_lba) * 2048;
|
*damage_start= (first_bad_lba - start_lba) * 2048;
|
||||||
*damage_end= (next_good_lba - start_lba) * 2048;
|
*damage_end= (next_good_lba - start_lba) * 2048;
|
||||||
@ -5625,6 +5817,8 @@ int Xorriso_report_lba(struct XorrisO *xorriso, char *show_path,
|
|||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* ! Xorriso_libisofs_0_6_7 */
|
||||||
|
|
||||||
|
|
||||||
int Xorriso_report_damage(struct XorrisO *xorriso, char *show_path,
|
int Xorriso_report_damage(struct XorrisO *xorriso, char *show_path,
|
||||||
IsoNode *node, int flag)
|
IsoNode *node, int flag)
|
||||||
@ -5745,8 +5939,13 @@ int Xorriso_findi_test(struct XorrisO *xorriso, struct FindjoB *job,
|
|||||||
struct stat *boss_stbuf, struct stat *stbuf,
|
struct stat *boss_stbuf, struct stat *stbuf,
|
||||||
int depth, int flag)
|
int depth, int flag)
|
||||||
{
|
{
|
||||||
int ret, start_lba, end_lba, damage_filter, file_end_lba, file_start_lba;
|
int ret, start_lba, end_lba, damage_filter;
|
||||||
off_t damage_start, damage_end, size;
|
off_t damage_start, damage_end, size;
|
||||||
|
#ifdef Xorriso_libisofs_0_6_7
|
||||||
|
int lba_count, *file_end_lbas= NULL, *file_start_lbas= NULL, i;
|
||||||
|
#else
|
||||||
|
int file_end_lba, file_start_lba;
|
||||||
|
#endif
|
||||||
|
|
||||||
ret= Findjob_test(job, name, boss_stbuf, stbuf, depth, 0);
|
ret= Findjob_test(job, name, boss_stbuf, stbuf, depth, 0);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
@ -5761,6 +5960,28 @@ int Xorriso_findi_test(struct XorrisO *xorriso, struct FindjoB *job,
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef Xorriso_libisofs_0_6_7
|
||||||
|
|
||||||
|
if(start_lba >= 0 && end_lba >= 0) {
|
||||||
|
ret= Xorriso__start_end_lbas(node, &lba_count,
|
||||||
|
&file_start_lbas, &file_end_lbas, &size, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto ex;
|
||||||
|
for(i= 0; i < lba_count; i++) {
|
||||||
|
if(file_end_lbas[i] < start_lba || file_start_lbas[i] > end_lba)
|
||||||
|
{ret= 0; goto ex;}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ret= 1;
|
||||||
|
ex:;
|
||||||
|
if(file_start_lbas != NULL)
|
||||||
|
free((char *) file_start_lbas);
|
||||||
|
if(file_end_lbas != NULL)
|
||||||
|
free((char *) file_end_lbas);
|
||||||
|
return(ret);
|
||||||
|
|
||||||
|
#else /* Xorriso_libisofs_0_6_7 */
|
||||||
|
|
||||||
if(start_lba >= 0 && end_lba >= 0) {
|
if(start_lba >= 0 && end_lba >= 0) {
|
||||||
ret= Xorriso_start_end_lba(xorriso, node, &file_start_lba, &file_end_lba,
|
ret= Xorriso_start_end_lba(xorriso, node, &file_start_lba, &file_end_lba,
|
||||||
&size, 0);
|
&size, 0);
|
||||||
@ -5770,6 +5991,9 @@ int Xorriso_findi_test(struct XorrisO *xorriso, struct FindjoB *job,
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
return(1);
|
return(1);
|
||||||
|
|
||||||
|
#endif /* ! Xorriso_libisofs_0_6_7 */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -6623,13 +6847,6 @@ int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
|
|||||||
IsoFile *filenode= NULL;
|
IsoFile *filenode= NULL;
|
||||||
IsoStream *iso_stream= NULL;
|
IsoStream *iso_stream= NULL;
|
||||||
|
|
||||||
/* for debugging
|
|
||||||
#define Libisofs_lba_tesT yes
|
|
||||||
*/
|
|
||||||
#ifdef Libisofs_lba_tesT
|
|
||||||
uint32_t lba;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
*stream= NULL;
|
*stream= NULL;
|
||||||
if(flag&1) {
|
if(flag&1) {
|
||||||
node= (IsoNode *) node_pt;
|
node= (IsoNode *) node_pt;
|
||||||
@ -6645,13 +6862,6 @@ int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef Libisofs_lba_tesT
|
|
||||||
ret = iso_node_get_old_image_lba(node, &lba, 0);
|
|
||||||
sprintf(xorriso->info_text, "%s : ret= %d , LBA= %lx",
|
|
||||||
pathname, ret, (unsigned long) lba);
|
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
filenode= (IsoFile *) node;
|
filenode= (IsoFile *) node;
|
||||||
iso_stream= iso_file_get_stream(filenode);
|
iso_stream= iso_file_get_stream(filenode);
|
||||||
if(iso_stream==NULL) {
|
if(iso_stream==NULL) {
|
||||||
|
Loading…
Reference in New Issue
Block a user