Made struct SectorbitmaP ready for long block adresses
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
|
||||
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
|
||||
|
||||
Copyright 2007-2020 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
Copyright 2007-2024 Thomas Schmitt, <scdbackup@gmx.net>
|
||||
|
||||
Provided under GPL version 2 or later.
|
||||
|
||||
@ -249,7 +249,7 @@ char *Spotlist__quality_name(int quality, char name[80], int bad_limit,
|
||||
|
||||
/* ---------------------------- SectorbitmaP ------------------------------ */
|
||||
|
||||
int Sectorbitmap_new(struct SectorbitmaP **o, int sectors, int sector_size,
|
||||
int Sectorbitmap_new(struct SectorbitmaP **o, off_t sectors, off_t sector_size,
|
||||
int flag)
|
||||
{
|
||||
struct SectorbitmaP *m;
|
||||
@ -288,7 +288,9 @@ int Sectorbitmap_destroy(struct SectorbitmaP **o, int flag)
|
||||
int Sectorbitmap_from_file(struct SectorbitmaP **o, char *path, char *msg,
|
||||
int *os_errno, int flag)
|
||||
{
|
||||
int ret, fd= -1, sectors, sector_size, i, todo, map_size, skip, bufsize= 1024;
|
||||
int ret, fd= -1, todo, skip, bufsize= 1024;
|
||||
off_t sectors, sector_size;
|
||||
ssize_t i, map_size;
|
||||
unsigned char *map;
|
||||
unsigned char *buf;
|
||||
|
||||
@ -346,7 +348,8 @@ wrong_filetype:;
|
||||
ret= Sectorbitmap_new(o, sectors, sector_size, 0);
|
||||
if(ret <= 0) {
|
||||
if(msg != NULL)
|
||||
sprintf(msg, "Cannot allocate bitmap memory for %d sectors", sectors);
|
||||
sprintf(msg, "Cannot allocate bitmap memory for %.f sectors",
|
||||
(double) sectors);
|
||||
ret= -1; goto ex;
|
||||
}
|
||||
map= (*o)->map;
|
||||
@ -435,7 +438,7 @@ ex:;
|
||||
|
||||
/* @param flag bit0= sector bit value
|
||||
*/
|
||||
int Sectorbitmap_set(struct SectorbitmaP *o, int sector, int flag)
|
||||
int Sectorbitmap_set(struct SectorbitmaP *o, off_t sector, int flag)
|
||||
{
|
||||
if(sector < 0 || sector >= o->sectors)
|
||||
return(0);
|
||||
@ -450,9 +453,9 @@ int Sectorbitmap_set(struct SectorbitmaP *o, int sector, int flag)
|
||||
/* @param flag bit0= sector bit value
|
||||
*/
|
||||
int Sectorbitmap_set_range(struct SectorbitmaP *o,
|
||||
int start_sector, int sectors, int flag)
|
||||
off_t start_sector, off_t sectors, int flag)
|
||||
{
|
||||
int start_i, end_i, i;
|
||||
off_t start_i, end_i, i;
|
||||
unsigned char value;
|
||||
|
||||
if(start_sector < 0 || start_sector + sectors > o->sectors || sectors < 1)
|
||||
@ -474,7 +477,7 @@ int Sectorbitmap_set_range(struct SectorbitmaP *o,
|
||||
}
|
||||
|
||||
|
||||
int Sectorbitmap_is_set(struct SectorbitmaP *o, int sector, int flag)
|
||||
int Sectorbitmap_is_set(struct SectorbitmaP *o, off_t sector, int flag)
|
||||
{
|
||||
if(sector < 0 || sector >= o->sectors)
|
||||
return(0);
|
||||
@ -485,7 +488,7 @@ int Sectorbitmap_is_set(struct SectorbitmaP *o, int sector, int flag)
|
||||
int Sectorbitmap_bytes_are_set(struct SectorbitmaP *o,
|
||||
off_t start_byte, off_t end_byte, int flag)
|
||||
{
|
||||
int end_sector, i;
|
||||
off_t end_sector, i;
|
||||
|
||||
end_sector= end_byte / o->sector_size;
|
||||
for(i= start_byte / o->sector_size; i <= end_sector; i++)
|
||||
@ -496,7 +499,7 @@ int Sectorbitmap_bytes_are_set(struct SectorbitmaP *o,
|
||||
|
||||
|
||||
int Sectorbitmap_get_layout(struct SectorbitmaP *o,
|
||||
int *sectors, int *sector_size, int flag)
|
||||
off_t *sectors, off_t *sector_size, int flag)
|
||||
{
|
||||
*sectors= o->sectors;
|
||||
*sector_size= o->sector_size;
|
||||
@ -507,8 +510,8 @@ int Sectorbitmap_get_layout(struct SectorbitmaP *o,
|
||||
int Sectorbitmap_copy(struct SectorbitmaP *from, struct SectorbitmaP *to,
|
||||
int flag)
|
||||
{
|
||||
int i, run_start, run_value, start_sec, limit_sec, start_aligned;
|
||||
int end_complete;
|
||||
int run_value, start_aligned, end_complete;
|
||||
off_t i, run_start, start_sec, limit_sec;
|
||||
|
||||
if(((off_t) from->sectors) * ((off_t) from->sector_size) >
|
||||
((off_t) to->sectors) * ((off_t) to->sector_size))
|
||||
@ -519,7 +522,7 @@ int Sectorbitmap_copy(struct SectorbitmaP *from, struct SectorbitmaP *to,
|
||||
return(1);
|
||||
}
|
||||
run_start= 0;
|
||||
run_value= Sectorbitmap_is_set(from, 0, 0);
|
||||
run_value= Sectorbitmap_is_set(from, (off_t) 0, 0);
|
||||
for(i= 1; i <= from->sectors; i++) {
|
||||
if(i < from->sectors)
|
||||
if(Sectorbitmap_is_set(from, i, 0) == run_value)
|
||||
@ -942,7 +945,8 @@ int Xorriso_sectormap_to_spotlist(struct XorrisO *xorriso,
|
||||
int flag)
|
||||
{
|
||||
struct SectorbitmaP *map;
|
||||
int ret, i, sectors, sector_size, value, old_value= -1, old_start= -1;
|
||||
int ret, value, old_value= -1;
|
||||
off_t i, sectors, sector_size, old_start= -1;
|
||||
|
||||
map= job->sector_map;
|
||||
if(map == NULL)
|
||||
@ -962,7 +966,7 @@ int Xorriso_sectormap_to_spotlist(struct XorrisO *xorriso,
|
||||
if(value == old_value)
|
||||
continue;
|
||||
if(old_value >= 0) {
|
||||
ret= Spotlist_add_item(*spotlist, old_start, i * sector_size - old_start,
|
||||
ret= Spotlist_add_item(*spotlist, (int) old_start, (int) (i * sector_size - old_start),
|
||||
(old_value ? Xorriso_read_quality_valiD :
|
||||
Xorriso_read_quality_invaliD), 0);
|
||||
if(ret <= 0)
|
||||
@ -973,8 +977,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, i * sector_size,
|
||||
(sectors - i - 1) * sector_size,
|
||||
ret= Spotlist_add_item(*spotlist, (int) (i * sector_size),
|
||||
(int) ((sectors - i - 1) * sector_size),
|
||||
Xorriso_read_quality_untesteD, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
@ -986,7 +990,7 @@ int Xorriso_sectormap_to_spotlist(struct XorrisO *xorriso,
|
||||
old_start= i * sector_size;
|
||||
}
|
||||
if(old_value >= 0) {
|
||||
ret= Spotlist_add_item(*spotlist, old_start, i * sector_size - old_start,
|
||||
ret= Spotlist_add_item(*spotlist, (int) old_start, (int) (i * sector_size - old_start),
|
||||
(old_value ? Xorriso_read_quality_valiD :
|
||||
Xorriso_read_quality_invaliD), 0);
|
||||
if(ret <= 0)
|
||||
@ -1010,7 +1014,8 @@ int Xorriso_spotlist_to_sectormap(struct XorrisO *xorriso,
|
||||
int flag)
|
||||
{
|
||||
struct SectorbitmaP *m;
|
||||
int map_sectors= -1, map_sector_size= -1, valid;
|
||||
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;
|
||||
|
||||
@ -1032,13 +1037,12 @@ int Xorriso_spotlist_to_sectormap(struct XorrisO *xorriso,
|
||||
m= *map;
|
||||
else {
|
||||
if(*map != NULL) {
|
||||
if(((off_t) (*map)->sectors) * ((off_t) (*map)->sector_size) >
|
||||
if((*map)->sectors * (*map)->sector_size >
|
||||
((off_t) list_sectors) * ((off_t) sector_size))
|
||||
list_sectors= (((off_t) (*map)->sectors) *
|
||||
((off_t) (*map)->sector_size)) / ((off_t) sector_size)
|
||||
+ 1;
|
||||
list_sectors= (*map)->sectors * (*map)->sector_size /
|
||||
((off_t) sector_size) + 1;
|
||||
}
|
||||
ret= Sectorbitmap_new(&m, list_sectors, sector_size, 0);
|
||||
ret= Sectorbitmap_new(&m, (off_t) list_sectors, (off_t) sector_size, 0);
|
||||
if(ret <= 0)
|
||||
return(-1);
|
||||
replace_map= 1;
|
||||
@ -1069,6 +1073,8 @@ 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) {
|
||||
@ -1119,7 +1125,8 @@ 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), sectors, sector_size, 0);
|
||||
ret= Sectorbitmap_new(&(xorriso->in_sector_map), (off_t) sectors,
|
||||
(off_t) sector_size, 0);
|
||||
if(ret <= 0)
|
||||
return(ret);
|
||||
if(map != NULL)
|
||||
|
Reference in New Issue
Block a user