Made structs SpotlistiteM and SpotlisT ready for long block adresses
This commit is contained in:
@ -39,14 +39,14 @@
|
||||
|
||||
|
||||
struct SpotlistiteM {
|
||||
int start_lba;
|
||||
int blocks;
|
||||
off_t start_lba;
|
||||
off_t blocks;
|
||||
int quality;
|
||||
struct SpotlistiteM *next;
|
||||
};
|
||||
|
||||
|
||||
int Spotlistitem_new(struct SpotlistiteM **o, int start_lba, int blocks,
|
||||
int Spotlistitem_new(struct SpotlistiteM **o, off_t start_lba, off_t blocks,
|
||||
int quality, int flag)
|
||||
{
|
||||
struct SpotlistiteM *m;
|
||||
@ -76,9 +76,9 @@ int Spotlistitem_destroy(struct SpotlistiteM **o, int flag)
|
||||
struct SpotlisT {
|
||||
struct SpotlistiteM *list_start;
|
||||
struct SpotlistiteM *list_end;
|
||||
int list_count;
|
||||
off_t list_count;
|
||||
struct SpotlistiteM *current_item;
|
||||
int current_idx;
|
||||
off_t current_idx;
|
||||
};
|
||||
|
||||
|
||||
@ -117,7 +117,7 @@ int Spotlist_destroy(struct SpotlisT **o, int flag)
|
||||
}
|
||||
|
||||
|
||||
int Spotlist_add_item(struct SpotlisT *o, int start_lba, int blocks,
|
||||
int Spotlist_add_item(struct SpotlisT *o, off_t start_lba, off_t blocks,
|
||||
int quality, int flag)
|
||||
{
|
||||
int ret;
|
||||
@ -135,8 +135,9 @@ int Spotlist_add_item(struct SpotlisT *o, int start_lba, int blocks,
|
||||
(o->list_count)++;
|
||||
|
||||
if(debug_verbous) {char quality_name[80];
|
||||
fprintf(stderr, "debug: lba %10d , size %10d , quality '%s'\n",
|
||||
start_lba, blocks, Spotlist__quality_name(quality, quality_name,
|
||||
fprintf(stderr, "debug: lba %10.f , size %10.f , quality '%s'\n",
|
||||
(double) start_lba, (double) blocks,
|
||||
Spotlist__quality_name(quality, quality_name,
|
||||
Xorriso_read_quality_invaliD, 0) + 2);
|
||||
}
|
||||
|
||||
@ -144,15 +145,15 @@ int Spotlist_add_item(struct SpotlisT *o, int start_lba, int blocks,
|
||||
}
|
||||
|
||||
|
||||
int Spotlist_count(struct SpotlisT *o, int flag)
|
||||
off_t Spotlist_count(struct SpotlisT *o, int flag)
|
||||
{
|
||||
return o->list_count;
|
||||
}
|
||||
|
||||
|
||||
int Spotlist_block_count(struct SpotlisT *o, int flag)
|
||||
off_t Spotlist_block_count(struct SpotlisT *o, int flag)
|
||||
{
|
||||
int list_blocks= 0;
|
||||
off_t list_blocks= 0;
|
||||
struct SpotlistiteM *li;
|
||||
|
||||
for(li= o->list_start; li != NULL; li= li->next) {
|
||||
@ -163,9 +164,9 @@ int Spotlist_block_count(struct SpotlisT *o, int flag)
|
||||
}
|
||||
|
||||
|
||||
int Spotlist_sector_size(struct SpotlisT *o, int read_chunk, int flag)
|
||||
off_t Spotlist_sector_size(struct SpotlisT *o, off_t read_chunk, int flag)
|
||||
{
|
||||
int sector_size;
|
||||
off_t sector_size;
|
||||
struct SpotlistiteM *li;
|
||||
|
||||
sector_size= read_chunk * 2048;
|
||||
@ -179,10 +180,10 @@ int Spotlist_sector_size(struct SpotlisT *o, int read_chunk, int flag)
|
||||
}
|
||||
|
||||
|
||||
int Spotlist_get_item(struct SpotlisT *o, int idx,
|
||||
int *start_lba, int *blocks, int *quality, int flag)
|
||||
int Spotlist_get_item(struct SpotlisT *o, off_t idx,
|
||||
off_t *start_lba, off_t *blocks, int *quality, int flag)
|
||||
{
|
||||
int i;
|
||||
off_t i;
|
||||
struct SpotlistiteM *li;
|
||||
|
||||
if(idx < 0 || idx > o->list_count)
|
||||
@ -996,7 +997,7 @@ int Xorriso_sectormap_to_spotlist(struct XorrisO *xorriso,
|
||||
if(value == old_value)
|
||||
continue;
|
||||
if(old_value >= 0) {
|
||||
ret= Spotlist_add_item(*spotlist, (int) old_start, (int) (i * sector_size - old_start),
|
||||
ret= Spotlist_add_item(*spotlist, old_start, i * sector_size - old_start,
|
||||
(old_value ? Xorriso_read_quality_valiD :
|
||||
Xorriso_read_quality_invaliD), 0);
|
||||
if(ret <= 0)
|
||||
@ -1007,8 +1008,8 @@ int Xorriso_sectormap_to_spotlist(struct XorrisO *xorriso,
|
||||
job->item_limit);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
if(sectors - i > 1) {
|
||||
ret= Spotlist_add_item(*spotlist, (int) (i * sector_size),
|
||||
(int) ((sectors - i - 1) * sector_size),
|
||||
ret= Spotlist_add_item(*spotlist, i * sector_size,
|
||||
(sectors - i - 1) * sector_size,
|
||||
Xorriso_read_quality_untesteD, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
@ -1020,7 +1021,7 @@ int Xorriso_sectormap_to_spotlist(struct XorrisO *xorriso,
|
||||
old_start= i * sector_size;
|
||||
}
|
||||
if(old_value >= 0) {
|
||||
ret= Spotlist_add_item(*spotlist, (int) old_start, (int) (i * sector_size - old_start),
|
||||
ret= Spotlist_add_item(*spotlist, old_start, i * sector_size - old_start,
|
||||
(old_value ? Xorriso_read_quality_valiD :
|
||||
Xorriso_read_quality_invaliD), 0);
|
||||
if(ret <= 0)
|
||||
@ -1039,15 +1040,16 @@ ex:;
|
||||
*/
|
||||
int Xorriso_spotlist_to_sectormap(struct XorrisO *xorriso,
|
||||
struct SpotlisT *spotlist,
|
||||
int read_chunk,
|
||||
off_t read_chunk,
|
||||
struct SectorbitmaP **map,
|
||||
int flag)
|
||||
{
|
||||
struct SectorbitmaP *m;
|
||||
int valid;
|
||||
off_t map_sectors= -1, map_sector_size= -1;
|
||||
int list_sectors, list_blocks, sector_size, sector_blocks;
|
||||
int replace_map= 0, count, i, lba, blocks, quality, ret, pass;
|
||||
int replace_map= 0, quality, ret, pass;
|
||||
off_t list_sectors, list_blocks, sector_size, sector_blocks;
|
||||
off_t count, i, lba, blocks;
|
||||
|
||||
sector_size= Spotlist_sector_size(spotlist, read_chunk, 0);
|
||||
sector_blocks= sector_size / 2048;
|
||||
@ -1067,12 +1069,10 @@ int Xorriso_spotlist_to_sectormap(struct XorrisO *xorriso,
|
||||
m= *map;
|
||||
else {
|
||||
if(*map != NULL) {
|
||||
if((*map)->sectors * (*map)->sector_size >
|
||||
((off_t) list_sectors) * ((off_t) sector_size))
|
||||
list_sectors= (*map)->sectors * (*map)->sector_size /
|
||||
((off_t) sector_size) + 1;
|
||||
if((*map)->sectors * (*map)->sector_size > list_sectors * sector_size)
|
||||
list_sectors= (*map)->sectors * (*map)->sector_size / sector_size + 1;
|
||||
}
|
||||
ret= Sectorbitmap_new(&m, (off_t) list_sectors, (off_t) sector_size, 0);
|
||||
ret= Sectorbitmap_new(&m, list_sectors, sector_size, 0);
|
||||
if(ret <= 0)
|
||||
return(-1);
|
||||
replace_map= 1;
|
||||
@ -1103,8 +1103,6 @@ int Xorriso_spotlist_to_sectormap(struct XorrisO *xorriso,
|
||||
continue;
|
||||
Sectorbitmap_set_range(m, lba / sector_blocks, blocks / sector_blocks,
|
||||
valid);
|
||||
Sectorbitmap_set_range(m, (off_t) (lba / sector_blocks),
|
||||
(off_t) ( blocks / sector_blocks), valid);
|
||||
}
|
||||
}
|
||||
if(replace_map) {
|
||||
@ -1138,10 +1136,11 @@ int Xorriso_open_job_data_to(struct XorrisO *xorriso,
|
||||
|
||||
|
||||
int Xorriso_update_in_sector_map(struct XorrisO *xorriso,
|
||||
struct SpotlisT *spotlist, int read_chunk,
|
||||
struct SpotlisT *spotlist, off_t read_chunk,
|
||||
struct CheckmediajoB *job, int flag)
|
||||
{
|
||||
int sectors, sector_size, sector_blocks, ret;
|
||||
int ret;
|
||||
off_t sectors, sector_size, sector_blocks;
|
||||
struct SectorbitmaP *map;
|
||||
|
||||
Sectorbitmap_destroy(&(xorriso->in_sector_map), 0);
|
||||
@ -1155,8 +1154,7 @@ int Xorriso_update_in_sector_map(struct XorrisO *xorriso,
|
||||
sector_blocks= sector_size / 2048;
|
||||
if(sector_blocks > 1)
|
||||
sectors= sectors / sector_blocks + !!(sectors % sector_blocks);
|
||||
ret= Sectorbitmap_new(&(xorriso->in_sector_map), (off_t) sectors,
|
||||
(off_t) sector_size, 0);
|
||||
ret= Sectorbitmap_new(&(xorriso->in_sector_map), sectors, sector_size, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
if(map != NULL)
|
||||
|
Reference in New Issue
Block a user