Made struct xorriso_md5_state ready for long block addresses
This commit is contained in:
parent
14676ef132
commit
4fe385baed
@ -2547,13 +2547,13 @@ struct xorriso_md5_state {
|
||||
pthread_mutex_t spot_mutex;
|
||||
|
||||
/* Checksum tag cursor */
|
||||
uint32_t md5_start;
|
||||
uint32_t next_tag;
|
||||
off_t md5_start;
|
||||
off_t next_tag;
|
||||
int chain_broken;
|
||||
int in_track_gap;
|
||||
int was_sb_tag;
|
||||
int md5_spot_value;
|
||||
uint32_t md5_spot_lba;
|
||||
off_t md5_spot_lba;
|
||||
|
||||
/* Asynchronous operation */
|
||||
|
||||
@ -2572,7 +2572,7 @@ struct xorriso_md5_state {
|
||||
3= end-of-processing (set by boss when done)
|
||||
*/
|
||||
int *chunk_fill; /* Actual number of valid bytes in chunk */
|
||||
uint32_t *chunk_lba;
|
||||
off_t *chunk_lba;
|
||||
int chunk_w_idx; /* Write index. Operated by boss */
|
||||
int chunk_r_idx; /* Read index. Operated by MD5 slave */
|
||||
|
||||
@ -2604,16 +2604,25 @@ int Xorriso__add_spot(struct xorriso_md5_state *state,
|
||||
|
||||
|
||||
int Xorriso_chunk_md5(struct XorrisO *xorriso, char *data, int to_read,
|
||||
uint32_t from_lba, struct xorriso_md5_state *state, int flag)
|
||||
off_t from_lba, struct xorriso_md5_state *state, int flag)
|
||||
{
|
||||
int j, k, ret= 0, valid, tag_type, decode_ret= 0;
|
||||
uint32_t lba, pos, range_start, range_size;
|
||||
uint32_t pos, range_start, range_size, next_tag_uint32;
|
||||
off_t lba;
|
||||
char md5[16], tag_md5[16], *tag_type_name= "", *comparison, *sev_text;
|
||||
char md5_text[33];
|
||||
void *cloned_ctx= NULL;
|
||||
|
||||
for(j= 0; j < to_read; j++) {
|
||||
lba= j + from_lba;
|
||||
if(lba > (off_t) 0xffffffff) {
|
||||
if(lba == (off_t) 0x100000000) {
|
||||
printf(xorriso->info_text,
|
||||
"Checkreading exceeds the 32-bit block address limit of libisofs MD5 tags");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING",0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if(lba < state->md5_start)
|
||||
continue;
|
||||
ret= decode_ret= 0;
|
||||
@ -2621,8 +2630,10 @@ int Xorriso_chunk_md5(struct XorrisO *xorriso, char *data, int to_read,
|
||||
(state->next_tag == 0 || state->chain_broken || lba == state->next_tag)){
|
||||
ret= iso_util_decode_md5_tag(data + j * 2048, &tag_type,
|
||||
&pos, &range_start, &range_size,
|
||||
&(state->next_tag), tag_md5,
|
||||
&next_tag_uint32, tag_md5,
|
||||
!!state->chain_broken);
|
||||
if(ret > 0 && tag_type >= 2 && tag_type <= 4)
|
||||
state->next_tag= next_tag_uint32;
|
||||
decode_ret= ret;
|
||||
}
|
||||
valid= (ret == 1 || ret == (int) ISO_MD5_AREA_CORRUPTED) && pos == lba;
|
||||
@ -2643,7 +2654,7 @@ int Xorriso_chunk_md5(struct XorrisO *xorriso, char *data, int to_read,
|
||||
ret= -1; goto ex;
|
||||
}
|
||||
iso_md5_compute(&(state->ctx), data + (j - (lba - range_start)) * 2048,
|
||||
(lba - range_start) * 2048);
|
||||
(int) (lba - range_start) * 2048);
|
||||
state->md5_start= range_start;
|
||||
state->in_track_gap= 0;
|
||||
}
|
||||
@ -2662,13 +2673,13 @@ int Xorriso_chunk_md5(struct XorrisO *xorriso, char *data, int to_read,
|
||||
sprintf(xorriso->info_text,
|
||||
"Found MD5 %s tag which covers different data range", tag_type_name);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE",0);
|
||||
sprintf(xorriso->info_text, " Expected start: %u Found: %u",
|
||||
(unsigned int) state->md5_start, range_start);
|
||||
sprintf(xorriso->info_text, " Expected start: %.f Found: %lu",
|
||||
(double) state->md5_start, (unsigned long int) range_start);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE",0);
|
||||
for(k= 0; k < 16; k++)
|
||||
sprintf(md5_text + 2 * k, "%2.2x", ((unsigned char *) tag_md5)[k]);
|
||||
sprintf(xorriso->info_text, " Size: %u MD5: %s",
|
||||
range_size, md5_text);
|
||||
sprintf(xorriso->info_text, " Size: %lu MD5: %s",
|
||||
(unsigned long int) range_size, md5_text);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE",0);
|
||||
state->chain_broken= 1;
|
||||
valid= 0;
|
||||
@ -2697,15 +2708,15 @@ int Xorriso_chunk_md5(struct XorrisO *xorriso, char *data, int to_read,
|
||||
}
|
||||
state->md5_spot_lba= lba;
|
||||
sprintf(xorriso->info_text,
|
||||
"Found %s MD5 %s tag: start=%d size=%d",
|
||||
comparison, tag_type_name, state->md5_start,
|
||||
lba - state->md5_start);
|
||||
"Found %s MD5 %s tag: start=%.f size=%.f",
|
||||
comparison, tag_type_name, (double) state->md5_start,
|
||||
(double) (lba - state->md5_start));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, sev_text, 0);
|
||||
}
|
||||
if(valid && (tag_type == 1 || (tag_type == 4 && pos == lba && lba < 32))){
|
||||
if(state->md5_spot_value != Xorriso_read_quality_untesteD) {
|
||||
ret= Xorriso__add_spot(state, (off_t) state->md5_start,
|
||||
(off_t) state->md5_spot_lba - state->md5_start,
|
||||
ret= Xorriso__add_spot(state, state->md5_start,
|
||||
state->md5_spot_lba - state->md5_start,
|
||||
state->md5_spot_value, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
@ -2964,7 +2975,7 @@ int Xorriso_check_interval(struct XorrisO *xorriso, struct SpotlisT *spotlist,
|
||||
Xorriso_alloc_meM(state.chunk, char *, num_chunks);
|
||||
Xorriso_alloc_meM(state.chunk_state, int, num_chunks);
|
||||
Xorriso_alloc_meM(state.chunk_fill, int, num_chunks);
|
||||
Xorriso_alloc_meM(state.chunk_lba, uint32_t, num_chunks);
|
||||
Xorriso_alloc_meM(state.chunk_lba, off_t, num_chunks);
|
||||
for(i= 0; i < state.num_chunks; i++) {
|
||||
state.chunk[i]= data + read_chunk * i * 2048;
|
||||
state.chunk_state[i]= 0;
|
||||
@ -3143,7 +3154,7 @@ abort_check:;
|
||||
state.chunk_w_idx= (state.chunk_w_idx + 1) % state.num_chunks;
|
||||
} else {
|
||||
ret= Xorriso_chunk_md5(xorriso, data_pt, to_read,
|
||||
(uint32_t) (i + from_lba), &state, 0);
|
||||
i + from_lba, &state, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
}
|
||||
@ -3232,15 +3243,15 @@ failed_to_write:;
|
||||
/* >>> ??? allow chain_broken to be a match ? */
|
||||
|
||||
if(state.next_tag > 0) {
|
||||
sprintf(xorriso->info_text, "Missing announced MD5 tag: start=%d pos=%d",
|
||||
state.md5_start, state.next_tag);
|
||||
sprintf(xorriso->info_text, "Missing announced MD5 tag: start=%.f pos=%.f",
|
||||
(double) state.md5_start, (double) state.next_tag);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
|
||||
state.md5_spot_value= Xorriso_read_quality_md5_mismatcH;
|
||||
state.md5_spot_lba= state.next_tag;
|
||||
}
|
||||
if(state.md5_spot_value != Xorriso_read_quality_untesteD) {
|
||||
ret= Xorriso__add_spot(&state, (off_t) state.md5_start,
|
||||
(off_t) (state.md5_spot_lba - state.md5_start),
|
||||
ret= Xorriso__add_spot(&state, state.md5_start,
|
||||
state.md5_spot_lba - state.md5_start,
|
||||
state.md5_spot_value, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
|
@ -1 +1 @@
|
||||
#define Xorriso_timestamP "2024.03.24.085148"
|
||||
#define Xorriso_timestamP "2024.03.28.144046"
|
||||
|
Loading…
Reference in New Issue
Block a user