diff --git a/xorriso/findjob.h b/xorriso/findjob.h index f90b7987..9490c697 100644 --- a/xorriso/findjob.h +++ b/xorriso/findjob.h @@ -171,6 +171,7 @@ struct FindjoB { 48= get_hfs_bless 49= internal: update creator, type, and blessings from persistent isofs.* 50= print_outname namespace + 51= report_sections */ int action; int prune; diff --git a/xorriso/iso_manip.c b/xorriso/iso_manip.c index 7ca2d7e6..f4a4d3ce 100644 --- a/xorriso/iso_manip.c +++ b/xorriso/iso_manip.c @@ -2762,11 +2762,14 @@ int Xorriso_findi_action(struct XorrisO *xorriso, struct FindjoB *job, } ret= 1; - } else if(action == 50) { + } else if(action == 50) { /* print_outname */ ret= Xorriso_test_outchar(xorriso, (void *) node, type, 1); if(ret <= 0) return(ret); + } else if(action == 51) { /* report_sections */ + ret= Xorriso_report_lba(xorriso, show_path, node, 1); + } else { /* includes : 15 in_iso */ Xorriso_esc_filepath(xorriso, show_path, xorriso->result_line, 0); strcat(xorriso->result_line, "\n"); @@ -2841,7 +2844,7 @@ return: void *arg1, *arg2; char ft, *decision, md5[16], bless_code[17]; regmatch_t name_match; - off_t damage_start, damage_end, size; + off_t damage_start, damage_end, size, *section_sizes= NULL; void *xinfo_dummy; IsoNode *node; IsoStream *stream; @@ -2928,8 +2931,8 @@ return: value= !(start_lba >= 0); goto ex; } - ret= Xorriso__start_end_lbas(node, &lba_count, - &file_start_lbas, &file_end_lbas, &size, 0); + ret= Xorriso__start_end_lbas(node, &lba_count, &file_start_lbas, + &file_end_lbas, §ion_sizes, &size, 0); if(ret <= 0) { if(ret < 0) Xorriso_process_msg_queues(xorriso, 0); @@ -3095,6 +3098,8 @@ ex:; free((char *) file_start_lbas); if(file_end_lbas != NULL) free((char *) file_end_lbas); + if(section_sizes != NULL) + free((char *) section_sizes); return(value); } @@ -3125,10 +3130,11 @@ int Xorriso_findi_headline(struct XorrisO *xorriso, struct FindjoB *job, sprintf(xorriso->result_line, "Report layout: %8s , %8s , %8s , %s\n", "at byte", "Range", "Filesize", "ISO image path"); Xorriso_result(xorriso, 0); - } else if(action == 22) { /* report_lba */ + } else if(action == 22 || action == 51) { /* report_lba, report_sections */ sprintf(xorriso->result_line, "Report layout: %2s , %8s , %8s , %8s , %s\n", - "xt", "Startlba", "Blocks", "Filesize", "ISO image path"); + "xt", "Startlba", "Blocks", action == 22 ? "Filesize" : "Sectsize", + "ISO image path"); Xorriso_result(xorriso, 0); } return(1); diff --git a/xorriso/iso_tree.c b/xorriso/iso_tree.c index 53a9ba31..035255a9 100644 --- a/xorriso/iso_tree.c +++ b/xorriso/iso_tree.c @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2012 Thomas Schmitt, + Copyright 2007-2014 Thomas Schmitt, Provided under GPL version 2 or later. @@ -133,7 +133,7 @@ bonked_root:; } dir= iso_node_get_parent(node); - /* >>> Get absolute path of dir as eff_path, to avoid link problems */; + /* >>> Get absolute path of node as eff_path, to avoid link problems */; } if(flag & 4) { @@ -156,7 +156,6 @@ bonked_root:; goto bonked_root; *cpt= 0; is_dir= 1; - continue; } is_dir= 0; @@ -2041,13 +2040,14 @@ ex:; int Xorriso__start_end_lbas(IsoNode *node, int *lba_count, int **start_lbas, int **end_lbas, - off_t *size, int flag) + off_t **section_sizes, off_t *size, int flag) { int section_count= 0, ret, i; struct iso_file_section *sections= NULL; *lba_count= 0; *start_lbas= *end_lbas= NULL; + *section_sizes= NULL; *size= 0; if(!LIBISO_ISREG(node)) return(0); @@ -2060,13 +2060,15 @@ int Xorriso__start_end_lbas(IsoNode *node, {ret= 0; goto ex;} *start_lbas= calloc(section_count, sizeof(int)); *end_lbas= calloc(section_count, sizeof(int)); - if(*start_lbas == NULL || *end_lbas == NULL) + *section_sizes= calloc(section_count, sizeof(off_t)); + if(*start_lbas == NULL || *end_lbas == NULL || *section_sizes == NULL) {ret= -1; goto ex;} for(i= 0; i < section_count; i++) { (*start_lbas)[i]= sections[i].block; (*end_lbas)[i]= sections[i].block + sections[i].size / 2048 - 1; if(sections[i].size % 2048) (*end_lbas)[i]++; + (*section_sizes)[i]= sections[i].size; } *lba_count= section_count; ret= 1; @@ -2089,11 +2091,11 @@ int Xorriso__file_start_lba(IsoNode *node, int *lba, int flag) { int *start_lbas= NULL, *end_lbas= NULL, lba_count= 0, i, ret; - off_t size; + off_t size, *section_sizes= NULL; *lba= -1; ret= Xorriso__start_end_lbas(node, &lba_count, &start_lbas, &end_lbas, - &size, 0); + §ion_sizes, &size, 0); if(ret <= 0) return(ret); for(i= 0; i < lba_count; i++) { @@ -2104,6 +2106,8 @@ int Xorriso__file_start_lba(IsoNode *node, free((char *) start_lbas); if(end_lbas != NULL) free((char *) end_lbas); + if(section_sizes != NULL) + free((char *) section_sizes); if(*lba < 0) return(0); return(1); @@ -2291,7 +2295,7 @@ int Xorriso_file_eval_damage(struct XorrisO *xorriso, IsoNode *node, { int *start_lbas= NULL, *end_lbas= NULL, lba_count= 0, sect; int i, sectors, sector_size, ret; - off_t sect_base= 0, size= 0, byte; + off_t sect_base= 0, size= 0, byte, *section_sizes= NULL; struct SectorbitmaP *map; *damage_start= *damage_end= -1; @@ -2302,7 +2306,7 @@ int Xorriso_file_eval_damage(struct XorrisO *xorriso, IsoNode *node, sector_size/= 2048; ret= Xorriso__start_end_lbas(node, &lba_count, &start_lbas, &end_lbas, - &size, 0); + §ion_sizes, &size, 0); if(ret <= 0) { Xorriso_process_msg_queues(xorriso, 0); return(ret); @@ -2326,20 +2330,24 @@ int Xorriso_file_eval_damage(struct XorrisO *xorriso, IsoNode *node, free((char *) start_lbas); if(end_lbas != NULL) free((char *) end_lbas); + if(section_sizes != NULL) + free((char *) section_sizes); if(*damage_start < 0) return(0); return(1); } +/* @param flag bit0= report_sections : section size rather than total size +*/ int Xorriso_report_lba(struct XorrisO *xorriso, char *show_path, IsoNode *node, int flag) { int ret, *start_lbas= NULL, *end_lbas= NULL, lba_count, i; - off_t size; + off_t size, *section_sizes= NULL; ret= Xorriso__start_end_lbas(node, &lba_count, &start_lbas, &end_lbas, - &size, 0); + §ion_sizes, &size, 0); if(ret < 0) { Xorriso_process_msg_queues(xorriso, 0); {ret= -1; goto ex;} @@ -2347,6 +2355,8 @@ int Xorriso_report_lba(struct XorrisO *xorriso, char *show_path, if(ret == 0) {ret= 1; goto ex;} /* it is ok to ignore other types */ for(i= 0; i < lba_count; i++) { + if(flag & 1) + size= section_sizes[i]; sprintf(xorriso->result_line, "File data lba: %2d , %8d , %8d , %8.f , ", i, start_lbas[i], end_lbas[i] + 1 - start_lbas[i], (double) size); @@ -2360,6 +2370,8 @@ ex:; free((char *) start_lbas); if(end_lbas != NULL) free((char *) end_lbas); + if(section_sizes != NULL) + free((char *) section_sizes); return(ret); } diff --git a/xorriso/iso_tree.h b/xorriso/iso_tree.h index 85224582..fb3f0c49 100644 --- a/xorriso/iso_tree.h +++ b/xorriso/iso_tree.h @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2011 Thomas Schmitt, + Copyright 2007-2014 Thomas Schmitt, Provided under GPL version 2 or later. @@ -73,7 +73,7 @@ int Xorriso_obtain_pattern_files_i( int Xorriso__start_end_lbas(IsoNode *node, int *lba_count, int **start_lbas, int **end_lbas, - off_t *size, int flag); + off_t **section_sizes, off_t *size, int flag); int Xorriso__file_start_lba(IsoNode *node, int *lba, int flag); diff --git a/xorriso/opts_d_h.c b/xorriso/opts_d_h.c index 93d6b3be..f7e04e67 100644 --- a/xorriso/opts_d_h.c +++ b/xorriso/opts_d_h.c @@ -1217,7 +1217,8 @@ not_enough_exec_arguments:; ret= 0; goto sorry_ex; } Findjob_set_action_type(job, 50, name_space, 0); - + } else if(strcmp(cpt, "report_sections")==0) { + Findjob_set_action_target(job, 51, NULL, 0); } else { sprintf(xorriso->info_text, "-find -exec: unknown action "); Text_shellsafe(argv[i], xorriso->info_text, 1); diff --git a/xorriso/read_run.c b/xorriso/read_run.c index 6461b52d..eca0d931 100644 --- a/xorriso/read_run.c +++ b/xorriso/read_run.c @@ -1939,6 +1939,7 @@ int Xorriso_read_file_data(struct XorrisO *xorriso, IsoNode *node, int lba, count, blocks, quality, spot, bad_extract= 0; off_t size= 0, file_base_bytes= 0, file_processed_bytes= 0, img_adr; off_t new_file_base_bytes, upto_file_bytes, start_byte= 0; + off_t *section_sizes = NULL; struct SpotlisT *spotlist= NULL; struct CheckmediajoB *job= NULL; @@ -1952,8 +1953,8 @@ int Xorriso_read_file_data(struct XorrisO *xorriso, IsoNode *node, ret= 0; goto ex; } - ret= Xorriso__start_end_lbas(node, &lba_count, &start_lbas, &end_lbas, &size, - 0); + ret= Xorriso__start_end_lbas(node, &lba_count, &start_lbas, &end_lbas, + §ion_sizes, &size, 0); if(ret <= 0) { Xorriso_process_msg_queues(xorriso,0); sprintf(xorriso->info_text, "File object "); @@ -2058,6 +2059,8 @@ ex:; free((char *) start_lbas); if(end_lbas != NULL) free((char *) end_lbas); + if(section_sizes != NULL) + free((char *) section_sizes); Spotlist_destroy(&spotlist, 0); Checkmediajob_destroy(&job, 0); return(ret); diff --git a/xorriso/xorriso.1 b/xorriso/xorriso.1 index 5d3f8f40..cea2fb18 100644 --- a/xorriso/xorriso.1 +++ b/xorriso/xorriso.1 @@ -9,7 +9,7 @@ .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) -.TH XORRISO 1 "Version 1.3.7, May 18, 2014" +.TH XORRISO 1 "Version 1.3.7, Jun 13, 2014" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -1956,8 +1956,12 @@ path of the file. prints files which are associated to image data blocks. It tells the logical block address, the block number, the byte size, and the path of each file. There may be reported more than one -line per file if the file is very large. In this case each line has a -different extent number in column "xt". +line per file if the file has more than one section. +In this case each line has a different extent number in column "xt". +.br +\fBreport_sections\fR +like report_lba but telling the byte sizes of the particular sections rather +than the overall byte size of the file. .br \fBgetfacl\fR prints access permissions in ACL text form to the result channel. diff --git a/xorriso/xorriso.info b/xorriso/xorriso.info index 7c7306d4..bdcfbb1e 100644 --- a/xorriso/xorriso.info +++ b/xorriso/xorriso.info @@ -1746,8 +1746,12 @@ File: xorriso.info, Node: CmdFind, Next: Filter, Prev: Manip, Up: Commands prints files which are associated to image data blocks. It tells the logical block address, the block number, the byte size, and the path of each file. There may be reported more - than one line per file if the file is very large. In this - case each line has a different extent number in column "xt". + than one line per file if the file has more than one section. + In this case each line has a different extent number in + column "xt". + report_sections + like report_lba but telling the byte sizes of the particular + sections rather than the overall byte size of the file. getfacl prints access permissions in ACL text form to the result channel. @@ -5545,43 +5549,43 @@ Node: Insert47999 Node: SetInsert58213 Node: Manip67033 Node: CmdFind76813 -Node: Filter94084 -Node: Writing98706 -Node: SetWrite108837 -Node: Bootable129543 -Node: Jigdo146910 -Node: Charset151157 -Node: Exception154472 -Node: DialogCtl160592 -Node: Inquiry163190 -Node: Navigate170621 -Node: Verify178919 -Node: Restore188746 -Node: Emulation197350 -Node: Scripting207738 -Node: Frontend215509 -Node: Examples225116 -Node: ExDevices226294 -Node: ExCreate226960 -Node: ExDialog228245 -Node: ExGrowing229510 -Node: ExModifying230315 -Node: ExBootable230819 -Node: ExCharset231371 -Node: ExPseudo232263 -Node: ExCdrecord233161 -Node: ExMkisofs233478 -Node: ExGrowisofs234818 -Node: ExException235953 -Node: ExTime236407 -Node: ExIncBackup236866 -Node: ExRestore240856 -Node: ExRecovery241789 -Node: Files242359 -Node: Seealso243658 -Node: Bugreport244381 -Node: Legal244962 -Node: CommandIdx245973 -Node: ConceptIdx262854 +Node: Filter94263 +Node: Writing98885 +Node: SetWrite109016 +Node: Bootable129722 +Node: Jigdo147089 +Node: Charset151336 +Node: Exception154651 +Node: DialogCtl160771 +Node: Inquiry163369 +Node: Navigate170800 +Node: Verify179098 +Node: Restore188925 +Node: Emulation197529 +Node: Scripting207917 +Node: Frontend215688 +Node: Examples225295 +Node: ExDevices226473 +Node: ExCreate227139 +Node: ExDialog228424 +Node: ExGrowing229689 +Node: ExModifying230494 +Node: ExBootable230998 +Node: ExCharset231550 +Node: ExPseudo232442 +Node: ExCdrecord233340 +Node: ExMkisofs233657 +Node: ExGrowisofs234997 +Node: ExException236132 +Node: ExTime236586 +Node: ExIncBackup237045 +Node: ExRestore241035 +Node: ExRecovery241968 +Node: Files242538 +Node: Seealso243837 +Node: Bugreport244560 +Node: Legal245141 +Node: CommandIdx246152 +Node: ConceptIdx263033  End Tag Table diff --git a/xorriso/xorriso.texi b/xorriso/xorriso.texi index 18ac766b..372e6de4 100644 --- a/xorriso/xorriso.texi +++ b/xorriso/xorriso.texi @@ -50,7 +50,7 @@ @c man .\" First parameter, NAME, should be all caps @c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @c man .\" other parameters are allowed: see man(7), man(1) -@c man .TH XORRISO 1 "Version 1.3.7, May 18, 2014" +@c man .TH XORRISO 1 "Version 1.3.7, Jun 13, 2014" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -2355,8 +2355,12 @@ path of the file. prints files which are associated to image data blocks. It tells the logical block address, the block number, the byte size, and the path of each file. There may be reported more than one -line per file if the file is very large. In this case each line has a -different extent number in column "xt". +line per file if the file has more than one section. +In this case each line has a different extent number in column "xt". +@* +@item report_sections +like report_lba but telling the byte sizes of the particular sections rather +than the overall byte size of the file. @* @item getfacl prints access permissions in ACL text form to the result channel. diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 5e76a025..efcdfc1f 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2014.06.13.084712" +#define Xorriso_timestamP "2014.06.13.090244"