From ddf698c1c45f04e5613a1f4a6a7e845b9e68bd71 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Thu, 15 May 2008 19:20:59 +0000 Subject: [PATCH] Bug fix: -update_r and others did not work properly with relative paths --- xorriso/xorriso.c | 63 +++++++++++++++++++++++-------------- xorriso/xorriso_timestamp.h | 2 +- 2 files changed, 41 insertions(+), 24 deletions(-) diff --git a/xorriso/xorriso.c b/xorriso/xorriso.c index ce6f4fbd..0f43fb47 100644 --- a/xorriso/xorriso.c +++ b/xorriso/xorriso.c @@ -5054,6 +5054,8 @@ int Xorriso_warn_of_wildcards(struct XorrisO *xorriso, char *path, int flag) (flag&2) ? "-disk_pattern" : "-iso_rr_pattern"); } 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(0); @@ -8206,14 +8208,21 @@ int Xorriso_option_compare(struct XorrisO *xorriso, char *disk_path, { int ret, mem_pci, zero= 0, result, follow_links; double mem_lut= 0.0; - char *ipth, *argv[6]; + char *ipth, *argv[6], eff_origin[SfileadrL], eff_dest[SfileadrL]; ipth= iso_path; if(ipth[0]==0) 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) - ret= Xorriso_path_is_excluded(xorriso, disk_path, 1); + ret= Xorriso_path_is_excluded(xorriso, eff_origin, 1); else ret= 0; if(ret!=0) @@ -8227,26 +8236,26 @@ int Xorriso_option_compare(struct XorrisO *xorriso, char *disk_path, if(flag&8) { xorriso->find_compare_result= 1; - argv[0]= ipth; + argv[0]= eff_dest; argv[1]= "-exec"; argv[2]= "compare"; - argv[3]= disk_path; + argv[3]= eff_origin; zero= 0; ret= Xorriso_option_find(xorriso, 4, argv, &zero, 2); /* -findi */ if(ret>0) { - argv[0]= disk_path; + argv[0]= eff_origin; argv[1]= "-exec"; argv[2]= "not_in_iso"; - argv[3]= ipth; + argv[3]= eff_dest; zero= 0; ret= Xorriso_option_find(xorriso, 4, argv, &zero, 1|2); /* -findx */ if(ret>0 && !xorriso->do_follow_mount) { - argv[0]= disk_path; + argv[0]= eff_origin; argv[1]= "-type"; argv[2]= "m"; argv[3]= "-exec"; argv[4]= "is_full_in_iso"; - argv[5]= ipth; + argv[5]= eff_dest; zero= 0; 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; } else { 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)); } @@ -10775,6 +10784,7 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path, int not_in_iso= 0, not_on_disk= 0; double mem_lut= 0.0, start_time; char *ipth, *argv[6], sfe[5*SfileadrL]; + char eff_origin[SfileadrL], eff_dest[SfileadrL]; struct stat stbuf; start_time= Sfile_microtime(0); @@ -10782,6 +10792,13 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path, ipth= iso_path; if(ipth[0]==0) 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)) { Xorriso_pacifier_reset(xorriso, 0); @@ -10792,25 +10809,25 @@ int Xorriso_option_update(struct XorrisO *xorriso, char *disk_path, if(flag&1) { 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", - Text_shellsafe(ipth, sfe, 0)); + Text_shellsafe(eff_dest, sfe, 0)); Xorriso_info(xorriso,0); } 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 ret= 0; if(ret!=0) goto report_outcome; if(flag&8) { 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) { - argv[0]= ipth; + argv[0]= eff_dest; argv[1]= "-exec"; argv[2]= "update"; - argv[3]= disk_path; + argv[3]= eff_origin; zero= 0; ret= Xorriso_option_find(xorriso, 4, argv, &zero, 2); /* -findi */ } 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; } if(ret>0) { - ret= lstat(disk_path, &stbuf); + ret= lstat(eff_origin, &stbuf); if(ret != -1) { - argv[0]= disk_path; + argv[0]= eff_origin; argv[1]= "-exec"; argv[2]= "add_missing"; - argv[3]= ipth; + argv[3]= eff_dest; zero= 0; ret= Xorriso_option_find(xorriso, 4, argv, &zero, 1|2); /* -findx */ if(ret>0 && !xorriso->do_follow_mount) { - argv[0]= disk_path; + argv[0]= eff_origin; argv[1]= "-type"; argv[2]= "m"; argv[3]= "-exec"; argv[4]= "empty_iso_dir"; - argv[5]= ipth; + argv[5]= eff_dest; zero= 0; 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 { /* compare ctime too, no filename reporting, eventually silent */ 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)); if(ret==0) { - uret= Xorriso_update_interpreter(xorriso, NULL, result, disk_path, ipth, - 0); + uret= Xorriso_update_interpreter(xorriso, NULL, result, eff_origin, + eff_dest, 0); if(uret<=0) ret= -1; if(uret==3) diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 63701720..f46512f6 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2008.05.15.150041" +#define Xorriso_timestamP "2008.05.15.192118"