From 458b0cb3de391412a9046f826a8557efdf87b533 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Thu, 21 Mar 2024 09:44:51 +0100 Subject: [PATCH] Made Xorriso_obtain_indev_readsize() ready for long block adresses --- xorriso/drive_mgt.c | 7 ++++--- xorriso/iso_img.c | 5 +++-- xorriso/read_run.c | 4 ++-- xorriso/xorriso_timestamp.h | 2 +- xorriso/xorrisoburn.h | 2 +- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/xorriso/drive_mgt.c b/xorriso/drive_mgt.c index f056c9db..f2dcf2de 100644 --- a/xorriso/drive_mgt.c +++ b/xorriso/drive_mgt.c @@ -3687,10 +3687,11 @@ int Xorriso_use_immed_bit(struct XorrisO *xorriso, int flag) } -int Xorriso_obtain_indev_readsize(struct XorrisO *xorriso, uint32_t *blocks, +int Xorriso_obtain_indev_readsize(struct XorrisO *xorriso, off_t *blocks, int flag) { - int ret, num_data; + int ret; + off_t num_data; struct burn_drive_info *dinfo; struct burn_drive *drive; enum burn_disc_status s; @@ -3703,7 +3704,7 @@ int Xorriso_obtain_indev_readsize(struct XorrisO *xorriso, uint32_t *blocks, s= isoburn_disc_get_status(drive); if(s == BURN_DISC_BLANK) return(1); - ret= burn_get_read_capacity(drive, &num_data, 0); + ret= burn_get_read_capacity_v2(drive, &num_data, 0); if(ret <= 0) return(0); *blocks= num_data; diff --git a/xorriso/iso_img.c b/xorriso/iso_img.c index 7b6b09fb..517cb29a 100644 --- a/xorriso/iso_img.c +++ b/xorriso/iso_img.c @@ -1801,7 +1801,8 @@ static int Xorriso_scan_report_lines(struct XorrisO *xorriso, unsigned long int sa_options= 0, partno, id_tag, perms, start_cyl; unsigned long int part_status, part_type, mbr_start_block, mbr_num_blocks; unsigned long int partition_offset= 0; - uint32_t high_block= 0, indev_blocks; + uint32_t high_block= 0; + off_t indev_blocks; char name[24], *textpt, *contentpt, *buf= NULL, part_type_text[37]; char **lines= NULL; double num[8]; @@ -2849,7 +2850,7 @@ static int Xorriso_scan_report_lines(struct XorrisO *xorriso, et_imgs[idx].extract_size <= 0) { ret= Xorriso_obtain_indev_readsize(xorriso, &indev_blocks, 0); if(ret > 0) { - if(indev_blocks > et_imgs[idx].lba && + if(indev_blocks > (off_t) et_imgs[idx].lba && indev_blocks - et_imgs[idx].lba <= Xorriso_max_endless_uefi_sizE) et_imgs[idx].extract_size= indev_blocks - et_imgs[idx].lba; } diff --git a/xorriso/read_run.c b/xorriso/read_run.c index fe2b3858..23e57325 100644 --- a/xorriso/read_run.c +++ b/xorriso/read_run.c @@ -2421,7 +2421,7 @@ int Xorriso_read_file_data(struct XorrisO *xorriso, IsoNode *node, int quality, bad_extract= 0; off_t lba, count, blocks, spot; int data_to_skip= 0; - uint32_t indev_blocks; + off_t indev_blocks; 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; @@ -2438,7 +2438,7 @@ int Xorriso_read_file_data(struct XorrisO *xorriso, IsoNode *node, Xorriso_alloc_meM(section_sizes, off_t, 1); start_lbas[0]= 0; ret= Xorriso_obtain_indev_readsize(xorriso, &indev_blocks, 0); - if(ret > 0) + if(ret > 0 && indev_blocks <= 0x7ffffffe) end_lbas[0]= indev_blocks - 1; else end_lbas[0]= 0x7ffffffe; diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 953e1a61..7b463134 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2024.03.20.215145" +#define Xorriso_timestamP "2024.03.21.084436" diff --git a/xorriso/xorrisoburn.h b/xorriso/xorrisoburn.h index 13835192..cc05842d 100644 --- a/xorriso/xorrisoburn.h +++ b/xorriso/xorrisoburn.h @@ -674,7 +674,7 @@ int Xorriso_make_guid(struct XorrisO *xorriso, char *line, int flag); int Xorriso_set_libisofs_now(struct XorrisO *xorriso, int flag); -int Xorriso_obtain_indev_readsize(struct XorrisO *xorriso, uint32_t *blocks, +int Xorriso_obtain_indev_readsize(struct XorrisO *xorriso, off_t *blocks, int flag); int Xorriso_assess_written_features(struct XorrisO *xorriso, char *mode,