LBA sorted processing of -compare_r and -update_r for smoother MMC reading

This commit is contained in:
2009-05-16 16:56:21 +00:00
parent 4fdf92da42
commit 9b33a3eaf6
5 changed files with 226 additions and 15 deletions

View File

@ -5378,6 +5378,11 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->start_time= 0.0;
m->last_update_time= 0.0;
m->find_compare_result= 1;
m->node_counter= 0;
m->node_array_size= 0;
m->node_array= NULL;
m->perm_stack= NULL;
m->result_line[0]= 0;
m->result_line_counter= 0;
@ -5443,6 +5448,16 @@ int Xorriso_destroy_re(struct XorrisO *m, int flag)
}
int Xorriso_destroy_node_array(struct XorrisO *xorriso, int flag)
{
if(xorriso->node_array != NULL)
free(xorriso->node_array);
xorriso->node_array= NULL;
xorriso->node_counter= xorriso->node_array_size= 0;
return(1);
}
/* @param flag bit0= global shutdown of libraries */
int Xorriso_destroy(struct XorrisO **xorriso, int flag)
{
@ -5461,6 +5476,8 @@ int Xorriso_destroy(struct XorrisO **xorriso, int flag)
Xorriso_lst_destroy_all(&(m->drive_blacklist), 0);
Xorriso_lst_destroy_all(&(m->drive_greylist), 0);
Xorriso_lst_destroy_all(&(m->drive_whitelist), 0);
if(m->node_array != NULL)
free(m->node_array);
Xorriso_detach_libraries(m, flag&1);
free((char *) m);
@ -13961,7 +13978,8 @@ int Xorriso_option_compare(struct XorrisO *xorriso, char *disk_path,
argv[2]= "compare";
argv[3]= eff_origin;
zero= 0;
ret= Xorriso_option_find(xorriso, 4, argv, &zero, 2); /* -findi */
ret= Xorriso_option_find(xorriso, 4, argv, &zero,
2 | (8 * !((xorriso->do_aaip & 96) == 96))); /* -findi */
if(ret>0) {
argv[0]= eff_origin;
argv[1]= "-exec";
@ -14746,6 +14764,7 @@ ex:;
bit1= do not reset pacifier, no final pacifier message
do not reset find_compare_result
bit2= do not count deleted files with rm and rm_r
bit3= use Xorriso_findi_sorted() rather than Xorriso_findi()
*/
int Xorriso_option_find(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag)
@ -15082,7 +15101,10 @@ sorry_ex:;
if(flag&1)
ret= Xorriso_findx(xorriso, first_job, "", start_path, &dir_stbuf, 0, NULL,
0);
else
else if(flag & 8) {
cpt= start_path;
ret= Xorriso_findi_sorted(xorriso, first_job, 1, &cpt, 0);
} else
ret= Xorriso_findi(xorriso, first_job, NULL, (off_t) 0, NULL,
start_path, &dir_stbuf, 0, (flag&4)>>1);
ex:;
@ -18132,7 +18154,8 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
argv[2]= "update";
argv[3]= eff_origin;
zero= 0;
ret= Xorriso_option_find(xorriso, 4, argv, &zero, 2); /* -findi */
ret= Xorriso_option_find(xorriso, 4, argv, &zero,
2 | (8 * !((xorriso->do_aaip & 96) == 96))); /* -findi */
} else if(ret==-2) { /* severe error (e.g. lack of image) */
ret= -1;
goto report_outcome;
@ -18474,7 +18497,7 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
"chmod_r","chmod_ri","chown","chowni","chown_r","chown_ri",
"compare_l","cpr","cpri","cp_rax","cp_rx","cpax","cpx",
"du","dui","dus","dusi","dux","dusx","external_filter","extract_l",
"file_size_limit","find","findi","findx",
"file_size_limit","find","findi","finds","findx",
"getfacl","getfacli","getfacl_r","getfacl_ri",
"getfattr","getfattri","getfattr_r","getfattr_ri",
"ls","lsi","lsl","lsli","lsd","lsdi","lsdl","lsdli",
@ -18832,6 +18855,9 @@ next_command:;
} else if(strcmp(cmd,"find")==0 || strcmp(cmd,"findi")==0) {
ret= Xorriso_option_find(xorriso, argc, argv, idx, 0);
} else if(strcmp(cmd,"find_sorted")==0) {
ret= Xorriso_option_find(xorriso, argc, argv, idx, 8);
} else if(strcmp(cmd,"findx")==0) {
ret= Xorriso_option_find(xorriso, argc, argv, idx, 1);