Corrected behavior around image data read error
This commit is contained in:
@ -3881,6 +3881,7 @@ much_too_long:;
|
||||
@param flag bit0= mtimes of both file objects are equal
|
||||
bit29= do not issue pacifier messages
|
||||
bit31= do not issue result messages
|
||||
@return >0 ok , <=0 error
|
||||
*/
|
||||
int Xorriso_compare_2_contents(struct XorrisO *xorriso, char *common_adr,
|
||||
char *disk_adr, off_t disk_size,
|
||||
@ -3888,7 +3889,7 @@ int Xorriso_compare_2_contents(struct XorrisO *xorriso, char *common_adr,
|
||||
char *iso_adr, off_t iso_size,
|
||||
int *result, int flag)
|
||||
{
|
||||
int fd1= -1, ret, r1, r2, done, wanted, i;
|
||||
int fd1= -1, ret, r1, r2, done, wanted, i, was_error= 0;
|
||||
void *stream2= NULL;
|
||||
off_t r1count= 0, r2count= 0, diffcount= 0, first_diff= -1;
|
||||
char *respt, buf1[32*1024], buf2[32*1024], offset_text[80];
|
||||
@ -3952,6 +3953,9 @@ cannot_address:;
|
||||
else
|
||||
r2= 0;
|
||||
|
||||
if(r1<0 || r2<0)
|
||||
was_error= 1;
|
||||
|
||||
if(r1<=0 && r2<=0)
|
||||
break;
|
||||
if(r1<=0) {
|
||||
@ -4024,6 +4028,8 @@ cannot_address:;
|
||||
if(fd1!=-1)
|
||||
close(fd1);
|
||||
Xorriso_iso_file_close(xorriso, &stream2, 0);
|
||||
if(was_error)
|
||||
return(-1);
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -4064,7 +4070,7 @@ int Xorriso_compare_2_files(struct XorrisO *xorriso, char *disk_adr,
|
||||
int *result, int flag)
|
||||
{
|
||||
struct stat s1, s2, stbuf;
|
||||
int ret, missing= 0, is_split= 0, i;
|
||||
int ret, missing= 0, is_split= 0, i, was_error= 0;
|
||||
char *respt;
|
||||
char a[5*SfileadrL], sfe[5*SfileadrL];
|
||||
char ttx1[40], ttx2[40];
|
||||
@ -4228,6 +4234,8 @@ int Xorriso_compare_2_files(struct XorrisO *xorriso, char *disk_adr,
|
||||
offset, bytes,
|
||||
part_path, stbuf.st_size, result,
|
||||
(s1.st_mtime==s2.st_mtime) | (flag&((1<<29)|(1<<31))));
|
||||
if(ret<0)
|
||||
was_error= 1;
|
||||
}
|
||||
if(total_parts>0 && split_count!=total_parts) {
|
||||
sprintf(xorriso->info_text,
|
||||
@ -4242,11 +4250,15 @@ int Xorriso_compare_2_files(struct XorrisO *xorriso, char *disk_adr,
|
||||
(off_t) 0, s1.st_size,
|
||||
iso_adr, s2.st_size, result,
|
||||
(s1.st_mtime==s2.st_mtime) | (flag&((1<<29)|(1<<31))));
|
||||
if(ret<0)
|
||||
was_error= 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ret= (((*result)&~((1<<17)|(1<<18)))==0);
|
||||
if(was_error)
|
||||
ret= -1;
|
||||
else
|
||||
ret= (((*result)&~((1<<17)|(1<<18)))==0);
|
||||
ex:;
|
||||
if(split_parts!=NULL)
|
||||
Splitparts_destroy(&split_parts, split_count, 0);
|
||||
@ -4291,7 +4303,10 @@ int Xorriso_find_compare(struct XorrisO *xorriso, void *boss_iter,
|
||||
if(ret<xorriso->find_compare_result)
|
||||
xorriso->find_compare_result= ret;
|
||||
if(flag&1) {
|
||||
if(ret==0) {
|
||||
if(ret<=0) {
|
||||
if(ret<0)
|
||||
if(Xorriso_eval_problem_status(xorriso, ret, 1|2)<0)
|
||||
return(ret);
|
||||
uret= Xorriso_update_interpreter(xorriso, boss_iter, result,
|
||||
disk_path, iso_path, (flag&2)<<1);
|
||||
if(uret<=0)
|
||||
|
Reference in New Issue
Block a user