Bug fix: -update_r and others did not work properly with relative paths

This commit is contained in:
Thomas Schmitt 2008-05-15 19:20:59 +00:00
parent 74da4d1749
commit ddf698c1c4
2 changed files with 41 additions and 24 deletions

View File

@ -5054,6 +5054,8 @@ int Xorriso_warn_of_wildcards(struct XorrisO *xorriso, char *path, int flag)
(flag&2) ? "-disk_pattern" : "-iso_rr_pattern"); (flag&2) ? "-disk_pattern" : "-iso_rr_pattern");
} }
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
sprintf(xorriso->info_text,"Pattern seen: %s\n", path);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
return(1); return(1);
} }
return(0); return(0);
@ -8206,14 +8208,21 @@ int Xorriso_option_compare(struct XorrisO *xorriso, char *disk_path,
{ {
int ret, mem_pci, zero= 0, result, follow_links; int ret, mem_pci, zero= 0, result, follow_links;
double mem_lut= 0.0; double mem_lut= 0.0;
char *ipth, *argv[6]; char *ipth, *argv[6], eff_origin[SfileadrL], eff_dest[SfileadrL];
ipth= iso_path; ipth= iso_path;
if(ipth[0]==0) if(ipth[0]==0)
ipth= disk_path; ipth= disk_path;
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdx, disk_path, eff_origin,
2|4);
if(ret<=0)
return(ret);
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, ipth, eff_dest, 2);
if(ret<=0)
return(ret);
if(xorriso->disk_excl_mode&8) if(xorriso->disk_excl_mode&8)
ret= Xorriso_path_is_excluded(xorriso, disk_path, 1); ret= Xorriso_path_is_excluded(xorriso, eff_origin, 1);
else else
ret= 0; ret= 0;
if(ret!=0) if(ret!=0)
@ -8227,26 +8236,26 @@ int Xorriso_option_compare(struct XorrisO *xorriso, char *disk_path,
if(flag&8) { if(flag&8) {
xorriso->find_compare_result= 1; xorriso->find_compare_result= 1;
argv[0]= ipth; argv[0]= eff_dest;
argv[1]= "-exec"; argv[1]= "-exec";
argv[2]= "compare"; argv[2]= "compare";
argv[3]= disk_path; argv[3]= eff_origin;
zero= 0; zero= 0;
ret= Xorriso_option_find(xorriso, 4, argv, &zero, 2); /* -findi */ ret= Xorriso_option_find(xorriso, 4, argv, &zero, 2); /* -findi */
if(ret>0) { if(ret>0) {
argv[0]= disk_path; argv[0]= eff_origin;
argv[1]= "-exec"; argv[1]= "-exec";
argv[2]= "not_in_iso"; argv[2]= "not_in_iso";
argv[3]= ipth; argv[3]= eff_dest;
zero= 0; zero= 0;
ret= Xorriso_option_find(xorriso, 4, argv, &zero, 1|2); /* -findx */ ret= Xorriso_option_find(xorriso, 4, argv, &zero, 1|2); /* -findx */
if(ret>0 && !xorriso->do_follow_mount) { if(ret>0 && !xorriso->do_follow_mount) {
argv[0]= disk_path; argv[0]= eff_origin;
argv[1]= "-type"; argv[1]= "-type";
argv[2]= "m"; argv[2]= "m";
argv[3]= "-exec"; argv[3]= "-exec";
argv[4]= "is_full_in_iso"; argv[4]= "is_full_in_iso";
argv[5]= ipth; argv[5]= eff_dest;
zero= 0; zero= 0;
ret= Xorriso_option_find(xorriso, 6, argv, &zero, 1|2); /* -findx */ ret= Xorriso_option_find(xorriso, 6, argv, &zero, 1|2); /* -findx */
} }
@ -8258,7 +8267,7 @@ int Xorriso_option_compare(struct XorrisO *xorriso, char *disk_path,
ret= -1; ret= -1;
} else { } else {
follow_links= (xorriso->do_follow_links || xorriso->do_follow_param) << 28; follow_links= (xorriso->do_follow_links || xorriso->do_follow_param) << 28;
ret= Xorriso_compare_2_files(xorriso, disk_path, ipth, "", &result, ret= Xorriso_compare_2_files(xorriso, eff_origin, eff_dest, "", &result,
2 | follow_links | ((flag&4)<<27) | (1<<30)); 2 | follow_links | ((flag&4)<<27) | (1<<30));
} }
@ -10775,6 +10784,7 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
int not_in_iso= 0, not_on_disk= 0; int not_in_iso= 0, not_on_disk= 0;
double mem_lut= 0.0, start_time; double mem_lut= 0.0, start_time;
char *ipth, *argv[6], sfe[5*SfileadrL]; char *ipth, *argv[6], sfe[5*SfileadrL];
char eff_origin[SfileadrL], eff_dest[SfileadrL];
struct stat stbuf; struct stat stbuf;
start_time= Sfile_microtime(0); start_time= Sfile_microtime(0);
@ -10782,6 +10792,13 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
ipth= iso_path; ipth= iso_path;
if(ipth[0]==0) if(ipth[0]==0)
ipth= disk_path; ipth= disk_path;
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdx, disk_path, eff_origin,
2|4);
if(ret<=0)
return(ret);
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, ipth, eff_dest, 2);
if(ret<=0)
return(ret);
if(!(flag&2)) { if(!(flag&2)) {
Xorriso_pacifier_reset(xorriso, 0); Xorriso_pacifier_reset(xorriso, 0);
@ -10792,25 +10809,25 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
if(flag&1) { if(flag&1) {
sprintf(xorriso->info_text, "Updating %s to", sprintf(xorriso->info_text, "Updating %s to",
Text_shellsafe(disk_path, sfe, 0)); Text_shellsafe(eff_origin, sfe, 0));
sprintf(xorriso->info_text+strlen(xorriso->info_text), " %s\n", sprintf(xorriso->info_text+strlen(xorriso->info_text), " %s\n",
Text_shellsafe(ipth, sfe, 0)); Text_shellsafe(eff_dest, sfe, 0));
Xorriso_info(xorriso,0); Xorriso_info(xorriso,0);
} }
if(xorriso->disk_excl_mode&8) if(xorriso->disk_excl_mode&8)
ret= Xorriso_path_is_excluded(xorriso, disk_path, 1); ret= Xorriso_path_is_excluded(xorriso, eff_origin, 1);
else else
ret= 0; ret= 0;
if(ret!=0) if(ret!=0)
goto report_outcome; goto report_outcome;
if(flag&8) { if(flag&8) {
xorriso->find_compare_result= 1; xorriso->find_compare_result= 1;
ret= Xorriso_iso_lstat(xorriso, ipth, &stbuf, 0); ret= Xorriso_iso_lstat(xorriso, eff_dest, &stbuf, 0);
if(ret >= 0) { if(ret >= 0) {
argv[0]= ipth; argv[0]= eff_dest;
argv[1]= "-exec"; argv[1]= "-exec";
argv[2]= "update"; argv[2]= "update";
argv[3]= disk_path; argv[3]= eff_origin;
zero= 0; zero= 0;
ret= Xorriso_option_find(xorriso, 4, argv, &zero, 2); /* -findi */ ret= Xorriso_option_find(xorriso, 4, argv, &zero, 2); /* -findi */
} else if(ret==-2) { /* severe error (e.g. lack of image) */ } else if(ret==-2) { /* severe error (e.g. lack of image) */
@ -10821,21 +10838,21 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
ret= 1; ret= 1;
} }
if(ret>0) { if(ret>0) {
ret= lstat(disk_path, &stbuf); ret= lstat(eff_origin, &stbuf);
if(ret != -1) { if(ret != -1) {
argv[0]= disk_path; argv[0]= eff_origin;
argv[1]= "-exec"; argv[1]= "-exec";
argv[2]= "add_missing"; argv[2]= "add_missing";
argv[3]= ipth; argv[3]= eff_dest;
zero= 0; zero= 0;
ret= Xorriso_option_find(xorriso, 4, argv, &zero, 1|2); /* -findx */ ret= Xorriso_option_find(xorriso, 4, argv, &zero, 1|2); /* -findx */
if(ret>0 && !xorriso->do_follow_mount) { if(ret>0 && !xorriso->do_follow_mount) {
argv[0]= disk_path; argv[0]= eff_origin;
argv[1]= "-type"; argv[1]= "-type";
argv[2]= "m"; argv[2]= "m";
argv[3]= "-exec"; argv[3]= "-exec";
argv[4]= "empty_iso_dir"; argv[4]= "empty_iso_dir";
argv[5]= ipth; argv[5]= eff_dest;
zero= 0; zero= 0;
ret= Xorriso_option_find(xorriso, 6, argv, &zero, 1|2); /* -findx */ ret= Xorriso_option_find(xorriso, 6, argv, &zero, 1|2); /* -findx */
} }
@ -10858,11 +10875,11 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path,
} else { } else {
/* compare ctime too, no filename reporting, eventually silent */ /* compare ctime too, no filename reporting, eventually silent */
follow_links= (xorriso->do_follow_links || xorriso->do_follow_param) <<28; follow_links= (xorriso->do_follow_links || xorriso->do_follow_param) <<28;
ret= Xorriso_compare_2_files(xorriso, disk_path, ipth, "", &result, ret= Xorriso_compare_2_files(xorriso, eff_origin, eff_dest, "", &result,
2 | follow_links | ((flag&4)<<27) | (3<<30)); 2 | follow_links | ((flag&4)<<27) | (3<<30));
if(ret==0) { if(ret==0) {
uret= Xorriso_update_interpreter(xorriso, NULL, result, disk_path, ipth, uret= Xorriso_update_interpreter(xorriso, NULL, result, eff_origin,
0); eff_dest, 0);
if(uret<=0) if(uret<=0)
ret= -1; ret= -1;
if(uret==3) if(uret==3)

View File

@ -1 +1 @@
#define Xorriso_timestamP "2008.05.15.150041" #define Xorriso_timestamP "2008.05.15.192118"