1 2 /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. 3 4 Copyright 2007-2011 Thomas Schmitt, <scdbackup@gmx.net> 5 6 Provided under GPL version 2 or later. 7 8 This file contains declarations of classes SpotlistiteM, SpotlisT, 9 SectorbitmaP, CheckmediajoB which represent media checks and their outcome. 10 */ 11 12 13 #ifndef Xorriso_pvt_check_includeD 14 #define Xorriso_pvt_check_includeD yes 15 16 struct SpotlisT; /* List of intervals with different read qualities */ 17 struct CheckmediajoB; /* Parameters for Xorriso_check_media() */ 18 19 int Xorriso_check_media_setup_job(struct XorrisO *xorriso, 20 struct CheckmediajoB *job, 21 char **argv, int old_idx, int end_idx, int flag); 22 23 int Xorriso_sectormap_to_spotlist(struct XorrisO *xorriso, 24 struct CheckmediajoB *job, 25 struct SpotlisT **spotlist, 26 int flag); 27 28 /* @param flag bit0= mark untested areas as valid 29 */ 30 int Xorriso_spotlist_to_sectormap(struct XorrisO *xorriso, 31 struct SpotlisT *spotlist, 32 int read_chunk, 33 struct SectorbitmaP **map, 34 int flag); 35 36 /* Opens the -check_media data copy in for reading and writing 37 */ 38 int Xorriso_open_job_data_to(struct XorrisO *xorriso, 39 struct CheckmediajoB *job, int flag); 40 41 /* @param report Buffer of at least 10*SfileadrL 42 @param flag bit0= only report non-default settings 43 @return <=0 error , 1 ok , 2 with bit0: every option is on default setting 44 */ 45 int Xorriso_check_media_list_job(struct XorrisO *xorriso, 46 struct CheckmediajoB *job, 47 char *report, int flag); 48 49 int Xorriso_update_in_sector_map(struct XorrisO *xorriso, 50 struct SpotlisT *spotlist, int read_chunk, 51 struct CheckmediajoB *job, int flag); 52 53 54 /* Distiniction between valid and invalid sectors */ 55 struct SectorbitmaP { 56 int sectors; 57 int sector_size; 58 unsigned char *map; 59 int map_size; 60 }; 61 62 int Spotlist_new(struct SpotlisT **o, int flag); 63 64 int Spotlist_destroy(struct SpotlisT **o, int flag); 65 66 int Spotlist_add_item(struct SpotlisT *o, int start_lba, int blocks, 67 int quality, int flag); 68 69 int Spotlist_count(struct SpotlisT *o, int flag); 70 71 int Spotlist_block_count(struct SpotlisT *o, int flag); 72 73 int Spotlist_sector_size(struct SpotlisT *o, int read_chunk, int flag); 74 75 int Spotlist_get_item(struct SpotlisT *o, int idx, 76 int *start_lba, int *blocks, int *quality, int flag); 77 78 char *Spotlist__quality_name(int quality, char name[80], int bad_limit, 79 int flag); 80 81 82 #define Xorriso_read_quality_gooD 0x7fffffff 83 #define Xorriso_read_quality_md5_matcH 0x70000000 84 #define Xorriso_read_quality_sloW 0x60000000 85 #define Xorriso_read_quality_partiaL 0x50000000 86 #define Xorriso_read_quality_valiD 0x40000000 87 #define Xorriso_read_quality_untesteD 0x3fffffff 88 #define Xorriso_read_quality_md5_mismatcH 0x38000000 89 #define Xorriso_read_quality_invaliD 0x30000000 90 #define Xorriso_read_quality_tao_enD 0x20000000 91 #define Xorriso_read_quality_off_tracK 0x10000000 92 #define Xorriso_read_quality_unreadablE 0x00000000 93 94 95 struct CheckmediajoB { 96 int use_dev; /* 0= use indev , 1= use outdev , 2= use sector map*/ 97 98 int min_lba; /* if >=0 : begin checking at this address */ 99 int max_lba; /* if >=0 : read up to this address, else use mode */ 100 101 int min_block_size; /* granularity desired by user 102 */ 103 int async_chunks; /* >= 2 : run MD5 thread, use given number of chunks 104 else : synchronous 105 */ 106 int mode; /* 0= track by track 107 1= single sweep over libisoburn medium capacity 108 2= single sweep over libburn medium capacity 109 */ 110 time_t start_time; 111 int time_limit; /* Number of seconds after which to abort */ 112 113 int item_limit; /* Maximum number of medium check list items as result */ 114 115 char abort_file_path[SfileadrL]; 116 117 char data_to_path[SfileadrL]; 118 int data_to_fd; 119 off_t data_to_offset; /* usually 0 with image copy, negative with file copy */ 120 off_t data_to_limit; /* used with file copy */ 121 int patch_lba0; 122 int patch_lba0_msc1; 123 124 char sector_map_path[SfileadrL]; 125 struct SectorbitmaP *sector_map; 126 int map_with_volid; /* 0=add quick toc to map file, 127 1=read ISO heads for toc 128 */ 129 130 int retry; /* -1= only try full read_chunk, 1=retry with 2k blocks 131 0= retry with CD, full chunk else 132 */ 133 134 int report_mode; /* 0= print MCL items 135 1= print damaged files 136 */ 137 138 char event_severity[20]; /* If not "ALL": trigger event of given severity 139 at the end of a check job if bad blocks were 140 discovered. 141 */ 142 143 double slow_threshold_seq; /* Time limit in seconds for the decision whether 144 a read operation is considered slow. This does 145 not apply to thr first read of an interval. 146 */ 147 }; 148 149 int Checkmediajob_new(struct CheckmediajoB **o, int flag); 150 151 int Checkmediajob_destroy(struct CheckmediajoB **o, int flag); 152 153 int Checkmediajob_copy(struct CheckmediajoB *from, struct CheckmediajoB *to, 154 int flag); 155 156 int Sectorbitmap_new(struct SectorbitmaP **o, int sectors, int sector_size, 157 int flag); 158 int Sectorbitmap_destroy(struct SectorbitmaP **o, int flag); 159 int Sectorbitmap_from_file(struct SectorbitmaP **o, char *path, char *msg, 160 int *os_errno, int flag); 161 int Sectorbitmap_to_file(struct SectorbitmaP *o, char *path, char *info, 162 char *msg, int *os_errno, int flag); 163 int Sectorbitmap_set(struct SectorbitmaP *o, int sector, int flag); 164 int Sectorbitmap_set_range(struct SectorbitmaP *o, 165 int start_sector, int sectors, int flag); 166 int Sectorbitmap_is_set(struct SectorbitmaP *o, int sector, int flag); 167 int Sectorbitmap_bytes_are_set(struct SectorbitmaP *o, 168 off_t start_byte, off_t end_byte, int flag); 169 170 int Sectorbitmap_get_layout(struct SectorbitmaP *o, 171 int *sectors, int *sector_size, int flag); 172 173 int Sectorbitmap_copy(struct SectorbitmaP *from, struct SectorbitmaP *to, 174 int flag); 175 176 int Sectorbitmap_clone(struct SectorbitmaP *from, struct SectorbitmaP **clone, 177 int flag); 178 179 #endif /* ! Xorriso_pvt_check_includeD */ 180 181