diff --git a/xorriso/iso_tree.c b/xorriso/iso_tree.c index 27b001da..94b15fc7 100644 --- a/xorriso/iso_tree.c +++ b/xorriso/iso_tree.c @@ -59,19 +59,21 @@ int Xorriso_normalize_img_path(struct XorrisO *xorriso, char *wd, IsoImage *volume; IsoDir *dir= NULL; IsoNode *node= NULL; - char path[SfileadrL], *apt, *npt, sfe[5*SfileadrL], *cpt; + char *path= NULL, *apt, *npt, *cpt; + + Xorriso_alloc_meM(path, char, SfileadrL); if((flag&64) || !(flag&2)) { ret= Xorriso_get_volume(xorriso, &volume, 0); if(ret<=0) - return(ret); + goto ex; } eff_path[0]= 0; if(img_path[0]==0) { if(flag&8) strcpy(eff_path, "/"); - return(2); /* root directory */ + {ret= 2; goto ex;} /* root directory */ } apt= npt= path; @@ -82,18 +84,18 @@ int Xorriso_normalize_img_path(struct XorrisO *xorriso, char *wd, goto much_too_long; } else if(Sfile_str(path, img_path, 0)<=0) - return(-1); + {ret= -1; goto ex;} if(path[0]!='/') { sprintf(xorriso->info_text, "Internal error: Unresolvable relative addressing in iso_rr_path '%s'", img_path); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FATAL", 0); - return(-1); + {ret= -1; goto ex;} } else if(path[1]==0) { if(flag&8) strcpy(eff_path, "/"); - return(2); /* root directory */ + {ret= 2; goto ex;} /* root directory */ } for(npt= apt; !done; apt= npt+1) { @@ -120,10 +122,10 @@ int Xorriso_normalize_img_path(struct XorrisO *xorriso, char *wd, if(node==NULL) { bonked_root:; sprintf(xorriso->info_text, - "Relative addressing in path exceeds root directory: %s", - Text_shellsafe(img_path, sfe, 0)); + "Relative addressing in path exceeds root directory: "); + Text_shellsafe(img_path, xorriso->info_text, 1); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); - return(-1); + {ret= -1; goto ex;} } dir= iso_node_get_parent(node); } @@ -141,13 +143,13 @@ much_too_long:; sprintf(xorriso->info_text, "Effective path gets much too long (%d)", (int) (strlen(eff_path)+strlen(apt)+1)); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); - return(-1); + {ret= -1; goto ex;} } if(!(flag&2)) { dir= (IsoDir *) node; ret= Xorriso_node_from_path(xorriso, volume, eff_path, &node, flag&1); if(ret<=0) - return(0); + {ret= 0; goto ex;} if(dir==NULL) /* could be false with "/dir/.." */ dir= iso_node_get_parent(node); is_dir= LIBISO_ISDIR(node); @@ -158,11 +160,14 @@ much_too_long:; 1|(4*(xorriso->do_follow_links || (xorriso->do_follow_param && !(flag&32))) )); if(ret<0) - return(0); + {ret= 0; goto ex;} if(ret==2) is_dir= 1; } - return(1+!!is_dir); + ret= 1+!!is_dir; +ex:; + Xorriso_free_meM(path); + return(ret); } @@ -171,21 +176,26 @@ int Xorriso_get_node_by_path(struct XorrisO *xorriso, IsoNode **node, int flag) { int ret; - char path[SfileadrL]; + char *path= NULL; IsoImage *volume; + Xorriso_alloc_meM(path, char, SfileadrL); + ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, in_path, path, 0); if(ret<=0) - return(ret); + goto ex; if(eff_path!=NULL) strcpy(eff_path, path); ret= Xorriso_get_volume(xorriso, &volume, 0); if(ret<=0) - return(ret); + goto ex; ret= Xorriso_node_from_path(xorriso, volume, path, node, 0); if(ret<=0) - return(0); - return(1); + {ret= 0; goto ex;} + ret= 1; +ex:; + Xorriso_free_meM(path); + return(ret); } @@ -1345,17 +1355,19 @@ int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd, int i, ret, was_error= 0, dfilec= 0, pass, passes, hidden_state= 0; IsoNode *node; IsoImage *volume; - char sfe[5*SfileadrL], sfe2[5*SfileadrL], path[SfileadrL]; - char link_target[SfileadrL], *rpt, **dfilev= NULL; + char *path= NULL, *link_target= NULL, *rpt, **dfilev= NULL; char *a_text= NULL, *d_text= NULL; off_t size; struct stat stbuf; + Xorriso_alloc_meM(path, char, SfileadrL); + Xorriso_alloc_meM(link_target, char, SfileadrL); + rpt= xorriso->result_line; ret= Xorriso_get_volume(xorriso, &volume, 0); if(ret<=0) - return(ret); + goto ex; Sort_argv(filec, filev, 0); @@ -1368,8 +1380,8 @@ int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd, } ret= Xorriso_node_from_path(xorriso, volume, path, &node, 1); if(ret<=0) { - sprintf(xorriso->info_text, "Not found in ISO image: %s", - Text_shellsafe(path, sfe, 0)); + sprintf(xorriso->info_text, "Not found in ISO image: "); + Text_shellsafe(path, xorriso->info_text, 1); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0); was_error++; continue; @@ -1380,7 +1392,7 @@ int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd, sprintf(xorriso->info_text, "Valid ISO nodes found: %d\n", filec-was_error); Xorriso_info(xorriso,1); if(filec-was_error<=0) - return(!was_error); + {ret= !was_error; goto ex;} } passes= 1+!(flag&(4|8)); @@ -1399,7 +1411,8 @@ int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd, if(filec>1) { strcpy(xorriso->result_line, "\n"); Xorriso_result(xorriso,0); - sprintf(xorriso->result_line, "%s:\n", Text_shellsafe(filev[i], sfe,0)); + Text_shellsafe(filev[i], xorriso->result_line, 0); + strcat(xorriso->result_line, ":\n"); Xorriso_result(xorriso,0); } ret= Xorriso_sorted_dir_i(xorriso, @@ -1443,22 +1456,27 @@ int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd, ret= Xorriso_show_du_subs(xorriso, (IsoDir *) node, path, filev[i], &size, boss_mem, flag&1); if(ret<0) - return(-1); + {ret= -1; goto ex;} if(ret==0) continue; } sprintf(rpt, "%7.f ",(double) (size/1024)); } - if(link_target[0] && (flag&5)==1) - sprintf(xorriso->result_line+strlen(xorriso->result_line), "%s -> %s\n", - Text_shellsafe(filev[i], sfe, 0), - Text_shellsafe(link_target, sfe2, 0)); - else - sprintf(xorriso->result_line+strlen(xorriso->result_line), "%s\n", - Text_shellsafe(filev[i], sfe, 0)); + if(link_target[0] && (flag&5)==1) { + Text_shellsafe(filev[i], xorriso->result_line, 1), + strcat(xorriso->result_line, " -> "); + Text_shellsafe(link_target, xorriso->result_line, 1); + } else { + Text_shellsafe(filev[i], xorriso->result_line, 1); + } + strcat(xorriso->result_line, "\n"); Xorriso_result(xorriso, 0); } - return(!was_error); + ret= !was_error; +ex:; + Xorriso_free_meM(path); + Xorriso_free_meM(link_target); + return(ret); } @@ -1476,9 +1494,11 @@ int Xorriso_ls(struct XorrisO *xorriso, int flag) IsoNode *node, **node_array= NULL; IsoDir *dir_node; IsoDirIter *iter= NULL; - char sfe[5*SfileadrL], sfe2[5*SfileadrL], link_target[SfileadrL], *npt, *rpt; + char *link_target= NULL, *npt, *rpt; struct stat stbuf; + Xorriso_alloc_meM(link_target, char, SfileadrL); + rpt= xorriso->result_line; ret= Xorriso_dir_from_path(xorriso, "Working directory", xorriso->wdi, @@ -1552,13 +1572,14 @@ cannot_create_iter:; if(ret<=0) continue; } - if(link_target[0] && (flag&1)) - sprintf(xorriso->result_line+strlen(xorriso->result_line), "%s -> %s\n", - Text_shellsafe(npt, sfe, 0), - Text_shellsafe(link_target, sfe2, 0)); - else - sprintf(xorriso->result_line+strlen(xorriso->result_line), "%s\n", - Text_shellsafe(npt, sfe, 0)); + if(link_target[0] && (flag&1)) { + Text_shellsafe(npt, xorriso->result_line, 1); + strcat(xorriso->result_line, " -> "); + Text_shellsafe(link_target, xorriso->result_line, 1); + } else { + Text_shellsafe(npt, xorriso->result_line, 1); + } + strcat(xorriso->result_line, "\n"); Xorriso_result(xorriso, 0); } @@ -1569,6 +1590,7 @@ ex:; Xorriso_process_msg_queues(xorriso,0); if(node_array!=NULL) free((char *) node_array); + Xorriso_free_meM(link_target); return(ret); } @@ -1658,7 +1680,6 @@ int Xorriso_expand_pattern(struct XorrisO *xorriso, { int ret, count= 0, abs_adr= 0, i, was_count, was_filec; int nonconst_mismatches= 0, dive_count= 0; - char sfe[5*SfileadrL]; IsoImage *volume; IsoDir *dir= NULL, *root_dir; IsoNode *iso_node; @@ -1699,9 +1720,10 @@ int Xorriso_expand_pattern(struct XorrisO *xorriso, dir= (IsoDir *) iso_node; if(ret<=0) { Xorriso_process_msg_queues(xorriso,0); - sprintf(xorriso->info_text, - "While expanding pattern %s : Working directory does not exist in ISO image", - Text_shellsafe(patterns[i], sfe, 0)); + sprintf(xorriso->info_text, "While expanding pattern "); + Text_shellsafe(patterns[i], xorriso->info_text, 1); + strcat(xorriso->info_text, + " : Working directory does not exist in ISO image"); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); ret= 0; goto ex; } @@ -2002,7 +2024,6 @@ int Xorriso_report_lba(struct XorrisO *xorriso, char *show_path, { 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); @@ -2014,9 +2035,10 @@ int Xorriso_report_lba(struct XorrisO *xorriso, char *show_path, {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)); + "File data lba: %2d , %8d , %8d , %8.f , ", + i, start_lbas[i], end_lbas[i] + 1 - start_lbas[i], (double) size); + Text_shellsafe(show_path, xorriso->result_line, 1); + strcat(xorriso->result_line, "\n"); Xorriso_result(xorriso, 0); } ret= 1; @@ -2034,7 +2056,6 @@ int Xorriso_report_damage(struct XorrisO *xorriso, char *show_path, { int ret; off_t size= 0, damage_start, damage_end; - char sfe[5*SfileadrL]; ret= Xorriso_file_eval_damage(xorriso, node, &damage_start, &damage_end, 0); if(ret < 0) @@ -2043,15 +2064,16 @@ int Xorriso_report_damage(struct XorrisO *xorriso, char *show_path, if(LIBISO_ISREG(node)) size= iso_file_get_size((IsoFile *) node); if(ret > 0) { - sprintf(xorriso->result_line, "File damaged : %8.f , %8.f , %8.f , %s\n", + sprintf(xorriso->result_line, "File damaged : %8.f , %8.f , %8.f , ", (double) damage_start, (double) (damage_end - damage_start) , - (double) size, Text_shellsafe(show_path, sfe, 0)); - Xorriso_result(xorriso, 0); + (double) size); } else { - sprintf(xorriso->result_line, "File seems ok: %8.f , %8.f , %8.f , %s\n", - -1.0, -1.0, (double) size, Text_shellsafe(show_path, sfe, 0)); - Xorriso_result(xorriso, 0); + sprintf(xorriso->result_line, "File seems ok: %8.f , %8.f , %8.f , ", + -1.0, -1.0, (double) size); } + Text_shellsafe(show_path, xorriso->result_line, 1); + strcat(xorriso->result_line, "\n"); + Xorriso_result(xorriso, 0); return(1); } @@ -2111,7 +2133,7 @@ int Xorriso_node_from_path(struct XorrisO *xorriso, IsoImage *volume, char *path, IsoNode **node, int flag) { int ret; - char sfe[5*SfileadrL], *path_pt; + char *path_pt; path_pt= path; if(path[0]==0) @@ -2126,8 +2148,9 @@ int Xorriso_node_from_path(struct XorrisO *xorriso, IsoImage *volume, Xorriso_process_msg_queues(xorriso,0); if(ret<=0 || (*node)==NULL) { if(!(flag&1)) { - sprintf(xorriso->info_text, "Cannot find path %s in loaded ISO image", - Text_shellsafe(path_pt, sfe, 0)); + sprintf(xorriso->info_text, "Cannot find path "); + Text_shellsafe(path_pt, xorriso->info_text, 1); + strcat(xorriso->info_text, " in loaded ISO image"); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); } return(0); diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 3a138619..c58de463 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2011.05.04.152314" +#define Xorriso_timestamP "2011.05.04.165840"