New API calls isoburn_read_iso_head_v2(), isoburn_get_mount_params_v2()
This commit is contained in:
parent
a86d1378ff
commit
e7326e0e6c
@ -1304,7 +1304,8 @@ int isoburn_read_iso_head_v2(struct burn_drive *d, off_t lba,
|
|||||||
off_t *image_blocks, char *info, int flag)
|
off_t *image_blocks, char *info, int flag)
|
||||||
{
|
{
|
||||||
unsigned char *buffer= NULL;
|
unsigned char *buffer= NULL;
|
||||||
int ret, info_mode, capacity, role;
|
int ret, info_mode, role;
|
||||||
|
off_t capacity;
|
||||||
off_t data_count, to_read;
|
off_t data_count, to_read;
|
||||||
struct isoburn *o;
|
struct isoburn *o;
|
||||||
|
|
||||||
@ -1324,14 +1325,14 @@ int isoburn_read_iso_head_v2(struct burn_drive *d, off_t lba,
|
|||||||
/* >>> ??? return always 0 ? */
|
/* >>> ??? return always 0 ? */
|
||||||
{ret= (-1*!!(flag&(1<<15))); goto ex;}
|
{ret= (-1*!!(flag&(1<<15))); goto ex;}
|
||||||
|
|
||||||
ret = burn_get_read_capacity(d, &capacity, 0);
|
ret = burn_get_read_capacity_v2(d, &capacity, 0);
|
||||||
if (ret <= 0 && (role == 2 || role == 4)) {
|
if (ret <= 0 && (role == 2 || role == 4)) {
|
||||||
/* Might be a block device on a system where libburn cannot determine its
|
/* Might be a block device on a system where libburn cannot determine its
|
||||||
size. Try to read anyway. */
|
size. Try to read anyway. */
|
||||||
capacity = 0x7ffffff0;
|
capacity = 0x7fffffffffffffff;
|
||||||
ret = 1;
|
ret = 1;
|
||||||
}
|
}
|
||||||
to_read= (off_t) capacity * ((off_t) 2048);
|
to_read= capacity * ((off_t) 2048);
|
||||||
if(ret > 0 && to_read >= (off_t) (36 * 1024)) {
|
if(ret > 0 && to_read >= (off_t) (36 * 1024)) {
|
||||||
ret= isoburn_find_emulator(&o, d, 0);
|
ret= isoburn_find_emulator(&o, d, 0);
|
||||||
if(ret > 0)
|
if(ret > 0)
|
||||||
@ -1339,7 +1340,7 @@ int isoburn_read_iso_head_v2(struct burn_drive *d, off_t lba,
|
|||||||
{ret= (-1 * !!(flag & (1 << 15))); goto ex;}
|
{ret= (-1 * !!(flag & (1 << 15))); goto ex;}
|
||||||
if(to_read >= (off_t) (64 * 1024))
|
if(to_read >= (off_t) (64 * 1024))
|
||||||
to_read= 64 * 1024;
|
to_read= 64 * 1024;
|
||||||
ret = burn_read_data(d, ((off_t) lba) * (off_t) 2048, (char *) buffer,
|
ret = burn_read_data(d, lba * (off_t) 2048, (char *) buffer,
|
||||||
to_read, &data_count, 32); /* error messages as DEBUG */
|
to_read, &data_count, 32); /* error messages as DEBUG */
|
||||||
} else
|
} else
|
||||||
ret= 0;
|
ret= 0;
|
||||||
@ -1372,17 +1373,13 @@ int isoburn_read_iso_head(struct burn_drive *d, int lba,
|
|||||||
int *image_blocks, char *info, int flag)
|
int *image_blocks, char *info, int flag)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
off_t long_lba, long_image_blocks;
|
off_t long_image_blocks;
|
||||||
|
|
||||||
long_lba= lba;
|
ret= isoburn_read_iso_head_v2(d, (off_t) lba, &long_image_blocks, info, flag);
|
||||||
ret= isoburn_read_iso_head_v2(d, long_lba, &long_image_blocks, info, flag);
|
|
||||||
if(ret <= 0)
|
if(ret <= 0)
|
||||||
return(ret);
|
return(ret);
|
||||||
if(long_image_blocks > 0x7fffffff) {
|
/* The old behavior was to return negative numbers on overflow */
|
||||||
*image_blocks= 0x7fffffff;
|
*image_blocks= (int) long_image_blocks;
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
*image_blocks= long_image_blocks;
|
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2200,13 +2197,13 @@ ex:;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int isoburn_get_mount_params(struct burn_drive *d,
|
int isoburn_get_mount_params_v2(struct burn_drive *d,
|
||||||
int adr_mode, char *adr_value,
|
int adr_mode, char *adr_value,
|
||||||
int *lba, int *track, int *session,
|
off_t *lba, int *track, int *session,
|
||||||
char volid[33], int flag)
|
char volid[33], int flag)
|
||||||
{
|
{
|
||||||
int msc1_mem, ret, total_tracks, num_sessions, num_tracks, i, j, track_lba;
|
int ret, total_tracks, num_sessions, num_tracks, i, j, is_iso= 0;
|
||||||
int size, is_iso= 0;
|
off_t msc1_mem, track_lba, size;
|
||||||
struct isoburn *o;
|
struct isoburn *o;
|
||||||
struct isoburn_toc_disc *disc= NULL;
|
struct isoburn_toc_disc *disc= NULL;
|
||||||
struct isoburn_toc_session **sessions= NULL;
|
struct isoburn_toc_session **sessions= NULL;
|
||||||
@ -2236,14 +2233,14 @@ int isoburn_get_mount_params(struct burn_drive *d,
|
|||||||
continue;
|
continue;
|
||||||
for(j= 0; j<num_tracks && *track < 0; j++) {
|
for(j= 0; j<num_tracks && *track < 0; j++) {
|
||||||
total_tracks++;
|
total_tracks++;
|
||||||
isoburn_get_track_lba(tracks[j], &track_lba, 0);
|
isoburn_get_track_lba_v2(tracks[j], &track_lba, 0);
|
||||||
if(track_lba == *lba) {
|
if(track_lba == *lba) {
|
||||||
*track= total_tracks;
|
*track= total_tracks;
|
||||||
*session= i + 1;
|
*session= i + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ret= isoburn_read_iso_head(d, *lba, &size, volid, 1);
|
ret= isoburn_read_iso_head_v2(d, *lba, &size, volid, 1);
|
||||||
if(ret <= 0)
|
if(ret <= 0)
|
||||||
volid[0]= 0;
|
volid[0]= 0;
|
||||||
else
|
else
|
||||||
@ -2257,3 +2254,24 @@ ex:;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isoburn_get_mount_params(struct burn_drive *d,
|
||||||
|
int adr_mode, char *adr_value,
|
||||||
|
int *lba, int *track, int *session,
|
||||||
|
char volid[33], int flag)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
off_t long_lba;
|
||||||
|
|
||||||
|
ret= isoburn_get_mount_params_v2(d, adr_mode, adr_value, &long_lba,
|
||||||
|
track, session, volid, flag);
|
||||||
|
if(ret <= 0)
|
||||||
|
return(ret);
|
||||||
|
if(long_lba > 0x7fffffff) {
|
||||||
|
*lba= 0x7fffffff;
|
||||||
|
ret= 0;
|
||||||
|
} else {
|
||||||
|
*lba= long_lba;
|
||||||
|
}
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -756,6 +756,12 @@ void isoburn_toc_disc_free(struct isoburn_toc_disc *disc);
|
|||||||
int isoburn_read_iso_head(struct burn_drive *d, int lba,
|
int isoburn_read_iso_head(struct burn_drive *d, int lba,
|
||||||
int *image_blocks, char *info, int flag);
|
int *image_blocks, char *info, int flag);
|
||||||
|
|
||||||
|
/** Like isoburn_read_iso_head() but with off_t block address and count.
|
||||||
|
@since 1.5.8
|
||||||
|
*/
|
||||||
|
int isoburn_read_iso_head_v2(struct burn_drive *d, off_t lba,
|
||||||
|
off_t *image_blocks, char *info, int flag);
|
||||||
|
|
||||||
|
|
||||||
/** Try to convert the given entity address into various entity addresses
|
/** Try to convert the given entity address into various entity addresses
|
||||||
which would describe it.
|
which would describe it.
|
||||||
@ -785,6 +791,14 @@ int isoburn_get_mount_params(struct burn_drive *d,
|
|||||||
int *lba, int *track, int *session,
|
int *lba, int *track, int *session,
|
||||||
char volid[33], int flag);
|
char volid[33], int flag);
|
||||||
|
|
||||||
|
/** Like isoburn_get_mount_params() but with off_t block address type.
|
||||||
|
@since 1.5.8
|
||||||
|
*/
|
||||||
|
int isoburn_get_mount_params_v2(struct burn_drive *d,
|
||||||
|
int adr_mode, char *adr_value,
|
||||||
|
off_t *lba, int *track, int *session,
|
||||||
|
char volid[33], int flag);
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
/*
|
/*
|
||||||
|
@ -364,6 +364,8 @@ local: *;
|
|||||||
};
|
};
|
||||||
|
|
||||||
LIBISOBURN1_1.5.8 {
|
LIBISOBURN1_1.5.8 {
|
||||||
|
isoburn_get_mount_params_v2;
|
||||||
|
isoburn_read_iso_head_v2;
|
||||||
isoburn_toc_disc_get_sectors_v2;
|
isoburn_toc_disc_get_sectors_v2;
|
||||||
isoburn_toc_session_get_sectors_v2;
|
isoburn_toc_session_get_sectors_v2;
|
||||||
isoburn_toc_track_get_emul_v2;
|
isoburn_toc_track_get_emul_v2;
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2024.03.09.183038"
|
#define Xorriso_timestamP "2024.03.09.204838"
|
||||||
|
Loading…
Reference in New Issue
Block a user